diff --git a/.hgignore b/.hgignore
index 454be00dbffc27a0c6969fb3561556f08d5c1d96..4d98acf5d974d722bab5b39ecb8d9400a519a8d5 100644
--- a/.hgignore
+++ b/.hgignore
@@ -7,6 +7,8 @@ syntax: glob
 # Emacs temp files
 *~
 .*.swp
+#OSX image cache file
+*.DS_Store
 LICENSES
 indra/.distcc
 indra/build-darwin-*
@@ -27,7 +29,6 @@ indra/newview/fmod.dll
 indra/newview/mozilla-theme
 indra/newview/mozilla-universal-darwin.tgz
 indra/newview/res-sdl
-indra/newview/skins
 indra/newview/vivox-runtime
 indra/server-linux-*
 indra/test/linden_file.dat
@@ -48,3 +49,7 @@ tarfile_tmp
 ^indra/web/dataservice/lib/shared/vault.*
 ^indra/web/dataservice/vendor.*
 glob:indra/newview/dbghelp.dll
+glob:*.cpp.orig
+glob:*.cpp.bak
+glob:*.h.bak
+glob:*.h.orig
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 942ba0f0b9727b55fd8a2b8ac60ee8ff3dd5c8e0..4b36c44a5f7b5921e3a5ea110c2807ebd7fab119 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -139,6 +139,7 @@ Blakar Ogre
 blino Nakamura
 	VWR-17
 Boroondas Gupte
+	SNOW-278
 	VWR-233
 	WEB-262
 Bulli Schumann
@@ -296,6 +297,7 @@ Jacek Antonelli
 	VWR-2947
 	VWR-2948
 	VWR-3605
+	VWR-8617
 JB Kraft
 	VWR-5283
 	VWR-7802
@@ -372,6 +374,7 @@ Michelle2 Zenovka
 	VWR-8310
 	VWR-9499
 Mm Alder
+	VWR-197
 	VWR-3777
 	VWR-4794
 	VWR-13578
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 3be22ab401298ab13b583cf8720a1b6efd549f01..a8c81609bb90cc3d1946ce80e7dcce563800322e 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -3,29 +3,29 @@
 # search_dirs: a list of dirs to search for the dependencies
 # dst_path: path to copy deps to, relative to the output location of the target_exe
 macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path) 
-	get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION)
+  get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION)
 
-	if(DARWIN)
-	  get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
-	  if(IS_BUNDLE)
-		get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME)
-		set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS)
-		set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE})
-	  endif(IS_BUNDLE)
-	else(APPLE)
-	  message(FATAL_ERROR "Only darwin currently supported!")
-	endif(DARWIN)
-
-	add_custom_command(
-	  TARGET ${target_exe} POST_BUILD
-	  COMMAND ${CMAKE_COMMAND} 
-	  ARGS
-        "-DBIN_NAME=\"${OUTPUT_LOCATION}\""
-		"-DSEARCH_DIRS=\"${search_dirs}\""
-		"-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\""
-		"-P"
-		"${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake"
-	  )
+  if(DARWIN)
+    get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
+    if(IS_BUNDLE)
+      get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME)
+      set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS)
+      set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE})
+    endif(IS_BUNDLE)
+  else(DARWIN)
+    message(FATAL_ERROR "Only darwin currently supported!")
+  endif(DARWIN)
+  
+  add_custom_command(
+    TARGET ${target_exe} POST_BUILD
+    COMMAND ${CMAKE_COMMAND} 
+    ARGS
+    "-DBIN_NAME=\"${OUTPUT_LOCATION}\""
+    "-DSEARCH_DIRS=\"${search_dirs}\""
+    "-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\""
+    "-P"
+    "${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake"
+    )
 
 endmacro(ll_deploy_sharedlibs_command)
 
diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
index 8afd8f304ccd6c2ba0cdc2a472046dfd964c5451..02f432e3c10a486bea7e35221116fc765a263a32 100644
--- a/indra/cmake/QuickTimePlugin.cmake
+++ b/indra/cmake/QuickTimePlugin.cmake
@@ -12,13 +12,13 @@ elseif (WINDOWS)
   set(QUICKTIME_SDK_DIR "$ENV{PROGRAMFILES}/QuickTime SDK"
       CACHE PATH "Location of the QuickTime SDK.")
 
-  find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient
+  find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient.lib
                PATHS
                ${ARCH_PREBUILT_DIRS_DEBUG}
                "${QUICKTIME_SDK_DIR}\\libraries"
                )
 
-  find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient
+  find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient.lib
                PATHS
                ${ARCH_PREBUILT_DIRS_RELEASE}
                "${QUICKTIME_SDK_DIR}\\libraries"
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 9ec23e80ca13677c175e16a9128197e65319885c..1c572ab27f285176d8b6c3d262abaf349673c5bd 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -51,6 +51,7 @@ elseif (LINUX)
         QtGui
         QtCore
 
+        jpeg
         fontconfig
         X11
         Xrender
diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
index 17bce6f43445792c586a0644880e59ba955b1c8a..fff78ecbe330e1ecabcde00276c154ae37407eff 100644
--- a/indra/cmake/run_build_test.py
+++ b/indra/cmake/run_build_test.py
@@ -1,111 +1,111 @@
-#!/usr/bin/python
-"""\
-@file   run_build_test.py
-@author Nat Goodspeed
-@date   2009-09-03
-@brief  Helper script to allow CMake to run some command after setting
-        environment variables.
-
-CMake has commands to run an external program. But remember that each CMake
-command must be backed by multiple build-system implementations. Unfortunately
-it seems CMake can't promise that every target build system can set specified
-environment variables before running the external program of interest.
-
-This helper script is a workaround. It simply sets the requested environment
-variables and then executes the program specified on the rest of its command
-line.
-
-Example:
-
-python run_build_test.py -DFOO=bar myprog somearg otherarg
-
-sets environment variable FOO=bar, then runs:
-myprog somearg otherarg
-
-$LicenseInfo:firstyear=2009&license=internal$
-Copyright (c) 2009, Linden Research, Inc.
-$/LicenseInfo$
-"""
-
-import os
-import sys
-import subprocess
-
-def main(command, libpath=[], vars={}):
-    """Pass:
-    command is a sequence (e.g. a list) of strings. The first item in the list
-    must be the command name, the rest are its arguments.
-
-    libpath is a sequence of directory pathnames. These will be appended to
-    the platform-specific dynamic library search path environment variable.
-
-    vars is a dict of arbitrary (var, value) pairs to be added to the
-    environment before running 'command'.
-
-    This function runs the specified command, waits for it to terminate and
-    returns its return code. This will be negative if the command terminated
-    with a signal, else it will be the process's specified exit code.
-    """
-    # Handle platform-dependent libpath first.
-    if sys.platform == "win32":
-        lpvars = ["PATH"]
-    elif sys.platform == "darwin":
-        lpvars = ["LD_LIBRARY_PATH", "DYLD_LIBRARY_PATH"]
-    elif sys.platform.startswith("linux"):
-        lpvars = ["LD_LIBRARY_PATH"]
-    else:
-        # No idea what the right pathname might be! But only crump if this
-        # feature is requested.
-        if libpath:
-            raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
-        lpvars = []
-    for var in lpvars:
-        # Split the existing path. Bear in mind that the variable in question
-        # might not exist; instead of KeyError, just use an empty string.
-        dirs = os.environ.get(var, "").split(os.pathsep)
-        # Append the sequence in libpath
-##         print "%s += %r" % (var, libpath)
-        dirs.extend(libpath)
-        # Now rebuild the path string. This way we use a minimum of separators
-        # -- and we avoid adding a pointless separator when libpath is empty.
-        os.environ[var] = os.pathsep.join(dirs)
-    # Now handle arbitrary environment variables. The tricky part is ensuring
-    # that all the keys and values we try to pass are actually strings.
-##     if vars:
-##         print "Setting:"
-##         for key, value in vars.iteritems():
-##             print "%s=%s" % (key, value)
-    os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
-    # Run the child process.
-##     print "Running: %s" % " ".join(command)
-    return subprocess.call(command)
-
-if __name__ == "__main__":
-    from optparse import OptionParser
-    parser = OptionParser(usage="usage: %prog [options] command args...")
-    # We want optparse support for the options we ourselves handle -- but we
-    # DO NOT want it looking at options for the executable we intend to run,
-    # rejecting them as invalid because we don't define them. So configure the
-    # parser to stop looking for options as soon as it sees the first
-    # positional argument (traditional Unix syntax).
-    parser.disable_interspersed_args()
-    parser.add_option("-D", "--define", dest="vars", default=[], action="append",
-                      metavar="VAR=value",
-                      help="Add VAR=value to the env variables defined")
-    parser.add_option("-l", "--libpath", dest="libpath", default=[], action="append",
-                      metavar="DIR",
-                      help="Add DIR to the platform-dependent DLL search path")
-    opts, args = parser.parse_args()
-    # What we have in opts.vars is a list of strings of the form "VAR=value"
-    # or possibly just "VAR". What we want is a dict. We can build that dict by
-    # constructing a list of ["VAR", "value"] pairs -- so split each
-    # "VAR=value" string on the '=' sign (but only once, in case we have
-    # "VAR=some=user=string"). To handle the case of just "VAR", append "" to
-    # the list returned by split(), then slice off anything after the pair we
-    # want.
-    rc = main(command=args, libpath=opts.libpath,
-              vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars]))
-    if rc not in (None, 0):
-        print >>sys.stderr, "Failure running: %s" % " ".join(args)
-        print >>sys.stderr, "Error: %s" % rc
-    sys.exit((rc < 0) and 255 or rc)
+#!/usr/bin/python
+"""\
+@file   run_build_test.py
+@author Nat Goodspeed
+@date   2009-09-03
+@brief  Helper script to allow CMake to run some command after setting
+        environment variables.
+
+CMake has commands to run an external program. But remember that each CMake
+command must be backed by multiple build-system implementations. Unfortunately
+it seems CMake can't promise that every target build system can set specified
+environment variables before running the external program of interest.
+
+This helper script is a workaround. It simply sets the requested environment
+variables and then executes the program specified on the rest of its command
+line.
+
+Example:
+
+python run_build_test.py -DFOO=bar myprog somearg otherarg
+
+sets environment variable FOO=bar, then runs:
+myprog somearg otherarg
+
+$LicenseInfo:firstyear=2009&license=internal$
+Copyright (c) 2009, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import os
+import sys
+import subprocess
+
+def main(command, libpath=[], vars={}):
+    """Pass:
+    command is a sequence (e.g. a list) of strings. The first item in the list
+    must be the command name, the rest are its arguments.
+
+    libpath is a sequence of directory pathnames. These will be appended to
+    the platform-specific dynamic library search path environment variable.
+
+    vars is a dict of arbitrary (var, value) pairs to be added to the
+    environment before running 'command'.
+
+    This function runs the specified command, waits for it to terminate and
+    returns its return code. This will be negative if the command terminated
+    with a signal, else it will be the process's specified exit code.
+    """
+    # Handle platform-dependent libpath first.
+    if sys.platform == "win32":
+        lpvars = ["PATH"]
+    elif sys.platform == "darwin":
+        lpvars = ["LD_LIBRARY_PATH", "DYLD_LIBRARY_PATH"]
+    elif sys.platform.startswith("linux"):
+        lpvars = ["LD_LIBRARY_PATH"]
+    else:
+        # No idea what the right pathname might be! But only crump if this
+        # feature is requested.
+        if libpath:
+            raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
+        lpvars = []
+    for var in lpvars:
+        # Split the existing path. Bear in mind that the variable in question
+        # might not exist; instead of KeyError, just use an empty string.
+        dirs = os.environ.get(var, "").split(os.pathsep)
+        # Append the sequence in libpath
+##         print "%s += %r" % (var, libpath)
+        dirs.extend(libpath)
+        # Now rebuild the path string. This way we use a minimum of separators
+        # -- and we avoid adding a pointless separator when libpath is empty.
+        os.environ[var] = os.pathsep.join(dirs)
+    # Now handle arbitrary environment variables. The tricky part is ensuring
+    # that all the keys and values we try to pass are actually strings.
+##     if vars:
+##         print "Setting:"
+##         for key, value in vars.iteritems():
+##             print "%s=%s" % (key, value)
+    os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
+    # Run the child process.
+##     print "Running: %s" % " ".join(command)
+    return subprocess.call(command)
+
+if __name__ == "__main__":
+    from optparse import OptionParser
+    parser = OptionParser(usage="usage: %prog [options] command args...")
+    # We want optparse support for the options we ourselves handle -- but we
+    # DO NOT want it looking at options for the executable we intend to run,
+    # rejecting them as invalid because we don't define them. So configure the
+    # parser to stop looking for options as soon as it sees the first
+    # positional argument (traditional Unix syntax).
+    parser.disable_interspersed_args()
+    parser.add_option("-D", "--define", dest="vars", default=[], action="append",
+                      metavar="VAR=value",
+                      help="Add VAR=value to the env variables defined")
+    parser.add_option("-l", "--libpath", dest="libpath", default=[], action="append",
+                      metavar="DIR",
+                      help="Add DIR to the platform-dependent DLL search path")
+    opts, args = parser.parse_args()
+    # What we have in opts.vars is a list of strings of the form "VAR=value"
+    # or possibly just "VAR". What we want is a dict. We can build that dict by
+    # constructing a list of ["VAR", "value"] pairs -- so split each
+    # "VAR=value" string on the '=' sign (but only once, in case we have
+    # "VAR=some=user=string"). To handle the case of just "VAR", append "" to
+    # the list returned by split(), then slice off anything after the pair we
+    # want.
+    rc = main(command=args, libpath=opts.libpath,
+              vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars]))
+    if rc not in (None, 0):
+        print >>sys.stderr, "Failure running: %s" % " ".join(args)
+        print >>sys.stderr, "Error: %s" % rc
+    sys.exit((rc < 0) and 255 or rc)
diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp
index 88cd77f7afc3b9bad2607bad16eff60e6e4182be..0ee378f3b8205c85f285d5452ddad46cd8579d67 100644
--- a/indra/llcharacter/llheadrotmotion.cpp
+++ b/indra/llcharacter/llheadrotmotion.cpp
@@ -251,10 +251,13 @@ BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)
 	mLastHeadRot = head_rot_local;
 
 	// Set the head rotation.
-	LLQuaternion torsoRotLocal =  mNeckState->getJoint()->getParent()->getWorldRotation() * currentInvRootRotWorld;
-	head_rot_local = head_rot_local * ~torsoRotLocal;
-	mNeckState->setRotation( nlerp(NECK_LAG, LLQuaternion::DEFAULT, head_rot_local) );
-	mHeadState->setRotation( nlerp(1.f - NECK_LAG, LLQuaternion::DEFAULT, head_rot_local));
+	if(mNeckState->getJoint() && mNeckState->getJoint()->getParent())
+	{
+		LLQuaternion torsoRotLocal =  mNeckState->getJoint()->getParent()->getWorldRotation() * currentInvRootRotWorld;
+		head_rot_local = head_rot_local * ~torsoRotLocal;
+		mNeckState->setRotation( nlerp(NECK_LAG, LLQuaternion::DEFAULT, head_rot_local) );
+		mHeadState->setRotation( nlerp(1.f - NECK_LAG, LLQuaternion::DEFAULT, head_rot_local));
+	}
 
 	return TRUE;
 }
diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h
index affc49debfecfabe30852965e747046bf69ebec3..eec56d78443d010db7df8b1e2f05b39ecd241a63 100644
--- a/indra/llcharacter/llvisualparam.h
+++ b/indra/llcharacter/llvisualparam.h
@@ -151,7 +151,7 @@ class LLVisualParam
 	virtual void			setAnimating(BOOL is_animating) { mIsAnimating = is_animating && !mIsDummy; }
 	BOOL					getAnimating() const { return mIsAnimating; }
 
-	void					setIsDummy(BOOL is_self) { mIsDummy = is_self; }
+	void					setIsDummy(BOOL is_dummy) { mIsDummy = is_dummy; }
 
 protected:
 	F32					mCurWeight;			// current weight
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index e7aaf3c984de74f5c3ed45d38b50cdb7931273a6..f7856986121958e39e123447888cab3bd6d1c377 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -50,6 +50,7 @@ set(llcommon_SOURCE_FILES
     llfile.cpp
     llfindlocale.cpp
     llfixedbuffer.cpp
+    llfoldertype.cpp
     llformat.cpp
     llframetimer.cpp
     llheartbeat.cpp
@@ -150,6 +151,7 @@ set(llcommon_HEADER_FILES
     llfile.h
     llfindlocale.h
     llfixedbuffer.h
+    llfoldertype.h
     llformat.h
     llframetimer.h
     llhash.h
diff --git a/indra/llcommon/llallocator.h b/indra/llcommon/llallocator.h
index 0d6f18c5d47a80cc06499df7b2e50eddd0ce0ffd..50129b4526d7d2bb4ac4120cedc352fda79cfc06 100644
--- a/indra/llcommon/llallocator.h
+++ b/indra/llcommon/llallocator.h
@@ -1,63 +1,63 @@
-/** 
- * @file llallocator.h
- * @brief Declaration of the LLAllocator class.
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2009-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLALLOCATOR_H
-#define LL_LLALLOCATOR_H
-
-#include <string>
-
-#include "llmemtype.h"
-#include "llallocator_heap_profile.h"
-
-class LL_COMMON_API LLAllocator {
-    friend class LLMemoryView;
-    friend class LLMemType;
-
-private:
-	static void pushMemType(S32 type);
-	static S32 popMemType();
-
-public:
-    void setProfilingEnabled(bool should_enable);
-
-    static bool isProfiling();
-
-    LLAllocatorHeapProfile const & getProfile();
-
-private:
-    std::string getRawProfile();
-
-private:
-    LLAllocatorHeapProfile mProf;
-};
-
-#endif // LL_LLALLOCATOR_H
+/** 
+ * @file llallocator.h
+ * @brief Declaration of the LLAllocator class.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLALLOCATOR_H
+#define LL_LLALLOCATOR_H
+
+#include <string>
+
+#include "llmemtype.h"
+#include "llallocator_heap_profile.h"
+
+class LL_COMMON_API LLAllocator {
+    friend class LLMemoryView;
+    friend class LLMemType;
+
+private:
+	static void pushMemType(S32 type);
+	static S32 popMemType();
+
+public:
+    void setProfilingEnabled(bool should_enable);
+
+    static bool isProfiling();
+
+    LLAllocatorHeapProfile const & getProfile();
+
+private:
+    std::string getRawProfile();
+
+private:
+    LLAllocatorHeapProfile mProf;
+};
+
+#endif // LL_LLALLOCATOR_H
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
index 669afc53303121b99d9bec164ffc7f8d5f57bdc7..ed70b1d9f28809a274f06e44e62043a4157eb8f7 100644
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -57,7 +57,7 @@ void ll_init_apr()
 
 	if(!LLAPRFile::sAPRFilePoolp)
 	{
-		LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool() ;
+		LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ;
 	}
 }
 
@@ -99,13 +99,12 @@ void ll_cleanup_apr()
 //
 //LLAPRPool
 //
-LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
-{
-	mParent = parent ;
-	mReleasePoolFlag = releasePoolFlag ;
-	mMaxSize = size ;
-	mPool = NULL ;
-
+LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 	
+	: mParent(parent),
+	mReleasePoolFlag(releasePoolFlag),
+	mMaxSize(size),
+	mPool(NULL)
+{	
 	createAPRPool() ;
 }
 
@@ -148,31 +147,65 @@ void LLAPRPool::releaseAPRPool()
 	}
 }
 
+//virtual
 apr_pool_t* LLAPRPool::getAPRPool() 
+{	
+	return mPool ; 
+}
+
+LLVolatileAPRPool::LLVolatileAPRPool(BOOL is_local, apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
+				  : LLAPRPool(parent, size, releasePoolFlag),
+				  mNumActiveRef(0),
+				  mNumTotalRef(0),
+				  mMutexPool(NULL),
+				  mMutexp(NULL)
 {
-	if(!mPool)
+	//create mutex
+	if(!is_local) //not a local apr_pool, that is: shared by multiple threads.
 	{
-		createAPRPool() ;
+		apr_pool_create(&mMutexPool, NULL); // Create a pool for mutex
+		apr_thread_mutex_create(&mMutexp, APR_THREAD_MUTEX_UNNESTED, mMutexPool);
 	}
-	
-	return mPool ; 
 }
-LLVolatileAPRPool::LLVolatileAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) 
-				  : LLAPRPool(parent, size, releasePoolFlag)
+
+LLVolatileAPRPool::~LLVolatileAPRPool()
 {
-	mNumActiveRef = 0 ;
-	mNumTotalRef = 0 ;
+	//delete mutex
+	if(mMutexp)
+	{
+		apr_thread_mutex_destroy(mMutexp);
+		apr_pool_destroy(mMutexPool);
+	}
 }
 
-apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() 
+//
+//define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
+//
+//virtual 
+apr_pool_t* LLVolatileAPRPool::getAPRPool() 
 {
+	return LLVolatileAPRPool::getVolatileAPRPool() ;
+}
+
+apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() 
+{	
+	LLScopedLock lock(mMutexp) ;
+
 	mNumTotalRef++ ;
 	mNumActiveRef++ ;
-	return getAPRPool() ;
+
+	if(!mPool)
+	{
+		createAPRPool() ;
+	}
+	
+	return mPool ;
 }
 
 void LLVolatileAPRPool::clearVolatileAPRPool() 
 {
+	LLScopedLock lock(mMutexp) ;
+
 	if(mNumActiveRef > 0)
 	{
 		mNumActiveRef--;
@@ -251,10 +284,9 @@ void LLScopedLock::unlock()
 bool ll_apr_warn_status(apr_status_t status)
 {
 	if(APR_SUCCESS == status) return false;
-#ifndef LL_WINDOWS
 	char buf[MAX_STRING];	/* Flawfinder: ignore */
-	LL_WARNS_ONCE("APR") << "APR: " << apr_strerror(status, buf, MAX_STRING) << LL_ENDL;
-#endif
+	apr_strerror(status, buf, MAX_STRING);
+	LL_WARNS("APR") << "APR: " << buf << LL_ENDL;
 	return true;
 }
 
@@ -268,10 +300,18 @@ void ll_apr_assert_status(apr_status_t status)
 // LLAPRFile functions
 //
 LLAPRFile::LLAPRFile()
+	: mFile(NULL),
+	  mCurrentFilePoolp(NULL)
+{
+}
+
+LLAPRFile::LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool)
+	: mFile(NULL),
+	  mCurrentFilePoolp(NULL)
 {
-	mFile = NULL ;
-	mCurrentFilePoolp = NULL ;
+	open(filename, flags, pool);
 }
+
 LLAPRFile::~LLAPRFile()
 {
 	close() ;
@@ -295,11 +335,40 @@ apr_status_t LLAPRFile::close()
 	return ret ;
 }
 
-apr_status_t LLAPRFile::open(LLVolatileAPRPool* pool, const std::string& filename, apr_int32_t flags, S32* sizep)
+apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool, S32* sizep)
 {
 	apr_status_t s ;
-	s = open(filename, flags, pool ? pool->getVolatileAPRPool() : NULL, sizep) ;
+
+	//check if already open some file
+	llassert_always(!mFile) ;
+	llassert_always(!mCurrentFilePoolp) ;
 	
+	apr_pool_t* apr_pool = pool ? pool->getVolatileAPRPool() : NULL ;
+	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool));
+
+	if (s != APR_SUCCESS || !mFile)
+	{
+		mFile = NULL ;
+		
+		if (sizep)
+		{
+			*sizep = 0;
+		}
+	}
+	else if (sizep)
+	{
+		S32 file_size = 0;
+		apr_off_t offset = 0;
+		if (apr_file_seek(mFile, APR_END, &offset) == APR_SUCCESS)
+		{
+			llassert_always(offset <= 0x7fffffff);
+			file_size = (S32)offset;
+			offset = 0;
+			apr_file_seek(mFile, APR_SET, &offset);
+		}
+		*sizep = file_size;
+	}
+
 	if(!mCurrentFilePoolp)
 	{
 		mCurrentFilePoolp = pool ;
@@ -312,40 +381,25 @@ apr_status_t LLAPRFile::open(LLVolatileAPRPool* pool, const std::string& filenam
 
 	return s ;
 }
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, apr_pool_t* pool, S32* sizep)
+
+//use gAPRPoolp.
+apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool)
 {
 	apr_status_t s;
 
 	//check if already open some file
 	llassert_always(!mFile) ;
 	llassert_always(!mCurrentFilePoolp) ;
+	llassert_always(use_global_pool) ; //be aware of using gAPRPoolp.
 	
-	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(pool));
+	s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, gAPRPoolp);
 	if (s != APR_SUCCESS || !mFile)
 	{
 		mFile = NULL ;
 		close() ;
-		if (sizep)
-		{
-			*sizep = 0;
-		}
 		return s;
 	}
 
-	if (sizep)
-	{
-		S32 file_size = 0;
-		apr_off_t offset = 0;
-		if (apr_file_seek(mFile, APR_END, &offset) == APR_SUCCESS)
-		{
-			llassert_always(offset <= 0x7fffffff);
-			file_size = (S32)offset;
-			offset = 0;
-			apr_file_seek(mFile, APR_SET, &offset);
-		}
-		*sizep = file_size;
-	}
-
 	return s;
 }
 
@@ -369,6 +423,7 @@ S32 LLAPRFile::read(void *buf, S32 nbytes)
 	apr_status_t s = apr_file_read(mFile, buf, &sz);
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return 0;
 	}
 	else
@@ -386,6 +441,7 @@ S32 LLAPRFile::write(const void *buf, S32 nbytes)
 	apr_status_t s = apr_file_write(mFile, buf, &sz);
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return 0;
 	}
 	else
@@ -434,6 +490,8 @@ apr_file_t* LLAPRFile::open(const std::string& filename, LLVolatileAPRPool* pool
 	s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
 	if (s != APR_SUCCESS || !file_handle)
 	{
+		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to open filename: " << filename << LL_ENDL;
 		file_handle = NULL ;
 		close(file_handle, pool) ;
 		return NULL;
@@ -464,6 +522,7 @@ S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
 	}
 	if (s != APR_SUCCESS)
 	{
+		ll_apr_warn_status(s);
 		return -1;
 	}
 	else
@@ -501,6 +560,8 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb
 		apr_status_t s = apr_file_read(file_handle, buf, &bytes_read);
 		if (s != APR_SUCCESS)
 		{
+			LL_WARNS("APR") << " Attempting to read filename: " << filename << LL_ENDL;
+			ll_apr_warn_status(s);
 			bytes_read = 0;
 		}
 		else
@@ -549,6 +610,8 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
 		apr_status_t s = apr_file_write(file_handle, buf, &bytes_written);
 		if (s != APR_SUCCESS)
 		{
+			LL_WARNS("APR") << " Attempting to write filename: " << filename << LL_ENDL;
+			ll_apr_warn_status(s);
 			bytes_written = 0;
 		}
 		else
@@ -575,8 +638,8 @@ bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
 
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::remove failed on file: " << filename << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to remove filename: " << filename << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -593,8 +656,8 @@ bool LLAPRFile::rename(const std::string& filename, const std::string& newname,
 	
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::rename failed on file: " << filename << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to rename filename: " << filename << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -667,8 +730,8 @@ bool LLAPRFile::makeDir(const std::string& dirname, LLVolatileAPRPool* pool)
 		
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::makeDir failed on file: " << dirname << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to make directory: " << dirname << LL_ENDL;
 		return false;
 	}
 	return true;
@@ -685,8 +748,8 @@ bool LLAPRFile::removeDir(const std::string& dirname, LLVolatileAPRPool* pool)
 	
 	if (s != APR_SUCCESS)
 	{
-		LL_DEBUGS("APR") << "LLAPRFile::removeDir failed on file: " << dirname << LL_ENDL;
 		ll_apr_warn_status(s);
+		LL_WARNS("APR") << " Attempting to remove directory: " << dirname << LL_ENDL;
 		return false;
 	}
 	return true;
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index 0898aeec470e26e02717b8dddf03352f6e8c2373..b08bb617c5778bffe706e8a54b0bfcdb5e10bab4 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -1,259 +1,265 @@
-/** 
- * @file llapr.h
- * @author Phoenix
- * @date 2004-11-28
- * @brief Helper functions for using the apache portable runtime library.
- *
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLAPR_H
-#define LL_LLAPR_H
-
-#if LL_LINUX || LL_SOLARIS
-#include <sys/param.h>  // Need PATH_MAX in APR headers...
-#endif
-
-#include <boost/noncopyable.hpp>
-
-#include "apr_thread_proc.h"
-#include "apr_thread_mutex.h"
-#include "apr_getopt.h"
-#include "apr_signal.h"
-#include "apr_atomic.h"
-#include "llstring.h"
-
-extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp;
-extern apr_thread_mutex_t* gCallStacksLogMutexp;
-
-/** 
- * @brief initialize the common apr constructs -- apr itself, the
- * global pool, and a mutex.
- */
-void LL_COMMON_API ll_init_apr();
-
-/** 
- * @brief Cleanup those common apr constructs.
- */
-void LL_COMMON_API ll_cleanup_apr();
-
-//
-//LL apr_pool
-//manage apr_pool_t, destroy allocated apr_pool in the destruction function.
-//
-class LL_COMMON_API LLAPRPool
-{
-public:
-	LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ;
-	~LLAPRPool() ;
-
-	apr_pool_t* getAPRPool() ;
-	apr_status_t getStatus() {return mStatus ; }
-
-protected:
-	void releaseAPRPool() ;
-	void createAPRPool() ;
-
-protected:
-	apr_pool_t*  mPool ;              //pointing to an apr_pool
-	apr_pool_t*  mParent ;			  //parent pool
-	apr_size_t   mMaxSize ;           //max size of mPool, mPool should return memory to system if allocated memory beyond this limit. However it seems not to work.
-	apr_status_t mStatus ;            //status when creating the pool
-	BOOL         mReleasePoolFlag ;   //if set, mPool is destroyed when LLAPRPool is deleted. default value is true.
-};
-
-//
-//volatile LL apr_pool
-//which clears memory automatically.
-//so it can not hold static data or data after memory is cleared
-//
-class LL_COMMON_API LLVolatileAPRPool : public LLAPRPool
-{
-public:
-	LLVolatileAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
-	~LLVolatileAPRPool(){}
-
-	apr_pool_t* getVolatileAPRPool() ;
-	
-	void        clearVolatileAPRPool() ;
-
-	BOOL        isFull() ;
-	BOOL        isEmpty() {return !mNumActiveRef ;}
-private:
-	S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool.
-	S32 mNumTotalRef ;  //number of total pointers pointing to the apr_pool since last creating.   
-} ;
-
-/** 
- * @class LLScopedLock
- * @brief Small class to help lock and unlock mutexes.
- *
- * This class is used to have a stack level lock once you already have
- * an apr mutex handy. The constructor handles the lock, and the
- * destructor handles the unlock. Instances of this class are
- * <b>not</b> thread safe.
- */
-class LL_COMMON_API LLScopedLock : private boost::noncopyable
-{
-public:
-	/**
-	 * @brief Constructor which accepts a mutex, and locks it.
-	 *
-	 * @param mutex An allocated APR mutex. If you pass in NULL,
-	 * this wrapper will not lock.
-	 */
-	LLScopedLock(apr_thread_mutex_t* mutex);
-
-	/**
-	 * @brief Destructor which unlocks the mutex if still locked.
-	 */
-	~LLScopedLock();
-
-	/** 
-	 * @brief Check lock.
-	 */
-	bool isLocked() const { return mLocked; }
-
-	/** 
-	 * @brief This method unlocks the mutex.
-	 */
-	void unlock();
-
-protected:
-	bool mLocked;
-	apr_thread_mutex_t* mMutex;
-};
-
-template <typename Type> class LLAtomic32
-{
-public:
-	LLAtomic32<Type>() {};
-	LLAtomic32<Type>(Type x) {apr_atomic_set32(&mData, apr_uint32_t(x)); };
-	~LLAtomic32<Type>() {};
-
-	operator const Type() { apr_uint32_t data = apr_atomic_read32(&mData); return Type(data); }
-	Type operator =(const Type& x) { apr_atomic_set32(&mData, apr_uint32_t(x)); return Type(mData); }
-	void operator -=(Type x) { apr_atomic_sub32(&mData, apr_uint32_t(x)); }
-	void operator +=(Type x) { apr_atomic_add32(&mData, apr_uint32_t(x)); }
-	Type operator ++(int) { return apr_atomic_inc32(&mData); } // Type++
-	Type operator --(int) { return apr_atomic_dec32(&mData); } // Type--
-	
-private:
-	apr_uint32_t mData;
-};
-
-typedef LLAtomic32<U32> LLAtomicU32;
-typedef LLAtomic32<S32> LLAtomicS32;
-
-// File IO convenience functions.
-// Returns NULL if the file fails to openm sets *sizep to file size of not NULL
-// abbreviated flags
-#define LL_APR_R (APR_READ) // "r"
-#define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
-#define LL_APR_RB (APR_READ|APR_BINARY) // "rb"
-#define LL_APR_WB (APR_CREATE|APR_TRUNCATE|APR_WRITE|APR_BINARY) // "wb"
-#define LL_APR_RPB (APR_READ|APR_WRITE|APR_BINARY) // "r+b"
-#define LL_APR_WPB (APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY) // "w+b"
-
-//
-//apr_file manager
-//which: 1)only keeps one file open;
-//       2)closes the open file in the destruction function
-//       3)informs the apr_pool to clean the memory when the file is closed.
-//Note: please close an open file at the earliest convenience. 
-//      especially do not put some time-costly operations between open() and close().
-//      otherwise it might lock the APRFilePool.
-//there are two different apr_pools the APRFile can use:
-//      1, a temperary pool passed to an APRFile function, which is used within this function and only once.
-//      2, a global pool.
-//
-class LL_COMMON_API LLAPRFile
-{
-private:
-	apr_file_t* mFile ;
-	LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool. 
-
-public:
-	LLAPRFile() ;
-	~LLAPRFile() ;
-
-	apr_status_t open(LLVolatileAPRPool* pool, const std::string& filename, apr_int32_t flags, S32* sizep = NULL);
-	apr_status_t open(const std::string& filename, apr_int32_t flags, apr_pool_t* pool = NULL, S32* sizep = NULL);
-	apr_status_t close() ;
-
-	// Returns actual offset, -1 if seek fails
-	S32 seek(apr_seek_where_t where, S32 offset);
-	apr_status_t eof() { return apr_file_eof(mFile);}
-
-	// Returns bytes read/written, 0 if read/write fails:
-	S32 read(void* buf, S32 nbytes);
-	S32 write(const void* buf, S32 nbytes);
-	
-	apr_file_t* getFileHandle() {return mFile;}	
-
-private:
-	apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;
-
-//
-//*******************************************************************************************************************************
-//static components
-//
-public:
-	static LLVolatileAPRPool *sAPRFilePoolp ; //a global apr_pool for APRFile, which is used only when local pool does not exist.
-
-private:
-	static apr_file_t* open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags);
-	static apr_status_t close(apr_file_t* file, LLVolatileAPRPool* pool) ;
-	static S32 seek(apr_file_t* file, apr_seek_where_t where, S32 offset);
-public:
-	// returns false if failure:
-	static bool remove(const std::string& filename, LLVolatileAPRPool* pool = NULL);
-	static bool rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool = NULL);
-	static bool isExist(const std::string& filename, LLVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ);
-	static S32 size(const std::string& filename, LLVolatileAPRPool* pool = NULL);
-	static bool makeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
-	static bool removeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
-
-	// Returns bytes read/written, 0 if read/write fails:
-	static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);	
-	static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);	
-//*******************************************************************************************************************************
-};
-
-/**
- * @brief Function which approprately logs error or remains quiet on
- * APR_SUCCESS.
- * @return Returns <code>true</code> if status is an error condition.
- */
-bool LL_COMMON_API ll_apr_warn_status(apr_status_t status);
-
-void LL_COMMON_API ll_apr_assert_status(apr_status_t status);
-
-extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool
-
-#endif // LL_LLAPR_H
+/** 
+ * @file llapr.h
+ * @author Phoenix
+ * @date 2004-11-28
+ * @brief Helper functions for using the apache portable runtime library.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLAPR_H
+#define LL_LLAPR_H
+
+#if LL_LINUX || LL_SOLARIS
+#include <sys/param.h>  // Need PATH_MAX in APR headers...
+#endif
+
+#include <boost/noncopyable.hpp>
+
+#include "apr_thread_proc.h"
+#include "apr_thread_mutex.h"
+#include "apr_getopt.h"
+#include "apr_signal.h"
+#include "apr_atomic.h"
+#include "llstring.h"
+
+extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp;
+extern apr_thread_mutex_t* gCallStacksLogMutexp;
+
+/** 
+ * @brief initialize the common apr constructs -- apr itself, the
+ * global pool, and a mutex.
+ */
+void LL_COMMON_API ll_init_apr();
+
+/** 
+ * @brief Cleanup those common apr constructs.
+ */
+void LL_COMMON_API ll_cleanup_apr();
+
+//
+//LL apr_pool
+//manage apr_pool_t, destroy allocated apr_pool in the destruction function.
+//
+class LL_COMMON_API LLAPRPool
+{
+public:
+	LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ;
+	virtual ~LLAPRPool() ;
+
+	virtual apr_pool_t* getAPRPool() ;
+	apr_status_t getStatus() {return mStatus ; }
+
+protected:
+	void releaseAPRPool() ;
+	void createAPRPool() ;
+
+protected:
+	apr_pool_t*  mPool ;              //pointing to an apr_pool
+	apr_pool_t*  mParent ;			  //parent pool
+	apr_size_t   mMaxSize ;           //max size of mPool, mPool should return memory to system if allocated memory beyond this limit. However it seems not to work.
+	apr_status_t mStatus ;            //status when creating the pool
+	BOOL         mReleasePoolFlag ;   //if set, mPool is destroyed when LLAPRPool is deleted. default value is true.
+};
+
+//
+//volatile LL apr_pool
+//which clears memory automatically.
+//so it can not hold static data or data after memory is cleared
+//
+class LL_COMMON_API LLVolatileAPRPool : public LLAPRPool
+{
+public:
+	LLVolatileAPRPool(BOOL is_local = TRUE, apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
+	virtual ~LLVolatileAPRPool();
+
+	/*virtual*/ apr_pool_t* getAPRPool() ; //define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
+	apr_pool_t* getVolatileAPRPool() ;	
+	void        clearVolatileAPRPool() ;
+
+	BOOL        isFull() ;
+	
+private:
+	S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool.
+	S32 mNumTotalRef ;  //number of total pointers pointing to the apr_pool since last creating.  
+
+	apr_thread_mutex_t *mMutexp;
+	apr_pool_t         *mMutexPool;
+} ;
+
+/** 
+ * @class LLScopedLock
+ * @brief Small class to help lock and unlock mutexes.
+ *
+ * This class is used to have a stack level lock once you already have
+ * an apr mutex handy. The constructor handles the lock, and the
+ * destructor handles the unlock. Instances of this class are
+ * <b>not</b> thread safe.
+ */
+class LL_COMMON_API LLScopedLock : private boost::noncopyable
+{
+public:
+	/**
+	 * @brief Constructor which accepts a mutex, and locks it.
+	 *
+	 * @param mutex An allocated APR mutex. If you pass in NULL,
+	 * this wrapper will not lock.
+	 */
+	LLScopedLock(apr_thread_mutex_t* mutex);
+
+	/**
+	 * @brief Destructor which unlocks the mutex if still locked.
+	 */
+	~LLScopedLock();
+
+	/** 
+	 * @brief Check lock.
+	 */
+	bool isLocked() const { return mLocked; }
+
+	/** 
+	 * @brief This method unlocks the mutex.
+	 */
+	void unlock();
+
+protected:
+	bool mLocked;
+	apr_thread_mutex_t* mMutex;
+};
+
+template <typename Type> class LLAtomic32
+{
+public:
+	LLAtomic32<Type>() {};
+	LLAtomic32<Type>(Type x) {apr_atomic_set32(&mData, apr_uint32_t(x)); };
+	~LLAtomic32<Type>() {};
+
+	operator const Type() { apr_uint32_t data = apr_atomic_read32(&mData); return Type(data); }
+	Type operator =(const Type& x) { apr_atomic_set32(&mData, apr_uint32_t(x)); return Type(mData); }
+	void operator -=(Type x) { apr_atomic_sub32(&mData, apr_uint32_t(x)); }
+	void operator +=(Type x) { apr_atomic_add32(&mData, apr_uint32_t(x)); }
+	Type operator ++(int) { return apr_atomic_inc32(&mData); } // Type++
+	Type operator --(int) { return apr_atomic_dec32(&mData); } // Type--
+	
+private:
+	apr_uint32_t mData;
+};
+
+typedef LLAtomic32<U32> LLAtomicU32;
+typedef LLAtomic32<S32> LLAtomicS32;
+
+// File IO convenience functions.
+// Returns NULL if the file fails to openm sets *sizep to file size of not NULL
+// abbreviated flags
+#define LL_APR_R (APR_READ) // "r"
+#define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
+#define LL_APR_RB (APR_READ|APR_BINARY) // "rb"
+#define LL_APR_WB (APR_CREATE|APR_TRUNCATE|APR_WRITE|APR_BINARY) // "wb"
+#define LL_APR_RPB (APR_READ|APR_WRITE|APR_BINARY) // "r+b"
+#define LL_APR_WPB (APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY) // "w+b"
+
+//
+//apr_file manager
+//which: 1)only keeps one file open;
+//       2)closes the open file in the destruction function
+//       3)informs the apr_pool to clean the memory when the file is closed.
+//Note: please close an open file at the earliest convenience. 
+//      especially do not put some time-costly operations between open() and close().
+//      otherwise it might lock the APRFilePool.
+//there are two different apr_pools the APRFile can use:
+//      1, a temperary pool passed to an APRFile function, which is used within this function and only once.
+//      2, a global pool.
+//
+
+class LL_COMMON_API LLAPRFile : boost::noncopyable
+{
+	// make this non copyable since a copy closes the file
+private:
+	apr_file_t* mFile ;
+	LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool. 
+
+public:
+	LLAPRFile() ;
+	LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL);
+	~LLAPRFile() ;
+	
+	apr_status_t open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL, S32* sizep = NULL);
+	apr_status_t open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool); //use gAPRPoolp.
+	apr_status_t close() ;
+
+	// Returns actual offset, -1 if seek fails
+	S32 seek(apr_seek_where_t where, S32 offset);
+	apr_status_t eof() { return apr_file_eof(mFile);}
+
+	// Returns bytes read/written, 0 if read/write fails:
+	S32 read(void* buf, S32 nbytes);
+	S32 write(const void* buf, S32 nbytes);
+	
+	apr_file_t* getFileHandle() {return mFile;}	
+
+private:
+	apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;	
+	
+//
+//*******************************************************************************************************************************
+//static components
+//
+public:
+	static LLVolatileAPRPool *sAPRFilePoolp ; //a global apr_pool for APRFile, which is used only when local pool does not exist.
+
+private:
+	static apr_file_t* open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags);
+	static apr_status_t close(apr_file_t* file, LLVolatileAPRPool* pool) ;
+	static S32 seek(apr_file_t* file, apr_seek_where_t where, S32 offset);
+public:
+	// returns false if failure:
+	static bool remove(const std::string& filename, LLVolatileAPRPool* pool = NULL);
+	static bool rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool = NULL);
+	static bool isExist(const std::string& filename, LLVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ);
+	static S32 size(const std::string& filename, LLVolatileAPRPool* pool = NULL);
+	static bool makeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
+	static bool removeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
+
+	// Returns bytes read/written, 0 if read/write fails:
+	static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);	
+	static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);	
+//*******************************************************************************************************************************
+};
+
+/**
+ * @brief Function which approprately logs error or remains quiet on
+ * APR_SUCCESS.
+ * @return Returns <code>true</code> if status is an error condition.
+ */
+bool LL_COMMON_API ll_apr_warn_status(apr_status_t status);
+
+void LL_COMMON_API ll_apr_assert_status(apr_status_t status);
+
+extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool
+
+#endif // LL_LLAPR_H
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index f3aff332ba9310bdf15aa039b7769edc7e0bdf0c..3ea742957e8f8f231c97fef493048aae7deddafb 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -43,30 +43,21 @@
 struct AssetEntry : public LLDictionaryEntry
 {
 	AssetEntry(const char *desc_name,
-			   const char *type_name, // 8 character limit!
-			   const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one
-			   const char *category_name, // used by llinventorymodel when creating new categories
-			   EDragAndDropType dad_type,
-			   bool can_link, // can you create a link to this type?
-			   bool is_protected) // can the viewer change categories of this type?
+			   const char *type_name, 	// 8 character limit!
+			   const char *human_name, 	// for decoding to human readable form; put any and as many printable characters you want in each one
+			   bool can_link) 			// can you create a link to this type?
 		:
 		LLDictionaryEntry(desc_name),
 		mTypeName(type_name),
 		mHumanName(human_name),
-		mCategoryName(category_name),
-		mDadType(dad_type),
-		mCanLink(can_link),
-		mIsProtected(is_protected)
+		mCanLink(can_link)
 	{
 		llassert(strlen(mTypeName) <= 8);
 	}
 
 	const char *mTypeName;
 	const char *mHumanName;
-	const char *mCategoryName;
-	EDragAndDropType mDadType;
 	bool mCanLink;
-	bool mIsProtected;
 };
 
 class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
@@ -78,49 +69,34 @@ class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
 
 LLAssetDictionary::LLAssetDictionary()
 {
-	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CATEGORY NAME 		DRAG&DROP		CAN LINK?	PROTECTED?
-	//      												  |--------------------|-----------|-------------------|-------------------|---------------|-----------|-----------|
-	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			"Textures", 		DAD_TEXTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			"Sounds", 			DAD_SOUND,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		"Calling Cards", 	DAD_CALLINGCARD, TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			"Landmarks", 		DAD_LANDMARK,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			"Clothing", 		DAD_CLOTHING,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			"Objects", 			DAD_OBJECT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		"Notecards", 		DAD_NOTECARD,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			"New Folder", 		DAD_CATEGORY,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ROOT_CATEGORY, 	new AssetEntry("ROOT_CATEGORY",		"root",		"root",				"Inventory", 		DAD_ROOT_CATEGORY, TRUE,	TRUE));
-	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		"Scripts", 			DAD_SCRIPT,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		"Scripts", 			DAD_NONE,		TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		"Body Parts", 		DAD_BODYPART,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_TRASH, 			new AssetEntry("TRASH",				"trash",	"trash",			"Trash", 			DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SNAPSHOT_CATEGORY, new AssetEntry("SNAPSHOT_CATEGORY", "snapshot",	"snapshot",			"Photo Album", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LOST_AND_FOUND, 	new AssetEntry("LOST_AND_FOUND", 	"lstndfnd",	"lost and found",	"Lost And Found", 	DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			"Uncompressed SoundS", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		"Uncompressed Images", DAD_NONE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		"Animations", 		DAD_ANIMATION,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			"Gestures", 		DAD_GESTURE,	TRUE,		TRUE));
-	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			"New Folder", 		DAD_NONE,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_FAVORITE, 			new AssetEntry("FAVORITE",			"favorite",	"favorite",			"favorite", 		DAD_NONE,		FALSE,		TRUE));
-
-	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	"Link", 			DAD_LINK,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", "New Folder", 	DAD_LINK,		FALSE,		TRUE));
-	addEntry(LLAssetType::AT_MESH,              new AssetEntry("MESH",              "mesh",     "mesh",             "Meshes",           DAD_MESH,       FALSE,		TRUE));
-
-	for (S32 ensemble_num = S32(LLAssetType::AT_FOLDER_ENSEMBLE_START); 
-		 ensemble_num <= S32(LLAssetType::AT_FOLDER_ENSEMBLE_END); 
-		 ensemble_num++)
-	{
-		addEntry(LLAssetType::EType(ensemble_num), new AssetEntry("ENSEMBLE",		"ensemble", "ensemble", 		"New Folder", 		DAD_CATEGORY,	FALSE,		FALSE)); 
-	}
-
-	addEntry(LLAssetType::AT_CURRENT_OUTFIT, 	new AssetEntry("CURRENT",			"current",	"current outfit",	"Current Look", 	DAD_CATEGORY,	FALSE,		TRUE));
-	addEntry(LLAssetType::AT_OUTFIT, 			new AssetEntry("OUTFIT",			"outfit",	"outfit",			"New Look", 		DAD_CATEGORY,	FALSE,		FALSE));
-	addEntry(LLAssetType::AT_MY_OUTFITS, 		new AssetEntry("MY_OUTFITS",		"my_otfts",	"my outfits",		"My Looks", 		DAD_CATEGORY,	FALSE,		TRUE));
-		 
-	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		"New Folder", 		DAD_NONE,		FALSE,		FALSE));
+	//       												   DESCRIPTION			TYPE NAME	HUMAN NAME			CAN LINK?	
+	//      												  |--------------------|-----------|-------------------|-----------|
+	addEntry(LLAssetType::AT_TEXTURE, 			new AssetEntry("TEXTURE",			"texture",	"texture",			FALSE));
+	addEntry(LLAssetType::AT_SOUND, 			new AssetEntry("SOUND",				"sound",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_CALLINGCARD, 		new AssetEntry("CALLINGCARD",		"callcard",	"calling card",		FALSE));
+	addEntry(LLAssetType::AT_LANDMARK, 			new AssetEntry("LANDMARK",			"landmark",	"landmark",			FALSE));
+	addEntry(LLAssetType::AT_SCRIPT, 			new AssetEntry("SCRIPT",			"script",	"legacy script",	FALSE));
+	addEntry(LLAssetType::AT_CLOTHING, 			new AssetEntry("CLOTHING",			"clothing",	"clothing",			TRUE));
+	addEntry(LLAssetType::AT_OBJECT, 			new AssetEntry("OBJECT",			"object",	"object",			TRUE));
+	addEntry(LLAssetType::AT_NOTECARD, 			new AssetEntry("NOTECARD",			"notecard",	"note card",		FALSE));
+	addEntry(LLAssetType::AT_CATEGORY, 			new AssetEntry("CATEGORY",			"category",	"folder",			TRUE));
+	addEntry(LLAssetType::AT_LSL_TEXT, 			new AssetEntry("LSL_TEXT",			"lsltext",	"lsl2 script",		FALSE));
+	addEntry(LLAssetType::AT_LSL_BYTECODE, 		new AssetEntry("LSL_BYTECODE",		"lslbyte",	"lsl bytecode",		FALSE));
+	addEntry(LLAssetType::AT_TEXTURE_TGA, 		new AssetEntry("TEXTURE_TGA",		"txtr_tga",	"tga texture",		FALSE));
+	addEntry(LLAssetType::AT_BODYPART, 			new AssetEntry("BODYPART",			"bodypart",	"body part",		TRUE));
+	addEntry(LLAssetType::AT_SOUND_WAV, 		new AssetEntry("SOUND_WAV",			"snd_wav",	"sound",			FALSE));
+	addEntry(LLAssetType::AT_IMAGE_TGA, 		new AssetEntry("IMAGE_TGA",			"img_tga",	"targa image",		FALSE));
+	addEntry(LLAssetType::AT_IMAGE_JPEG, 		new AssetEntry("IMAGE_JPEG",		"jpeg",		"jpeg image",		FALSE));
+	addEntry(LLAssetType::AT_ANIMATION, 		new AssetEntry("ANIMATION",			"animatn",	"animation",		FALSE));
+	addEntry(LLAssetType::AT_GESTURE, 			new AssetEntry("GESTURE",			"gesture",	"gesture",			TRUE));
+	addEntry(LLAssetType::AT_SIMSTATE, 			new AssetEntry("SIMSTATE",			"simstate",	"simstate",			FALSE));
+
+	addEntry(LLAssetType::AT_LINK, 				new AssetEntry("LINK",				"link",		"symbolic link",	FALSE));
+	addEntry(LLAssetType::AT_LINK_FOLDER, 		new AssetEntry("FOLDER_LINK",		"link_f", 	"symbolic folder link", FALSE));
+
+	addEntry(LLAssetType::AT_MESH,              new AssetEntry("MESH",              "mesh",     "mesh",             FALSE));
+
+	addEntry(LLAssetType::AT_NONE, 				new AssetEntry("NONE",				"-1",		NULL,		  		FALSE));
 };
 
 // static
@@ -141,8 +117,7 @@ const std::string &LLAssetType::getDesc(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		static const std::string error_string = "BAD TYPE";
-		return error_string;
+		return badLookup();
 	}
 }
 
@@ -157,7 +132,7 @@ const char *LLAssetType::lookup(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return "-1";
+		return badLookup().c_str();
 	}
 }
 
@@ -167,6 +142,7 @@ LLAssetType::EType LLAssetType::lookup(const char* name)
 	return lookup(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookup(const std::string& type_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -194,7 +170,7 @@ const char *LLAssetType::lookupHumanReadable(LLAssetType::EType asset_type)
 	}
 	else
 	{
-		return NULL;
+		return badLookup().c_str();
 	}
 }
 
@@ -204,6 +180,7 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const char* name)
 	return lookupHumanReadable(ll_safe_string(name));
 }
 
+// static
 LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_name)
 {
 	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
@@ -220,32 +197,6 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_
 	return AT_NONE;
 }
 
-// static
-const char *LLAssetType::lookupCategoryName(LLAssetType::EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mCategoryName;
-	}
-	else
-	{
-		return "New Folder";
-	}
-}
-
-// static
-EDragAndDropType LLAssetType::lookupDragAndDropType(EType asset_type)
-{
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-		return entry->mDadType;
-	else
-		return DAD_NONE;
-}
-
 // static
 bool LLAssetType::lookupCanLink(EType asset_type)
 {
@@ -270,37 +221,9 @@ bool LLAssetType::lookupIsLinkType(EType asset_type)
 }
 
 // static
-// Only ensembles and plain folders aren't protected.  "Protected" means
-// you can't change certain properties such as their type.
-bool LLAssetType::lookupIsProtectedCategoryType(EType asset_type)
+const std::string &LLAssetType::badLookup()
 {
-	const LLAssetDictionary *dict = LLAssetDictionary::getInstance();
-	const AssetEntry *entry = dict->lookup(asset_type);
-	if (entry)
-	{
-		return entry->mIsProtected;
-	}
-	return true;
-}
+	static const std::string sBadLookup = "llassettype_bad_lookup";
+	return sBadLookup;
 
-// static
-bool LLAssetType::lookupIsEnsembleCategoryType(EType asset_type)
-{
-	return (asset_type >= AT_FOLDER_ENSEMBLE_START &&
-			asset_type <= AT_FOLDER_ENSEMBLE_END);
-}
-
-
-// static. Generate a good default description
-void LLAssetType::generateDescriptionFor(LLAssetType::EType asset_type,
-										 std::string& description)
-{
-	const S32 BUF_SIZE = 30;
-	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
-	time_t now;
-	time(&now);
-	memset(time_str, '\0', BUF_SIZE);
-	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
-	description.assign(time_str);
-	description.append(LLAssetType::lookupHumanReadable(asset_type));
 }
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 973b10ea6fe4c9cae8ed1c8a10c015eaf1704b1b..b3d04f3ae4e52394f5f92af4bc5411493ed8a8b8 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -94,18 +94,6 @@ class LL_COMMON_API LLAssetType
 		AT_BODYPART = 13,
 			// A collection of textures and parameters that can be worn by an avatar.
 
-		AT_TRASH = 14,
-			// Only to be used as a marker for a category preferred type. 
-			// Using this, we can throw things in the trash before completely deleting.
-
-		AT_SNAPSHOT_CATEGORY = 15,
-			// A marker for a folder meant for snapshots. 
-			// No actual assets will be snapshots, though if there were, you
-			// could interpret them as textures.
-
-		AT_LOST_AND_FOUND = 16,
-			// Used to stuff lost&found items into.
-
 		AT_SOUND_WAV = 17,
 			// Uncompressed sound.
 
@@ -126,28 +114,12 @@ class LL_COMMON_API LLAssetType
 		AT_SIMSTATE = 22,
 			// Simstate file.
 
-		AT_FAVORITE = 23,
-			// favorite items
-
 		AT_LINK = 24,
 			// Inventory symbolic link
 
 		AT_LINK_FOLDER = 25,
 			// Inventory folder link
 
-		AT_FOLDER_ENSEMBLE_START = 26,
-		AT_FOLDER_ENSEMBLE_END = 45,
-			// This range is reserved for special clothing folder types.
-
-		AT_CURRENT_OUTFIT = 46,
-			// Current outfit
-
-		AT_OUTFIT = 47,
-			// Predefined outfit ("look")
-
-		AT_MY_OUTFITS = 48,
-			// Folder that holds your outfits.
-			
 		AT_MESH = 49,
 		    // Mesh data in our proprietary SLM format
 
@@ -158,8 +130,9 @@ class LL_COMMON_API LLAssetType
 			// +*********************************************************+
 			// | 1. INSERT BEFORE AT_COUNT                               |
 			// | 2. INCREMENT AT_COUNT BY 1                              |
-			// | 3. ADD TO LLAssetDictionary in LLAssetType.cpp          |
-			// | 3. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
+			// | 3. ADD TO LLAssetType.cpp                               |
+			// | 4. ADD TO LLViewerAssetType.cpp                         |
+			// | 5. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp  |
 			// +*********************************************************+
 
 		AT_NONE = -1
@@ -175,33 +148,17 @@ class LL_COMMON_API LLAssetType
 	static EType 				lookupHumanReadable(const std::string& readable_name);
 	static const char*			lookupHumanReadable(EType asset_type);
 
-	// Generate a good default description. You may want to add a verb
-	// or agent name after this depending on your application.
-	static void 				generateDescriptionFor(LLAssetType::EType asset_type,
-													   std::string& description);
-
 	static EType 				getType(const std::string& desc_name);
 	static const std::string&	getDesc(EType asset_type);
-	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
 
 	static bool 				lookupCanLink(EType asset_type);
 	static bool 				lookupIsLinkType(EType asset_type);
 
-	static const char*  		lookupCategoryName(EType asset_type);
-	static bool 				lookupIsProtectedCategoryType(EType asset_type);
-	static bool 				lookupIsEnsembleCategoryType(EType asset_type);
-
-	/* TODO: Change return types from "const char *" to "const std::string &".
-	This is fairly straightforward, but requires changing some calls to use .c_str().
-	e.g.:
-	-	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	+	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType).c_str());
-	*/
-	
-private:
-	// don't instantiate or derive one of these objects
-	LLAssetType( void ) {}
-	~LLAssetType( void ) {}
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLAssetType() {}
+	~LLAssetType() {}
 };
 
 #endif // LL_LLASSETTYPE_H
diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h
index 6c5fa5af6d6884908d36fcbd64e0510a72de6a7d..141b0df43cfbc9581abe6f5d141f1f47423d1ce4 100644
--- a/indra/llcommon/llcoros.h
+++ b/indra/llcommon/llcoros.h
@@ -1,149 +1,149 @@
-/**
- * @file   llcoros.h
- * @author Nat Goodspeed
- * @date   2009-06-02
- * @brief  Manage running boost::coroutine instances
- * 
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * Copyright (c) 2009, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLCOROS_H)
-#define LL_LLCOROS_H
-
-#include <boost/coroutine/coroutine.hpp>
-#include "llsingleton.h"
-#include <boost/ptr_container/ptr_map.hpp>
-#include <string>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/iteration/local.hpp>
-#include <stdexcept>
-
-/**
- * Registry of named Boost.Coroutine instances
- *
- * The Boost.Coroutine library supports the general case of a coroutine
- * accepting arbitrary parameters and yielding multiple (sets of) results. For
- * such use cases, it's natural for the invoking code to retain the coroutine
- * instance: the consumer repeatedly calls into the coroutine, perhaps passing
- * new parameter values, prompting it to yield its next result.
- *
- * Our typical coroutine usage is different, though. For us, coroutines
- * provide an alternative to the @c Responder pattern. Our typical coroutine
- * has @c void return, invoked in fire-and-forget mode: the handler for some
- * user gesture launches the coroutine and promptly returns to the main loop.
- * The coroutine initiates some action that will take multiple frames (e.g. a
- * capability request), waits for its result, processes it and silently steals
- * away.
- *
- * This usage poses two (related) problems:
- *
- * # Who should own the coroutine instance? If it's simply local to the
- *   handler code that launches it, return from the handler will destroy the
- *   coroutine object, terminating the coroutine.
- * # Once the coroutine terminates, in whatever way, who's responsible for
- *   cleaning up the coroutine object?
- *
- * LLCoros is a Singleton collection of currently-active coroutine instances.
- * Each has a name. You ask LLCoros to launch a new coroutine with a suggested
- * name prefix; from your prefix it generates a distinct name, registers the
- * new coroutine and returns the actual name.
- *
- * The name can be used to kill off the coroutine prematurely, if needed. It
- * can also provide diagnostic info: we can look up the name of the
- * currently-running coroutine.
- *
- * Finally, the next frame ("mainloop" event) after the coroutine terminates,
- * LLCoros will notice its demise and destroy it.
- */
-class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
-{
-public:
-    /// Canonical boost::coroutines::coroutine signature we use
-    typedef boost::coroutines::coroutine<void()> coro;
-    /// Canonical 'self' type
-    typedef coro::self self;
-
-    /**
-     * Create and start running a new coroutine with specified name. The name
-     * string you pass is a suggestion; it will be tweaked for uniqueness. The
-     * actual name is returned to you.
-     *
-     * Usage looks like this, for (e.g.) two coroutine parameters:
-     * @code
-     * class MyClass
-     * {
-     * public:
-     *     ...
-     *     // Do NOT NOT NOT accept reference params other than 'self'!
-     *     // Pass by value only!
-     *     void myCoroutineMethod(LLCoros::self& self, std::string, LLSD);
-     *     ...
-     * };
-     * ...
-     * std::string name = LLCoros::instance().launch(
-     *    "mycoro", boost::bind(&MyClass::myCoroutineMethod, this, _1,
-     *                          "somestring", LLSD(17));
-     * @endcode
-     *
-     * Your function/method must accept LLCoros::self& as its first parameter.
-     * It can accept any other parameters you want -- but ONLY BY VALUE!
-     * Other reference parameters are a BAD IDEA! You Have Been Warned. See
-     * DEV-32777 comments for an explanation.
-     *
-     * Pass a callable that accepts the single LLCoros::self& parameter. It
-     * may work to pass a free function whose only parameter is 'self'; for
-     * all other cases use boost::bind(). Of course, for a non-static class
-     * method, the first parameter must be the class instance. Use the
-     * placeholder _1 for the 'self' parameter. Any other parameters should be
-     * passed via the bind() expression.
-     *
-     * launch() tweaks the suggested name so it won't collide with any
-     * existing coroutine instance, creates the coroutine instance, registers
-     * it with the tweaked name and runs it until its first wait. At that
-     * point it returns the tweaked name.
-     */
-    template <typename CALLABLE>
-    std::string launch(const std::string& prefix, const CALLABLE& callable)
-    {
-        return launchImpl(prefix, new coro(callable));
-    }
-
-    /**
-     * Abort a running coroutine by name. Normally, when a coroutine either
-     * runs to completion or terminates with an exception, LLCoros quietly
-     * cleans it up. This is for use only when you must explicitly interrupt
-     * one prematurely. Returns @c true if the specified name was found and
-     * still running at the time.
-     */
-    bool kill(const std::string& name);
-
-    /**
-     * From within a coroutine, pass its @c self object to look up the
-     * (tweaked) name string by which this coroutine is registered. Returns
-     * the empty string if not found (e.g. if the coroutine was launched by
-     * hand rather than using LLCoros::launch()).
-     */
-    template <typename COROUTINE_SELF>
-    std::string getName(const COROUTINE_SELF& self) const
-    {
-        return getNameByID(self.get_id());
-    }
-
-    /// getName() by self.get_id()
-    std::string getNameByID(const void* self_id) const;
-
-private:
-    friend class LLSingleton<LLCoros>;
-    LLCoros();
-    std::string launchImpl(const std::string& prefix, coro* newCoro);
-    std::string generateDistinctName(const std::string& prefix) const;
-    bool cleanup(const LLSD&);
-
-    typedef boost::ptr_map<std::string, coro> CoroMap;
-    CoroMap mCoros;
-};
-
-#endif /* ! defined(LL_LLCOROS_H) */
+/**
+ * @file   llcoros.h
+ * @author Nat Goodspeed
+ * @date   2009-06-02
+ * @brief  Manage running boost::coroutine instances
+ * 
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLCOROS_H)
+#define LL_LLCOROS_H
+
+#include <boost/coroutine/coroutine.hpp>
+#include "llsingleton.h"
+#include <boost/ptr_container/ptr_map.hpp>
+#include <string>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <stdexcept>
+
+/**
+ * Registry of named Boost.Coroutine instances
+ *
+ * The Boost.Coroutine library supports the general case of a coroutine
+ * accepting arbitrary parameters and yielding multiple (sets of) results. For
+ * such use cases, it's natural for the invoking code to retain the coroutine
+ * instance: the consumer repeatedly calls into the coroutine, perhaps passing
+ * new parameter values, prompting it to yield its next result.
+ *
+ * Our typical coroutine usage is different, though. For us, coroutines
+ * provide an alternative to the @c Responder pattern. Our typical coroutine
+ * has @c void return, invoked in fire-and-forget mode: the handler for some
+ * user gesture launches the coroutine and promptly returns to the main loop.
+ * The coroutine initiates some action that will take multiple frames (e.g. a
+ * capability request), waits for its result, processes it and silently steals
+ * away.
+ *
+ * This usage poses two (related) problems:
+ *
+ * # Who should own the coroutine instance? If it's simply local to the
+ *   handler code that launches it, return from the handler will destroy the
+ *   coroutine object, terminating the coroutine.
+ * # Once the coroutine terminates, in whatever way, who's responsible for
+ *   cleaning up the coroutine object?
+ *
+ * LLCoros is a Singleton collection of currently-active coroutine instances.
+ * Each has a name. You ask LLCoros to launch a new coroutine with a suggested
+ * name prefix; from your prefix it generates a distinct name, registers the
+ * new coroutine and returns the actual name.
+ *
+ * The name can be used to kill off the coroutine prematurely, if needed. It
+ * can also provide diagnostic info: we can look up the name of the
+ * currently-running coroutine.
+ *
+ * Finally, the next frame ("mainloop" event) after the coroutine terminates,
+ * LLCoros will notice its demise and destroy it.
+ */
+class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
+{
+public:
+    /// Canonical boost::coroutines::coroutine signature we use
+    typedef boost::coroutines::coroutine<void()> coro;
+    /// Canonical 'self' type
+    typedef coro::self self;
+
+    /**
+     * Create and start running a new coroutine with specified name. The name
+     * string you pass is a suggestion; it will be tweaked for uniqueness. The
+     * actual name is returned to you.
+     *
+     * Usage looks like this, for (e.g.) two coroutine parameters:
+     * @code
+     * class MyClass
+     * {
+     * public:
+     *     ...
+     *     // Do NOT NOT NOT accept reference params other than 'self'!
+     *     // Pass by value only!
+     *     void myCoroutineMethod(LLCoros::self& self, std::string, LLSD);
+     *     ...
+     * };
+     * ...
+     * std::string name = LLCoros::instance().launch(
+     *    "mycoro", boost::bind(&MyClass::myCoroutineMethod, this, _1,
+     *                          "somestring", LLSD(17));
+     * @endcode
+     *
+     * Your function/method must accept LLCoros::self& as its first parameter.
+     * It can accept any other parameters you want -- but ONLY BY VALUE!
+     * Other reference parameters are a BAD IDEA! You Have Been Warned. See
+     * DEV-32777 comments for an explanation.
+     *
+     * Pass a callable that accepts the single LLCoros::self& parameter. It
+     * may work to pass a free function whose only parameter is 'self'; for
+     * all other cases use boost::bind(). Of course, for a non-static class
+     * method, the first parameter must be the class instance. Use the
+     * placeholder _1 for the 'self' parameter. Any other parameters should be
+     * passed via the bind() expression.
+     *
+     * launch() tweaks the suggested name so it won't collide with any
+     * existing coroutine instance, creates the coroutine instance, registers
+     * it with the tweaked name and runs it until its first wait. At that
+     * point it returns the tweaked name.
+     */
+    template <typename CALLABLE>
+    std::string launch(const std::string& prefix, const CALLABLE& callable)
+    {
+        return launchImpl(prefix, new coro(callable));
+    }
+
+    /**
+     * Abort a running coroutine by name. Normally, when a coroutine either
+     * runs to completion or terminates with an exception, LLCoros quietly
+     * cleans it up. This is for use only when you must explicitly interrupt
+     * one prematurely. Returns @c true if the specified name was found and
+     * still running at the time.
+     */
+    bool kill(const std::string& name);
+
+    /**
+     * From within a coroutine, pass its @c self object to look up the
+     * (tweaked) name string by which this coroutine is registered. Returns
+     * the empty string if not found (e.g. if the coroutine was launched by
+     * hand rather than using LLCoros::launch()).
+     */
+    template <typename COROUTINE_SELF>
+    std::string getName(const COROUTINE_SELF& self) const
+    {
+        return getNameByID(self.get_id());
+    }
+
+    /// getName() by self.get_id()
+    std::string getNameByID(const void* self_id) const;
+
+private:
+    friend class LLSingleton<LLCoros>;
+    LLCoros();
+    std::string launchImpl(const std::string& prefix, coro* newCoro);
+    std::string generateDistinctName(const std::string& prefix) const;
+    bool cleanup(const LLSD&);
+
+    typedef boost::ptr_map<std::string, coro> CoroMap;
+    CoroMap mCoros;
+};
+
+#endif /* ! defined(LL_LLCOROS_H) */
diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
index 671f2a4d1cf19944a659d9d3e21704db4485db63..5a86b90bff1924a5357b843f3dab622df4262a39 100644
--- a/indra/llcommon/lleventdispatcher.h
+++ b/indra/llcommon/lleventdispatcher.h
@@ -1,130 +1,130 @@
-/**
- * @file   lleventdispatcher.h
- * @author Nat Goodspeed
- * @date   2009-06-18
- * @brief  Central mechanism for dispatching events by string name. This is
- *         useful when you have a single LLEventPump listener on which you can
- *         request different operations, vs. instantiating a different
- *         LLEventPump for each such operation.
- * 
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * Copyright (c) 2009, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLEVENTDISPATCHER_H)
-#define LL_LLEVENTDISPATCHER_H
-
-#include <string>
-#include <map>
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
-#include <typeinfo>
-#include "llevents.h"
-
-class LLSD;
-
-/**
- * Given an LLSD map, examine a string-valued key and call a corresponding
- * callable. This class is designed to be contained by an LLEventPump
- * listener class that will register some of its own methods, though any
- * callable can be used.
- */
-class LL_COMMON_API LLEventDispatcher
-{
-public:
-    LLEventDispatcher(const std::string& desc, const std::string& key);
-    virtual ~LLEventDispatcher();
-
-    /// Accept any C++ callable, typically a boost::bind() expression
-    typedef boost::function<void(const LLSD&)> Callable;
-
-    /**
-     * Register a @a callable by @a name. The optional @a required parameter
-     * is used to validate the structure of each incoming event (see
-     * llsd_matches()).
-     */
-    void add(const std::string& name, const Callable& callable, const LLSD& required=LLSD());
-
-    /**
-     * Special case: a subclass of this class can pass an unbound member
-     * function pointer without explicitly specifying the
-     * <tt>boost::bind()</tt> expression.
-     */
-    template <class CLASS>
-    void add(const std::string& name, void (CLASS::*method)(const LLSD&),
-             const LLSD& required=LLSD())
-    {
-        addMethod<CLASS>(name, method, required);
-    }
-
-    /// Overload for both const and non-const methods
-    template <class CLASS>
-    void add(const std::string& name, void (CLASS::*method)(const LLSD&) const,
-             const LLSD& required=LLSD())
-    {
-        addMethod<CLASS>(name, method, required);
-    }
-
-    /// Unregister a callable
-    bool remove(const std::string& name);
-
-    /// Call a registered callable with an explicitly-specified name. If no
-    /// such callable exists, die with LL_ERRS. If the @a event fails to match
-    /// the @a required prototype specified at add() time, die with LL_ERRS.
-    void operator()(const std::string& name, const LLSD& event) const;
-
-    /// Extract the @a key value from the incoming @a event, and call the
-    /// callable whose name is specified by that map @a key. If no such
-    /// callable exists, die with LL_ERRS. If the @a event fails to match the
-    /// @a required prototype specified at add() time, die with LL_ERRS.
-    void operator()(const LLSD& event) const;
-
-    /// Fetch the Callable for the specified name. If no such name was
-    /// registered, return an empty() Callable.
-    Callable get(const std::string& name) const;
-
-private:
-    template <class CLASS, typename METHOD>
-    void addMethod(const std::string& name, const METHOD& method, const LLSD& required)
-    {
-        CLASS* downcast = dynamic_cast<CLASS*>(this);
-        if (! downcast)
-        {
-            addFail(name, typeid(CLASS).name());
-        }
-        else
-        {
-            add(name, boost::bind(method, downcast, _1), required);
-        }
-    }
-    void addFail(const std::string& name, const std::string& classname) const;
-    /// try to dispatch, return @c true if success
-    bool attemptCall(const std::string& name, const LLSD& event) const;
-
-    std::string mDesc, mKey;
-    typedef std::map<std::string, std::pair<Callable, LLSD> > DispatchMap;
-    DispatchMap mDispatch;
-};
-
-/**
- * Bundle an LLEventPump and a listener with an LLEventDispatcher. A class
- * that contains (or derives from) LLDispatchListener need only specify the
- * LLEventPump name and dispatch key, and add() its methods. Incoming events
- * will automatically be dispatched.
- */
-class LL_COMMON_API LLDispatchListener: public LLEventDispatcher
-{
-public:
-    LLDispatchListener(const std::string& pumpname, const std::string& key);
-
-    std::string getPumpName() const { return mPump.getName(); }
-
-private:
-    bool process(const LLSD& event);
-
-    LLEventStream mPump;
-    LLTempBoundListener mBoundListener;
-};
-
-#endif /* ! defined(LL_LLEVENTDISPATCHER_H) */
+/**
+ * @file   lleventdispatcher.h
+ * @author Nat Goodspeed
+ * @date   2009-06-18
+ * @brief  Central mechanism for dispatching events by string name. This is
+ *         useful when you have a single LLEventPump listener on which you can
+ *         request different operations, vs. instantiating a different
+ *         LLEventPump for each such operation.
+ * 
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLEVENTDISPATCHER_H)
+#define LL_LLEVENTDISPATCHER_H
+
+#include <string>
+#include <map>
+#include <boost/function.hpp>
+#include <boost/bind.hpp>
+#include <typeinfo>
+#include "llevents.h"
+
+class LLSD;
+
+/**
+ * Given an LLSD map, examine a string-valued key and call a corresponding
+ * callable. This class is designed to be contained by an LLEventPump
+ * listener class that will register some of its own methods, though any
+ * callable can be used.
+ */
+class LL_COMMON_API LLEventDispatcher
+{
+public:
+    LLEventDispatcher(const std::string& desc, const std::string& key);
+    virtual ~LLEventDispatcher();
+
+    /// Accept any C++ callable, typically a boost::bind() expression
+    typedef boost::function<void(const LLSD&)> Callable;
+
+    /**
+     * Register a @a callable by @a name. The optional @a required parameter
+     * is used to validate the structure of each incoming event (see
+     * llsd_matches()).
+     */
+    void add(const std::string& name, const Callable& callable, const LLSD& required=LLSD());
+
+    /**
+     * Special case: a subclass of this class can pass an unbound member
+     * function pointer without explicitly specifying the
+     * <tt>boost::bind()</tt> expression.
+     */
+    template <class CLASS>
+    void add(const std::string& name, void (CLASS::*method)(const LLSD&),
+             const LLSD& required=LLSD())
+    {
+        addMethod<CLASS>(name, method, required);
+    }
+
+    /// Overload for both const and non-const methods
+    template <class CLASS>
+    void add(const std::string& name, void (CLASS::*method)(const LLSD&) const,
+             const LLSD& required=LLSD())
+    {
+        addMethod<CLASS>(name, method, required);
+    }
+
+    /// Unregister a callable
+    bool remove(const std::string& name);
+
+    /// Call a registered callable with an explicitly-specified name. If no
+    /// such callable exists, die with LL_ERRS. If the @a event fails to match
+    /// the @a required prototype specified at add() time, die with LL_ERRS.
+    void operator()(const std::string& name, const LLSD& event) const;
+
+    /// Extract the @a key value from the incoming @a event, and call the
+    /// callable whose name is specified by that map @a key. If no such
+    /// callable exists, die with LL_ERRS. If the @a event fails to match the
+    /// @a required prototype specified at add() time, die with LL_ERRS.
+    void operator()(const LLSD& event) const;
+
+    /// Fetch the Callable for the specified name. If no such name was
+    /// registered, return an empty() Callable.
+    Callable get(const std::string& name) const;
+
+private:
+    template <class CLASS, typename METHOD>
+    void addMethod(const std::string& name, const METHOD& method, const LLSD& required)
+    {
+        CLASS* downcast = dynamic_cast<CLASS*>(this);
+        if (! downcast)
+        {
+            addFail(name, typeid(CLASS).name());
+        }
+        else
+        {
+            add(name, boost::bind(method, downcast, _1), required);
+        }
+    }
+    void addFail(const std::string& name, const std::string& classname) const;
+    /// try to dispatch, return @c true if success
+    bool attemptCall(const std::string& name, const LLSD& event) const;
+
+    std::string mDesc, mKey;
+    typedef std::map<std::string, std::pair<Callable, LLSD> > DispatchMap;
+    DispatchMap mDispatch;
+};
+
+/**
+ * Bundle an LLEventPump and a listener with an LLEventDispatcher. A class
+ * that contains (or derives from) LLDispatchListener need only specify the
+ * LLEventPump name and dispatch key, and add() its methods. Incoming events
+ * will automatically be dispatched.
+ */
+class LL_COMMON_API LLDispatchListener: public LLEventDispatcher
+{
+public:
+    LLDispatchListener(const std::string& pumpname, const std::string& key);
+
+    std::string getPumpName() const { return mPump.getName(); }
+
+private:
+    bool process(const LLSD& event);
+
+    LLEventStream mPump;
+    LLTempBoundListener mBoundListener;
+};
+
+#endif /* ! defined(LL_LLEVENTDISPATCHER_H) */
diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h
index 64e5cb5da7f290134b89f988e806f71dcd16f0b0..192d79b27ddb2658c4fda32c1fdc1d83d8502588 100644
--- a/indra/llcommon/llevents.h
+++ b/indra/llcommon/llevents.h
@@ -1,943 +1,943 @@
-/**
- * @file   llevents.h
- * @author Kent Quirk, Nat Goodspeed
- * @date   2008-09-11
- * @brief  This is an implementation of the event system described at
- *         https://wiki.lindenlab.com/wiki/Viewer:Messaging/Event_System,
- *         originally introduced in llnotifications.h. It has nothing
- *         whatsoever to do with the older system in llevent.h.
- * 
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- * Copyright (c) 2008, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLEVENTS_H)
-#define LL_LLEVENTS_H
-
-#include <string>
-#include <map>
-#include <set>
-#include <vector>
-#include <deque>
-#include <stdexcept>
-#if LL_WINDOWS
-	#pragma warning (push)
-	#pragma warning (disable : 4263) // boost::signals2::expired_slot::what() has const mismatch
-	#pragma warning (disable : 4264) 
-#endif
-#include <boost/signals2.hpp>
-#if LL_WINDOWS
-	#pragma warning (pop)
-#endif
-
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/utility.hpp>        // noncopyable
-#include <boost/optional/optional.hpp>
-#include <boost/visit_each.hpp>
-#include <boost/ref.hpp>            // reference_wrapper
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/function.hpp>
-#include <boost/static_assert.hpp>
-#include "llsd.h"
-#include "llsingleton.h"
-#include "lldependencies.h"
-
-// override this to allow binding free functions with more parameters
-#ifndef LLEVENTS_LISTENER_ARITY
-#define LLEVENTS_LISTENER_ARITY 10
-#endif
-
-// hack for testing
-#ifndef testable
-#define testable private
-#endif
-
-/*****************************************************************************
-*   Signal and handler declarations
-*   Using a single handler signature means that we can have a common handler
-*   type, rather than needing a distinct one for each different handler.
-*****************************************************************************/
-
-/**
- * A boost::signals Combiner that stops the first time a handler returns true
- * We need this because we want to have our handlers return bool, so that
- * we have the option to cause a handler to stop further processing. The
- * default handler fails when the signal returns a value but has no slots.
- */
-struct LLStopWhenHandled
-{
-    typedef bool result_type;
-
-    template<typename InputIterator>
-    result_type operator()(InputIterator first, InputIterator last) const
-    {
-        for (InputIterator si = first; si != last; ++si)
-		{
-            if (*si)
-			{
-                return true;
-			}
-		}
-        return false;
-    }
-};
-
-/**
- * We want to have a standard signature for all signals; this way,
- * we can easily document a protocol for communicating across
- * dlls and into scripting languages someday.
- *
- * We want to return a bool to indicate whether the signal has been
- * handled and should NOT be passed on to other listeners.
- * Return true to stop further handling of the signal, and false
- * to continue.
- *
- * We take an LLSD because this way the contents of the signal
- * are independent of the API used to communicate it.
- * It is const ref because then there's low cost to pass it;
- * if you only need to inspect it, it's very cheap.
- *
- * @internal
- * The @c float template parameter indicates that we will internally use @c
- * float to indicate relative listener order on a given LLStandardSignal.
- * Don't worry, the @c float values are strictly internal! They are not part
- * of the interface, for the excellent reason that requiring the caller to
- * specify a numeric key to establish order means that the caller must know
- * the universe of possible values. We use LLDependencies for that instead.
- */
-typedef boost::signals2::signal<bool(const LLSD&), LLStopWhenHandled, float>  LLStandardSignal;
-/// Methods that forward listeners (e.g. constructed with
-/// <tt>boost::bind()</tt>) should accept (const LLEventListener&)
-typedef LLStandardSignal::slot_type LLEventListener;
-/// Result of registering a listener, supports <tt>connected()</tt>,
-/// <tt>disconnect()</tt> and <tt>blocked()</tt>
-typedef boost::signals2::connection LLBoundListener;
-/// Storing an LLBoundListener in LLTempBoundListener will disconnect the
-/// referenced listener when the LLTempBoundListener instance is destroyed.
-typedef boost::signals2::scoped_connection LLTempBoundListener;
-
-/**
- * A common idiom for event-based code is to accept either a callable --
- * directly called on completion -- or the string name of an LLEventPump on
- * which to post the completion event. Specifying a parameter as <tt>const
- * LLListenerOrPumpName&</tt> allows either.
- *
- * Calling a validly-constructed LLListenerOrPumpName, passing the LLSD
- * 'event' object, either calls the callable or posts the event to the named
- * LLEventPump.
- *
- * A default-constructed LLListenerOrPumpName is 'empty'. (This is useful as
- * the default value of an optional method parameter.) Calling it throws
- * LLListenerOrPumpName::Empty. Test for this condition beforehand using
- * either <tt>if (param)</tt> or <tt>if (! param)</tt>.
- */
-class LL_COMMON_API LLListenerOrPumpName
-{
-public:
-    /// passing string name of LLEventPump
-    LLListenerOrPumpName(const std::string& pumpname);
-    /// passing string literal (overload so compiler isn't forced to infer
-    /// double conversion)
-    LLListenerOrPumpName(const char* pumpname);
-    /// passing listener -- the "anything else" catch-all case. The type of an
-    /// object constructed by boost::bind() isn't intended to be written out.
-    /// Normally we'd just accept 'const LLEventListener&', but that would
-    /// require double implicit conversion: boost::bind() object to
-    /// LLEventListener, LLEventListener to LLListenerOrPumpName. So use a
-    /// template to forward anything.
-    template<typename T>
-    LLListenerOrPumpName(const T& listener): mListener(listener) {}
-
-    /// for omitted method parameter: uninitialized mListener
-    LLListenerOrPumpName() {}
-
-    /// test for validity
-    operator bool() const { return bool(mListener); }
-    bool operator! () const { return ! mListener; }
-
-    /// explicit accessor
-    const LLEventListener& getListener() const { return *mListener; }
-
-    /// implicit conversion to LLEventListener
-    operator LLEventListener() const { return *mListener; }
-
-    /// allow calling directly
-    bool operator()(const LLSD& event) const;
-
-    /// exception if you try to call when empty
-    struct Empty: public std::runtime_error
-    {
-        Empty(const std::string& what):
-            std::runtime_error(std::string("LLListenerOrPumpName::Empty: ") + what) {}
-    };
-
-private:
-    boost::optional<LLEventListener> mListener;
-};
-
-/*****************************************************************************
-*   LLEventPumps
-*****************************************************************************/
-class LLEventPump;
-
-/**
- * LLEventPumps is a Singleton manager through which one typically accesses
- * this subsystem.
- */
-class LL_COMMON_API LLEventPumps: public LLSingleton<LLEventPumps>
-{
-    friend class LLSingleton<LLEventPumps>;
-public:
-    /**
-     * Find or create an LLEventPump instance with a specific name. We return
-     * a reference so there's no question about ownership. obtain() @em finds
-     * an instance without conferring @em ownership.
-     */
-    LLEventPump& obtain(const std::string& name);
-    /**
-     * Flush all known LLEventPump instances
-     */
-    void flush();
-
-    /**
-     * Reset all known LLEventPump instances
-     * workaround for DEV-35406 crash on shutdown
-     */
-    void reset();
-
-private:
-    friend class LLEventPump;
-    /**
-     * Register a new LLEventPump instance (internal)
-     */
-    std::string registerNew(const LLEventPump&, const std::string& name, bool tweak);
-    /**
-     * Unregister a doomed LLEventPump instance (internal)
-     */
-    void unregister(const LLEventPump&);
-
-private:
-    LLEventPumps();
-    ~LLEventPumps();
-
-testable:
-    // Map of all known LLEventPump instances, whether or not we instantiated
-    // them. We store a plain old LLEventPump* because this map doesn't claim
-    // ownership of the instances. Though the common usage pattern is to
-    // request an instance using obtain(), it's fair to instantiate an
-    // LLEventPump subclass statically, as a class member, on the stack or on
-    // the heap. In such cases, the instantiating party is responsible for its
-    // lifespan.
-    typedef std::map<std::string, LLEventPump*> PumpMap;
-    PumpMap mPumpMap;
-    // Set of all LLEventPumps we instantiated. Membership in this set means
-    // we claim ownership, and will delete them when this LLEventPumps is
-    // destroyed.
-    typedef std::set<LLEventPump*> PumpSet;
-    PumpSet mOurPumps;
-    // LLEventPump names that should be instantiated as LLEventQueue rather
-    // than as LLEventStream
-    typedef std::set<std::string> PumpNames;
-    PumpNames mQueueNames;
-};
-
-/*****************************************************************************
-*   details
-*****************************************************************************/
-namespace LLEventDetail
-{
-    /// Any callable capable of connecting an LLEventListener to an
-    /// LLStandardSignal to produce an LLBoundListener can be mapped to this
-    /// signature.
-    typedef boost::function<LLBoundListener(const LLEventListener&)> ConnectFunc;
-
-    /**
-     * Utility template function to use Visitor appropriately
-     *
-     * @param listener Callable to connect, typically a boost::bind()
-     * expression. This will be visited by Visitor using boost::visit_each().
-     * @param connect_func Callable that will connect() @a listener to an
-     * LLStandardSignal, returning LLBoundListener.
-     */
-    template <typename LISTENER>
-    LLBoundListener visit_and_connect(const LISTENER& listener,
-                                      const ConnectFunc& connect_func);
-} // namespace LLEventDetail
-
-/*****************************************************************************
-*   LLEventTrackable
-*****************************************************************************/
-/**
- * LLEventTrackable wraps boost::signals2::trackable, which resembles
- * boost::trackable. Derive your listener class from LLEventTrackable instead,
- * and use something like
- * <tt>LLEventPump::listen(boost::bind(&YourTrackableSubclass::method,
- * instance, _1))</tt>. This will implicitly disconnect when the object
- * referenced by @c instance is destroyed.
- *
- * @note
- * LLEventTrackable doesn't address a couple of cases:
- * * Object destroyed during call
- *   - You enter a slot call in thread A.
- *   - Thread B destroys the object, which of course disconnects it from any
- *     future slot calls.
- *   - Thread A's call uses 'this', which now refers to a defunct object.
- *     Undefined behavior results.
- * * Call during destruction
- *   - @c MySubclass is derived from LLEventTrackable.
- *   - @c MySubclass registers one of its own methods using
- *     <tt>LLEventPump::listen()</tt>.
- *   - The @c MySubclass object begins destruction. <tt>~MySubclass()</tt>
- *     runs, destroying state specific to the subclass. (For instance, a
- *     <tt>Foo*</tt> data member is <tt>delete</tt>d but not zeroed.)
- *   - The listening method will not be disconnected until
- *     <tt>~LLEventTrackable()</tt> runs.
- *   - Before we get there, another thread posts data to the @c LLEventPump
- *     instance, calling the @c MySubclass method.
- *   - The method in question relies on valid @c MySubclass state. (For
- *     instance, it attempts to dereference the <tt>Foo*</tt> pointer that was
- *     <tt>delete</tt>d but not zeroed.)
- *   - Undefined behavior results.
- * If you suspect you may encounter any such scenario, you're better off
- * managing the lifespan of your object with <tt>boost::shared_ptr</tt>.
- * Passing <tt>LLEventPump::listen()</tt> a <tt>boost::bind()</tt> expression
- * involving a <tt>boost::weak_ptr<Foo></tt> is recognized specially, engaging
- * thread-safe Boost.Signals2 machinery.
- */
-typedef boost::signals2::trackable LLEventTrackable;
-
-/*****************************************************************************
-*   LLEventPump
-*****************************************************************************/
-/**
- * LLEventPump is the base class interface through which we access the
- * concrete subclasses LLEventStream and LLEventQueue.
- *
- * @NOTE
- * LLEventPump derives from LLEventTrackable so that when you "chain"
- * LLEventPump instances together, they will automatically disconnect on
- * destruction. Please see LLEventTrackable documentation for situations in
- * which this may be perilous across threads.
- */
-class LL_COMMON_API LLEventPump: public LLEventTrackable
-{
-public:
-    /**
-     * Exception thrown by LLEventPump(). You are trying to instantiate an
-     * LLEventPump (subclass) using the same name as some other instance, and
-     * you didn't pass <tt>tweak=true</tt> to permit it to generate a unique
-     * variant.
-     */
-    struct DupPumpName: public std::runtime_error
-    {
-        DupPumpName(const std::string& what):
-            std::runtime_error(std::string("DupPumpName: ") + what) {}
-    };
-
-    /**
-     * Instantiate an LLEventPump (subclass) with the string name by which it
-     * can be found using LLEventPumps::obtain().
-     *
-     * If you pass (or default) @a tweak to @c false, then a duplicate name
-     * will throw DupPumpName. This won't happen if LLEventPumps::obtain()
-     * instantiates the LLEventPump, because obtain() uses find-or-create
-     * logic. It can only happen if you instantiate an LLEventPump in your own
-     * code -- and a collision with the name of some other LLEventPump is
-     * likely to cause much more subtle problems!
-     *
-     * When you hand-instantiate an LLEventPump, consider passing @a tweak as
-     * @c true. This directs LLEventPump() to append a suffix to the passed @a
-     * name to make it unique. You can retrieve the adjusted name by calling
-     * getName() on your new instance.
-     */
-    LLEventPump(const std::string& name, bool tweak=false);
-    virtual ~LLEventPump();
-
-    /// group exceptions thrown by listen(). We use exceptions because these
-    /// particular errors are likely to be coding errors, found and fixed by
-    /// the developer even before preliminary checkin.
-    struct ListenError: public std::runtime_error
-    {
-        ListenError(const std::string& what): std::runtime_error(what) {}
-    };
-    /**
-     * exception thrown by listen(). You are attempting to register a
-     * listener on this LLEventPump using the same listener name as an
-     * already-registered listener.
-     */
-    struct DupListenerName: public ListenError
-    {
-        DupListenerName(const std::string& what):
-            ListenError(std::string("DupListenerName: ") + what)
-        {}
-    };
-    /**
-     * exception thrown by listen(). The order dependencies specified for your
-     * listener are incompatible with existing listeners.
-     *
-     * Consider listener "a" which specifies before "b" and "b" which
-     * specifies before "c". You are now attempting to register "c" before
-     * "a". There is no order that can satisfy all constraints.
-     */
-    struct Cycle: public ListenError
-    {
-        Cycle(const std::string& what): ListenError(std::string("Cycle: ") + what) {}
-    };
-    /**
-     * exception thrown by listen(). This one means that your new listener
-     * would force a change to the order of previously-registered listeners,
-     * and we don't have a good way to implement that.
-     *
-     * Consider listeners "some", "other" and "third". "some" and "other" are
-     * registered earlier without specifying relative order, so "other"
-     * happens to be first. Now you attempt to register "third" after "some"
-     * and before "other". Whoops, that would require swapping "some" and
-     * "other", which we can't do. Instead we throw this exception.
-     *
-     * It may not be possible to change the registration order so we already
-     * know "third"s order requirement by the time we register the second of
-     * "some" and "other". A solution would be to specify that "some" must
-     * come before "other", or equivalently that "other" must come after
-     * "some".
-     */
-    struct OrderChange: public ListenError
-    {
-        OrderChange(const std::string& what): ListenError(std::string("OrderChange: ") + what) {}
-    };
-
-    /// used by listen()
-    typedef std::vector<std::string> NameList;
-    /// convenience placeholder for when you explicitly want to pass an empty
-    /// NameList
-    const static NameList empty;
-
-    /// Get this LLEventPump's name
-    std::string getName() const { return mName; }
-
-    /**
-     * Register a new listener with a unique name. Specify an optional list
-     * of other listener names after which this one must be called, likewise
-     * an optional list of other listener names before which this one must be
-     * called. The other listeners mentioned need not yet be registered
-     * themselves. listen() can throw any ListenError; see ListenError
-     * subclasses.
-     *
-     * The listener name must be unique among active listeners for this
-     * LLEventPump, else you get DupListenerName. If you don't care to invent
-     * a name yourself, use inventName(). (I was tempted to recognize e.g. ""
-     * and internally generate a distinct name for that case. But that would
-     * handle badly the scenario in which you want to add, remove, re-add,
-     * etc. the same listener: each new listen() call would necessarily
-     * perform a new dependency sort. Assuming you specify the same
-     * after/before lists each time, using inventName() when you first
-     * instantiate your listener, then passing the same name on each listen()
-     * call, allows us to optimize away the second and subsequent dependency
-     * sorts.
-     *
-     * If (as is typical) you pass a <tt>boost::bind()</tt> expression as @a
-     * listener, listen() will inspect the components of that expression. If a
-     * bound object matches any of several cases, the connection will
-     * automatically be disconnected when that object is destroyed.
-     *
-     * * You bind a <tt>boost::weak_ptr</tt>.
-     * * Binding a <tt>boost::shared_ptr</tt> that way would ensure that the
-     *   referenced object would @em never be destroyed, since the @c
-     *   shared_ptr stored in the LLEventPump would remain an outstanding
-     *   reference. Use the weaken() function to convert your @c shared_ptr to
-     *   @c weak_ptr. Because this is easy to forget, binding a @c shared_ptr
-     *   will produce a compile error (@c BOOST_STATIC_ASSERT failure).
-     * * You bind a simple pointer or reference to an object derived from
-     *   <tt>boost::enable_shared_from_this</tt>. (UNDER CONSTRUCTION)
-     * * You bind a simple pointer or reference to an object derived from
-     *   LLEventTrackable. Unlike the cases described above, though, this is
-     *   vulnerable to a couple of cross-thread race conditions, as described
-     *   in the LLEventTrackable documentation.
-     */
-    template <typename LISTENER>
-    LLBoundListener listen(const std::string& name, const LISTENER& listener,
-                           const NameList& after=NameList(),
-                           const NameList& before=NameList())
-    {
-        // Examine listener, using our listen_impl() method to make the
-        // actual connection.
-        // This is why listen() is a template. Conversion from boost::bind()
-        // to LLEventListener performs type erasure, so it's important to look
-        // at the boost::bind object itself before that happens.
-        return LLEventDetail::visit_and_connect(listener,
-                                                boost::bind(&LLEventPump::listen_impl,
-                                                            this,
-                                                            name,
-                                                            _1,
-                                                            after,
-                                                            before));
-    }
-
-    /// Get the LLBoundListener associated with the passed name (dummy
-    /// LLBoundListener if not found)
-    virtual LLBoundListener getListener(const std::string& name) const;
-    /**
-     * Instantiate one of these to block an existing connection:
-     * @code
-     * { // in some local scope
-     *     LLEventPump::Blocker block(someLLBoundListener);
-     *     // code that needs the connection blocked
-     * } // unblock the connection again
-     * @endcode
-     */
-    typedef boost::signals2::shared_connection_block Blocker;
-    /// Unregister a listener by name. Prefer this to
-    /// <tt>getListener(name).disconnect()</tt> because stopListening() also
-    /// forgets this name.
-    virtual void stopListening(const std::string& name);
-    /// Post an event to all listeners. The @c bool return is only meaningful
-    /// if the underlying leaf class is LLEventStream -- beware of relying on
-    /// it too much! Truthfully, we return @c bool mostly to permit chaining
-    /// one LLEventPump as a listener on another.
-    virtual bool post(const LLSD&) = 0;
-    /// Enable/disable: while disabled, silently ignore all post() calls
-    virtual void enable(bool enabled=true) { mEnabled = enabled; }
-    /// query
-    virtual bool enabled() const { return mEnabled; }
-
-    /// Generate a distinct name for a listener -- see listen()
-    static std::string inventName(const std::string& pfx="listener");
-
-private:
-    friend class LLEventPumps;
-    /// flush queued events
-    virtual void flush() {}
-
-    virtual void reset();
-
-private:
-    virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
-                                        const NameList& after,
-                                        const NameList& before);
-    std::string mName;
-
-protected:
-    /// implement the dispatching
-    boost::scoped_ptr<LLStandardSignal> mSignal;
-
-    /// valve open?
-    bool mEnabled;
-    /// Map of named listeners. This tracks the listeners that actually exist
-    /// at this moment. When we stopListening(), we discard the entry from
-    /// this map.
-    typedef std::map<std::string, boost::signals2::connection> ConnectionMap;
-    ConnectionMap mConnections;
-    typedef LLDependencies<std::string, float> DependencyMap;
-    /// Dependencies between listeners. For each listener, track the float
-    /// used to establish its place in mSignal's order. This caches all the
-    /// listeners that have ever registered; stopListening() does not discard
-    /// the entry from this map. This is to avoid a new dependency sort if the
-    /// same listener with the same dependencies keeps hopping on and off this
-    /// LLEventPump.
-    DependencyMap mDeps;
-};
-
-/*****************************************************************************
-*   LLEventStream
-*****************************************************************************/
-/**
- * LLEventStream is a thin wrapper around LLStandardSignal. Posting an
- * event immediately calls all registered listeners.
- */
-class LL_COMMON_API LLEventStream: public LLEventPump
-{
-public:
-    LLEventStream(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
-    virtual ~LLEventStream() {}
-
-    /// Post an event to all listeners
-    virtual bool post(const LLSD& event);
-};
-
-/*****************************************************************************
-*   LLEventQueue
-*****************************************************************************/
-/**
- * LLEventQueue isa LLEventPump whose post() method defers calling registered
- * listeners until flush() is called.
- */
-class LL_COMMON_API LLEventQueue: public LLEventPump
-{
-public:
-    LLEventQueue(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
-    virtual ~LLEventQueue() {}
-
-    /// Post an event to all listeners
-    virtual bool post(const LLSD& event);
-
-private:
-    /// flush queued events
-    virtual void flush();
-
-private:
-    typedef std::deque<LLSD> EventQueue;
-    EventQueue mEventQueue;
-};
-
-/*****************************************************************************
-*   LLReqID
-*****************************************************************************/
-/**
- * This class helps the implementer of a given event API to honor the
- * ["reqid"] convention. By this convention, each event API stamps into its
- * response LLSD a ["reqid"] key whose value echoes the ["reqid"] value, if
- * any, from the corresponding request.
- *
- * This supports an (atypical, but occasionally necessary) use case in which
- * two or more asynchronous requests are multiplexed onto the same ["reply"]
- * LLEventPump. Since the response events could arrive in arbitrary order, the
- * caller must be able to demux them. It does so by matching the ["reqid"]
- * value in each response with the ["reqid"] value in the corresponding
- * request.
- *
- * It is the caller's responsibility to ensure distinct ["reqid"] values for
- * that case. Though LLSD::UUID is guaranteed to work, it might be overkill:
- * the "namespace" of unique ["reqid"] values is simply the set of requests
- * specifying the same ["reply"] LLEventPump name.
- *
- * Making a given event API echo the request's ["reqid"] into the response is
- * nearly trivial. This helper is mostly for mnemonic purposes, to serve as a
- * place to put these comments. We hope that each time a coder implements a
- * new event API based on some existing one, s/he will say, "Huh, what's an
- * LLReqID?" and look up this material.
- *
- * The hardest part about the convention is deciding where to store the
- * ["reqid"] value. Ironically, LLReqID can't help with that: you must store
- * an LLReqID instance in whatever storage will persist until the reply is
- * sent. For example, if the request ultimately ends up using a Responder
- * subclass, storing an LLReqID instance in the Responder works.
- *
- * @note
- * The @em implementer of an event API must honor the ["reqid"] convention.
- * However, the @em caller of an event API need only use it if s/he is sharing
- * the same ["reply"] LLEventPump for two or more asynchronous event API
- * requests.
- *
- * In most cases, it's far easier for the caller to instantiate a local
- * LLEventStream and pass its name to the event API in question. Then it's
- * perfectly reasonable not to set a ["reqid"] key in the request, ignoring
- * the @c isUndefined() ["reqid"] value in the response.
- */
-class LL_COMMON_API LLReqID
-{
-public:
-    /**
-     * If you have the request in hand at the time you instantiate the
-     * LLReqID, pass that request to extract its ["reqid"].
- */
-    LLReqID(const LLSD& request):
-        mReqid(request["reqid"])
-    {}
-    /// If you don't yet have the request, use setFrom() later.
-    LLReqID() {}
-
-    /// Extract and store the ["reqid"] value from an incoming request.
-    void setFrom(const LLSD& request)
-    {
-        mReqid = request["reqid"];
-    }
-
-    /// Set ["reqid"] key into a pending response LLSD object.
-    void stamp(LLSD& response) const;
-
-    /// Make a whole new response LLSD object with our ["reqid"].
-    LLSD makeResponse() const
-    {
-        LLSD response;
-        stamp(response);
-        return response;
-    }
-
-    /// Not really sure of a use case for this accessor...
-    LLSD getReqID() const { return mReqid; }
-
-private:
-    LLSD mReqid;
-};
-
-/*****************************************************************************
-*   Underpinnings
-*****************************************************************************/
-/**
- * We originally provided a suite of overloaded
- * LLEventTrackable::listenTo(LLEventPump&, ...) methods that would call
- * LLEventPump::listen(...) and then pass the returned LLBoundListener to
- * LLEventTrackable::track(). This was workable but error-prone: the coder
- * must remember to call listenTo() rather than the more straightforward
- * listen() method.
- *
- * Now we publish only the single canonical listen() method, so there's a
- * uniform mechanism. Having a single way to do this is good, in that there's
- * no question in the coder's mind which of several alternatives to choose.
- *
- * To support automatic connection management, we use boost::visit_each
- * (http://www.boost.org/doc/libs/1_37_0/doc/html/boost/visit_each.html) to
- * inspect each argument of a boost::bind expression. (Although the visit_each
- * mechanism was first introduced with the original Boost.Signals library, it
- * was only later documented.)
- *
- * Cases:
- * * At least one of the function's arguments is a boost::weak_ptr<T>. Pass
- *   the corresponding shared_ptr to slot_type::track(). Ideally that would be
- *   the object whose method we want to call, but in fact we do the same for
- *   any weak_ptr we might find among the bound arguments. If we're passing
- *   our bound method a weak_ptr to some object, wouldn't the destruction of
- *   that object invalidate the call? So we disconnect automatically when any
- *   such object is destroyed. This is the mechanism preferred by boost::
- *   signals2.
- * * One of the functions's arguments is a boost::shared_ptr<T>. This produces
- *   a compile error: the bound copy of the shared_ptr stored in the
- *   boost_bind object stored in the signal object would make the referenced
- *   T object immortal. We provide a weaken() function. Pass
- *   weaken(your_shared_ptr) instead. (We can inspect, but not modify, the
- *   boost::bind object. Otherwise we'd replace the shared_ptr with weak_ptr
- *   implicitly and just proceed.)
- * * One of the function's arguments is a plain pointer/reference to an object
- *   derived from boost::enable_shared_from_this. We assume that this object
- *   is managed using boost::shared_ptr, so we implicitly extract a shared_ptr
- *   and track that. (UNDER CONSTRUCTION)
- * * One of the function's arguments is derived from LLEventTrackable. Pass
- *   the LLBoundListener to its LLEventTrackable::track(). This is vulnerable
- *   to a couple different race conditions, as described in LLEventTrackable
- *   documentation. (NOTE: Now that LLEventTrackable is a typedef for
- *   boost::signals2::trackable, the Signals2 library handles this itself, so
- *   our visitor needs no special logic for this case.)
- * * Any other argument type is irrelevant to automatic connection management.
- */
-
-namespace LLEventDetail
-{
-    template <typename F>
-    const F& unwrap(const F& f) { return f; }
-
-    template <typename F>
-    const F& unwrap(const boost::reference_wrapper<F>& f) { return f.get(); }
-
-    // Most of the following is lifted from the Boost.Signals use of
-    // visit_each.
-    template<bool Cond> struct truth {};
-
-    /**
-     * boost::visit_each() Visitor, used on a template argument <tt>const F&
-     * f</tt> as follows (see visit_and_connect()):
-     * @code
-     * LLEventListener listener(f);
-     * Visitor visitor(listener); // bind listener so it can track() shared_ptrs
-     * using boost::visit_each;   // allow unqualified visit_each() call for ADL
-     * visit_each(visitor, unwrap(f));
-     * @endcode
-     */
-    class Visitor
-    {
-    public:
-        /**
-         * Visitor binds a reference to LLEventListener so we can track() any
-         * shared_ptrs we find in the argument list.
-         */
-        Visitor(LLEventListener& listener):
-            mListener(listener)
-        {
-        }
-
-        /**
-         * boost::visit_each() calls this method for each component of a
-         * boost::bind() expression.
-         */
-        template <typename T>
-        void operator()(const T& t) const
-        {
-            decode(t, 0);
-        }
-
-    private:
-        // decode() decides between a reference wrapper and anything else
-        // boost::ref() variant
-        template<typename T>
-        void decode(const boost::reference_wrapper<T>& t, int) const
-        {
-//          add_if_trackable(t.get_pointer());
-        }
-
-        // decode() anything else
-        template<typename T>
-        void decode(const T& t, long) const
-        {
-            typedef truth<(boost::is_pointer<T>::value)> is_a_pointer;
-            maybe_get_pointer(t, is_a_pointer());
-        }
-
-        // maybe_get_pointer() decides between a pointer and a non-pointer
-        // plain pointer variant
-        template<typename T>
-        void maybe_get_pointer(const T& t, truth<true>) const
-        {
-//          add_if_trackable(t);
-        }
-
-        // shared_ptr variant
-        template<typename T>
-        void maybe_get_pointer(const boost::shared_ptr<T>& t, truth<false>) const
-        {
-            // If we have a shared_ptr to this object, it doesn't matter
-            // whether the object is derived from LLEventTrackable, so no
-            // further analysis of T is needed.
-//          mListener.track(t);
-
-            // Make this case illegal. Passing a bound shared_ptr to
-            // slot_type::track() is useless, since the bound shared_ptr will
-            // keep the object alive anyway! Force the coder to cast to weak_ptr.
-
-            // Trivial as it is, make the BOOST_STATIC_ASSERT() condition
-            // dependent on template param so the macro is only evaluated if
-            // this method is in fact instantiated, as described here:
-            // http://www.boost.org/doc/libs/1_34_1/doc/html/boost_staticassert.html
-
-            // ATTENTION: Don't bind a shared_ptr<anything> using
-            // LLEventPump::listen(boost::bind()). Doing so captures a copy of
-            // the shared_ptr, making the referenced object effectively
-            // immortal. Use the weaken() function, e.g.:
-            // somepump.listen(boost::bind(...weaken(my_shared_ptr)...));
-            // This lets us automatically disconnect when the referenced
-            // object is destroyed.
-            BOOST_STATIC_ASSERT(sizeof(T) == 0);
-        }
-
-        // weak_ptr variant
-        template<typename T>
-        void maybe_get_pointer(const boost::weak_ptr<T>& t, truth<false>) const
-        {
-            // If we have a weak_ptr to this object, it doesn't matter
-            // whether the object is derived from LLEventTrackable, so no
-            // further analysis of T is needed.
-            mListener.track(t);
-//          std::cout << "Found weak_ptr<" << typeid(T).name() << ">!\n";
-        }
-
-#if 0
-        // reference to anything derived from boost::enable_shared_from_this
-        template <typename T>
-        inline void maybe_get_pointer(const boost::enable_shared_from_this<T>& ct,
-                                      truth<false>) const
-        {
-            // Use the slot_type::track(shared_ptr) mechanism. Cast away
-            // const-ness because (in our code base anyway) it's unusual
-            // to find shared_ptr<const T>.
-            boost::enable_shared_from_this<T>&
-                t(const_cast<boost::enable_shared_from_this<T>&>(ct));
-            std::cout << "Capturing shared_from_this()" << std::endl;
-            boost::shared_ptr<T> sp(t.shared_from_this());
-/*==========================================================================*|
-            std::cout << "Capturing weak_ptr" << std::endl;
-            boost::weak_ptr<T> wp(sp);
-|*==========================================================================*/
-            std::cout << "Tracking shared__ptr" << std::endl;
-            mListener.track(sp);
-        }
-#endif
-
-        // non-pointer variant
-        template<typename T>
-        void maybe_get_pointer(const T& t, truth<false>) const
-        {
-            // Take the address of this object, because the object itself may be
-            // trackable
-//          add_if_trackable(boost::addressof(t));
-        }
-
-/*==========================================================================*|
-        // add_if_trackable() adds LLEventTrackable objects to mTrackables
-        inline void add_if_trackable(const LLEventTrackable* t) const
-        {
-            if (t)
-            {
-            }
-        }
-
-        // pointer to anything not an LLEventTrackable subclass
-        inline void add_if_trackable(const void*) const
-        {
-        }
-
-        // pointer to free function
-        // The following construct uses the preprocessor to generate
-        // add_if_trackable() overloads accepting pointer-to-function taking
-        // 0, 1, ..., LLEVENTS_LISTENER_ARITY parameters of arbitrary type.
-#define BOOST_PP_LOCAL_MACRO(n)                                     \
-        template <typename R                                        \
-                  BOOST_PP_COMMA_IF(n)                              \
-                  BOOST_PP_ENUM_PARAMS(n, typename T)>              \
-        inline void                                                 \
-        add_if_trackable(R (*)(BOOST_PP_ENUM_PARAMS(n, T))) const   \
-        {                                                           \
-        }
-#define BOOST_PP_LOCAL_LIMITS (0, LLEVENTS_LISTENER_ARITY)
-#include BOOST_PP_LOCAL_ITERATE()
-#undef  BOOST_PP_LOCAL_MACRO
-#undef  BOOST_PP_LOCAL_LIMITS
-|*==========================================================================*/
-
-        /// Bind a reference to the LLEventListener to call its track() method.
-        LLEventListener& mListener;
-    };
-
-    /**
-     * Utility template function to use Visitor appropriately
-     *
-     * @param raw_listener Callable to connect, typically a boost::bind()
-     * expression. This will be visited by Visitor using boost::visit_each().
-     * @param connect_funct Callable that will connect() @a raw_listener to an
-     * LLStandardSignal, returning LLBoundListener.
-     */
-    template <typename LISTENER>
-    LLBoundListener visit_and_connect(const LISTENER& raw_listener,
-                                      const ConnectFunc& connect_func)
-    {
-        // Capture the listener
-        LLEventListener listener(raw_listener);
-        // Define our Visitor, binding the listener so we can call
-        // listener.track() if we discover any shared_ptr<Foo>.
-        LLEventDetail::Visitor visitor(listener);
-        // Allow unqualified visit_each() call for ADL
-        using boost::visit_each;
-        // Visit each component of a boost::bind() expression. Pass
-        // 'raw_listener', our template argument, rather than 'listener' from
-        // which type details have been erased. unwrap() comes from
-        // Boost.Signals, in case we were passed a boost::ref().
-        visit_each(visitor, LLEventDetail::unwrap(raw_listener));
-        // Make the connection using passed function. At present, wrapping
-        // this functionality into this function is a bit silly: we don't
-        // really need a visit_and_connect() function any more, just a visit()
-        // function. The definition of this function dates from when, after
-        // visit_each(), after establishing the connection, we had to
-        // postprocess the new connection with the visitor object. That's no
-        // longer necessary.
-        return connect_func(listener);
-    }
-} // namespace LLEventDetail
-
-// Somewhat to my surprise, passing boost::bind(...boost::weak_ptr<T>...) to
-// listen() fails in Boost code trying to instantiate LLEventListener (i.e.
-// LLStandardSignal::slot_type) because the boost::get_pointer() utility function isn't
-// specialized for boost::weak_ptr. This remedies that omission.
-namespace boost
-{
-    template <typename T>
-    T* get_pointer(const weak_ptr<T>& ptr) { return shared_ptr<T>(ptr).get(); }
-}
-
-/// Since we forbid use of listen(boost::bind(...shared_ptr<T>...)), provide an
-/// easy way to cast to the corresponding weak_ptr.
-template <typename T>
-boost::weak_ptr<T> weaken(const boost::shared_ptr<T>& ptr)
-{
-    return boost::weak_ptr<T>(ptr);
-}
-
-#endif /* ! defined(LL_LLEVENTS_H) */
+/**
+ * @file   llevents.h
+ * @author Kent Quirk, Nat Goodspeed
+ * @date   2008-09-11
+ * @brief  This is an implementation of the event system described at
+ *         https://wiki.lindenlab.com/wiki/Viewer:Messaging/Event_System,
+ *         originally introduced in llnotifications.h. It has nothing
+ *         whatsoever to do with the older system in llevent.h.
+ * 
+ * $LicenseInfo:firstyear=2008&license=viewergpl$
+ * Copyright (c) 2008, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLEVENTS_H)
+#define LL_LLEVENTS_H
+
+#include <string>
+#include <map>
+#include <set>
+#include <vector>
+#include <deque>
+#include <stdexcept>
+#if LL_WINDOWS
+	#pragma warning (push)
+	#pragma warning (disable : 4263) // boost::signals2::expired_slot::what() has const mismatch
+	#pragma warning (disable : 4264) 
+#endif
+#include <boost/signals2.hpp>
+#if LL_WINDOWS
+	#pragma warning (pop)
+#endif
+
+#include <boost/bind.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/utility.hpp>        // noncopyable
+#include <boost/optional/optional.hpp>
+#include <boost/visit_each.hpp>
+#include <boost/ref.hpp>            // reference_wrapper
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/function.hpp>
+#include <boost/static_assert.hpp>
+#include "llsd.h"
+#include "llsingleton.h"
+#include "lldependencies.h"
+
+// override this to allow binding free functions with more parameters
+#ifndef LLEVENTS_LISTENER_ARITY
+#define LLEVENTS_LISTENER_ARITY 10
+#endif
+
+// hack for testing
+#ifndef testable
+#define testable private
+#endif
+
+/*****************************************************************************
+*   Signal and handler declarations
+*   Using a single handler signature means that we can have a common handler
+*   type, rather than needing a distinct one for each different handler.
+*****************************************************************************/
+
+/**
+ * A boost::signals Combiner that stops the first time a handler returns true
+ * We need this because we want to have our handlers return bool, so that
+ * we have the option to cause a handler to stop further processing. The
+ * default handler fails when the signal returns a value but has no slots.
+ */
+struct LLStopWhenHandled
+{
+    typedef bool result_type;
+
+    template<typename InputIterator>
+    result_type operator()(InputIterator first, InputIterator last) const
+    {
+        for (InputIterator si = first; si != last; ++si)
+		{
+            if (*si)
+			{
+                return true;
+			}
+		}
+        return false;
+    }
+};
+
+/**
+ * We want to have a standard signature for all signals; this way,
+ * we can easily document a protocol for communicating across
+ * dlls and into scripting languages someday.
+ *
+ * We want to return a bool to indicate whether the signal has been
+ * handled and should NOT be passed on to other listeners.
+ * Return true to stop further handling of the signal, and false
+ * to continue.
+ *
+ * We take an LLSD because this way the contents of the signal
+ * are independent of the API used to communicate it.
+ * It is const ref because then there's low cost to pass it;
+ * if you only need to inspect it, it's very cheap.
+ *
+ * @internal
+ * The @c float template parameter indicates that we will internally use @c
+ * float to indicate relative listener order on a given LLStandardSignal.
+ * Don't worry, the @c float values are strictly internal! They are not part
+ * of the interface, for the excellent reason that requiring the caller to
+ * specify a numeric key to establish order means that the caller must know
+ * the universe of possible values. We use LLDependencies for that instead.
+ */
+typedef boost::signals2::signal<bool(const LLSD&), LLStopWhenHandled, float>  LLStandardSignal;
+/// Methods that forward listeners (e.g. constructed with
+/// <tt>boost::bind()</tt>) should accept (const LLEventListener&)
+typedef LLStandardSignal::slot_type LLEventListener;
+/// Result of registering a listener, supports <tt>connected()</tt>,
+/// <tt>disconnect()</tt> and <tt>blocked()</tt>
+typedef boost::signals2::connection LLBoundListener;
+/// Storing an LLBoundListener in LLTempBoundListener will disconnect the
+/// referenced listener when the LLTempBoundListener instance is destroyed.
+typedef boost::signals2::scoped_connection LLTempBoundListener;
+
+/**
+ * A common idiom for event-based code is to accept either a callable --
+ * directly called on completion -- or the string name of an LLEventPump on
+ * which to post the completion event. Specifying a parameter as <tt>const
+ * LLListenerOrPumpName&</tt> allows either.
+ *
+ * Calling a validly-constructed LLListenerOrPumpName, passing the LLSD
+ * 'event' object, either calls the callable or posts the event to the named
+ * LLEventPump.
+ *
+ * A default-constructed LLListenerOrPumpName is 'empty'. (This is useful as
+ * the default value of an optional method parameter.) Calling it throws
+ * LLListenerOrPumpName::Empty. Test for this condition beforehand using
+ * either <tt>if (param)</tt> or <tt>if (! param)</tt>.
+ */
+class LL_COMMON_API LLListenerOrPumpName
+{
+public:
+    /// passing string name of LLEventPump
+    LLListenerOrPumpName(const std::string& pumpname);
+    /// passing string literal (overload so compiler isn't forced to infer
+    /// double conversion)
+    LLListenerOrPumpName(const char* pumpname);
+    /// passing listener -- the "anything else" catch-all case. The type of an
+    /// object constructed by boost::bind() isn't intended to be written out.
+    /// Normally we'd just accept 'const LLEventListener&', but that would
+    /// require double implicit conversion: boost::bind() object to
+    /// LLEventListener, LLEventListener to LLListenerOrPumpName. So use a
+    /// template to forward anything.
+    template<typename T>
+    LLListenerOrPumpName(const T& listener): mListener(listener) {}
+
+    /// for omitted method parameter: uninitialized mListener
+    LLListenerOrPumpName() {}
+
+    /// test for validity
+    operator bool() const { return bool(mListener); }
+    bool operator! () const { return ! mListener; }
+
+    /// explicit accessor
+    const LLEventListener& getListener() const { return *mListener; }
+
+    /// implicit conversion to LLEventListener
+    operator LLEventListener() const { return *mListener; }
+
+    /// allow calling directly
+    bool operator()(const LLSD& event) const;
+
+    /// exception if you try to call when empty
+    struct Empty: public std::runtime_error
+    {
+        Empty(const std::string& what):
+            std::runtime_error(std::string("LLListenerOrPumpName::Empty: ") + what) {}
+    };
+
+private:
+    boost::optional<LLEventListener> mListener;
+};
+
+/*****************************************************************************
+*   LLEventPumps
+*****************************************************************************/
+class LLEventPump;
+
+/**
+ * LLEventPumps is a Singleton manager through which one typically accesses
+ * this subsystem.
+ */
+class LL_COMMON_API LLEventPumps: public LLSingleton<LLEventPumps>
+{
+    friend class LLSingleton<LLEventPumps>;
+public:
+    /**
+     * Find or create an LLEventPump instance with a specific name. We return
+     * a reference so there's no question about ownership. obtain() @em finds
+     * an instance without conferring @em ownership.
+     */
+    LLEventPump& obtain(const std::string& name);
+    /**
+     * Flush all known LLEventPump instances
+     */
+    void flush();
+
+    /**
+     * Reset all known LLEventPump instances
+     * workaround for DEV-35406 crash on shutdown
+     */
+    void reset();
+
+private:
+    friend class LLEventPump;
+    /**
+     * Register a new LLEventPump instance (internal)
+     */
+    std::string registerNew(const LLEventPump&, const std::string& name, bool tweak);
+    /**
+     * Unregister a doomed LLEventPump instance (internal)
+     */
+    void unregister(const LLEventPump&);
+
+private:
+    LLEventPumps();
+    ~LLEventPumps();
+
+testable:
+    // Map of all known LLEventPump instances, whether or not we instantiated
+    // them. We store a plain old LLEventPump* because this map doesn't claim
+    // ownership of the instances. Though the common usage pattern is to
+    // request an instance using obtain(), it's fair to instantiate an
+    // LLEventPump subclass statically, as a class member, on the stack or on
+    // the heap. In such cases, the instantiating party is responsible for its
+    // lifespan.
+    typedef std::map<std::string, LLEventPump*> PumpMap;
+    PumpMap mPumpMap;
+    // Set of all LLEventPumps we instantiated. Membership in this set means
+    // we claim ownership, and will delete them when this LLEventPumps is
+    // destroyed.
+    typedef std::set<LLEventPump*> PumpSet;
+    PumpSet mOurPumps;
+    // LLEventPump names that should be instantiated as LLEventQueue rather
+    // than as LLEventStream
+    typedef std::set<std::string> PumpNames;
+    PumpNames mQueueNames;
+};
+
+/*****************************************************************************
+*   details
+*****************************************************************************/
+namespace LLEventDetail
+{
+    /// Any callable capable of connecting an LLEventListener to an
+    /// LLStandardSignal to produce an LLBoundListener can be mapped to this
+    /// signature.
+    typedef boost::function<LLBoundListener(const LLEventListener&)> ConnectFunc;
+
+    /**
+     * Utility template function to use Visitor appropriately
+     *
+     * @param listener Callable to connect, typically a boost::bind()
+     * expression. This will be visited by Visitor using boost::visit_each().
+     * @param connect_func Callable that will connect() @a listener to an
+     * LLStandardSignal, returning LLBoundListener.
+     */
+    template <typename LISTENER>
+    LLBoundListener visit_and_connect(const LISTENER& listener,
+                                      const ConnectFunc& connect_func);
+} // namespace LLEventDetail
+
+/*****************************************************************************
+*   LLEventTrackable
+*****************************************************************************/
+/**
+ * LLEventTrackable wraps boost::signals2::trackable, which resembles
+ * boost::trackable. Derive your listener class from LLEventTrackable instead,
+ * and use something like
+ * <tt>LLEventPump::listen(boost::bind(&YourTrackableSubclass::method,
+ * instance, _1))</tt>. This will implicitly disconnect when the object
+ * referenced by @c instance is destroyed.
+ *
+ * @note
+ * LLEventTrackable doesn't address a couple of cases:
+ * * Object destroyed during call
+ *   - You enter a slot call in thread A.
+ *   - Thread B destroys the object, which of course disconnects it from any
+ *     future slot calls.
+ *   - Thread A's call uses 'this', which now refers to a defunct object.
+ *     Undefined behavior results.
+ * * Call during destruction
+ *   - @c MySubclass is derived from LLEventTrackable.
+ *   - @c MySubclass registers one of its own methods using
+ *     <tt>LLEventPump::listen()</tt>.
+ *   - The @c MySubclass object begins destruction. <tt>~MySubclass()</tt>
+ *     runs, destroying state specific to the subclass. (For instance, a
+ *     <tt>Foo*</tt> data member is <tt>delete</tt>d but not zeroed.)
+ *   - The listening method will not be disconnected until
+ *     <tt>~LLEventTrackable()</tt> runs.
+ *   - Before we get there, another thread posts data to the @c LLEventPump
+ *     instance, calling the @c MySubclass method.
+ *   - The method in question relies on valid @c MySubclass state. (For
+ *     instance, it attempts to dereference the <tt>Foo*</tt> pointer that was
+ *     <tt>delete</tt>d but not zeroed.)
+ *   - Undefined behavior results.
+ * If you suspect you may encounter any such scenario, you're better off
+ * managing the lifespan of your object with <tt>boost::shared_ptr</tt>.
+ * Passing <tt>LLEventPump::listen()</tt> a <tt>boost::bind()</tt> expression
+ * involving a <tt>boost::weak_ptr<Foo></tt> is recognized specially, engaging
+ * thread-safe Boost.Signals2 machinery.
+ */
+typedef boost::signals2::trackable LLEventTrackable;
+
+/*****************************************************************************
+*   LLEventPump
+*****************************************************************************/
+/**
+ * LLEventPump is the base class interface through which we access the
+ * concrete subclasses LLEventStream and LLEventQueue.
+ *
+ * @NOTE
+ * LLEventPump derives from LLEventTrackable so that when you "chain"
+ * LLEventPump instances together, they will automatically disconnect on
+ * destruction. Please see LLEventTrackable documentation for situations in
+ * which this may be perilous across threads.
+ */
+class LL_COMMON_API LLEventPump: public LLEventTrackable
+{
+public:
+    /**
+     * Exception thrown by LLEventPump(). You are trying to instantiate an
+     * LLEventPump (subclass) using the same name as some other instance, and
+     * you didn't pass <tt>tweak=true</tt> to permit it to generate a unique
+     * variant.
+     */
+    struct DupPumpName: public std::runtime_error
+    {
+        DupPumpName(const std::string& what):
+            std::runtime_error(std::string("DupPumpName: ") + what) {}
+    };
+
+    /**
+     * Instantiate an LLEventPump (subclass) with the string name by which it
+     * can be found using LLEventPumps::obtain().
+     *
+     * If you pass (or default) @a tweak to @c false, then a duplicate name
+     * will throw DupPumpName. This won't happen if LLEventPumps::obtain()
+     * instantiates the LLEventPump, because obtain() uses find-or-create
+     * logic. It can only happen if you instantiate an LLEventPump in your own
+     * code -- and a collision with the name of some other LLEventPump is
+     * likely to cause much more subtle problems!
+     *
+     * When you hand-instantiate an LLEventPump, consider passing @a tweak as
+     * @c true. This directs LLEventPump() to append a suffix to the passed @a
+     * name to make it unique. You can retrieve the adjusted name by calling
+     * getName() on your new instance.
+     */
+    LLEventPump(const std::string& name, bool tweak=false);
+    virtual ~LLEventPump();
+
+    /// group exceptions thrown by listen(). We use exceptions because these
+    /// particular errors are likely to be coding errors, found and fixed by
+    /// the developer even before preliminary checkin.
+    struct ListenError: public std::runtime_error
+    {
+        ListenError(const std::string& what): std::runtime_error(what) {}
+    };
+    /**
+     * exception thrown by listen(). You are attempting to register a
+     * listener on this LLEventPump using the same listener name as an
+     * already-registered listener.
+     */
+    struct DupListenerName: public ListenError
+    {
+        DupListenerName(const std::string& what):
+            ListenError(std::string("DupListenerName: ") + what)
+        {}
+    };
+    /**
+     * exception thrown by listen(). The order dependencies specified for your
+     * listener are incompatible with existing listeners.
+     *
+     * Consider listener "a" which specifies before "b" and "b" which
+     * specifies before "c". You are now attempting to register "c" before
+     * "a". There is no order that can satisfy all constraints.
+     */
+    struct Cycle: public ListenError
+    {
+        Cycle(const std::string& what): ListenError(std::string("Cycle: ") + what) {}
+    };
+    /**
+     * exception thrown by listen(). This one means that your new listener
+     * would force a change to the order of previously-registered listeners,
+     * and we don't have a good way to implement that.
+     *
+     * Consider listeners "some", "other" and "third". "some" and "other" are
+     * registered earlier without specifying relative order, so "other"
+     * happens to be first. Now you attempt to register "third" after "some"
+     * and before "other". Whoops, that would require swapping "some" and
+     * "other", which we can't do. Instead we throw this exception.
+     *
+     * It may not be possible to change the registration order so we already
+     * know "third"s order requirement by the time we register the second of
+     * "some" and "other". A solution would be to specify that "some" must
+     * come before "other", or equivalently that "other" must come after
+     * "some".
+     */
+    struct OrderChange: public ListenError
+    {
+        OrderChange(const std::string& what): ListenError(std::string("OrderChange: ") + what) {}
+    };
+
+    /// used by listen()
+    typedef std::vector<std::string> NameList;
+    /// convenience placeholder for when you explicitly want to pass an empty
+    /// NameList
+    const static NameList empty;
+
+    /// Get this LLEventPump's name
+    std::string getName() const { return mName; }
+
+    /**
+     * Register a new listener with a unique name. Specify an optional list
+     * of other listener names after which this one must be called, likewise
+     * an optional list of other listener names before which this one must be
+     * called. The other listeners mentioned need not yet be registered
+     * themselves. listen() can throw any ListenError; see ListenError
+     * subclasses.
+     *
+     * The listener name must be unique among active listeners for this
+     * LLEventPump, else you get DupListenerName. If you don't care to invent
+     * a name yourself, use inventName(). (I was tempted to recognize e.g. ""
+     * and internally generate a distinct name for that case. But that would
+     * handle badly the scenario in which you want to add, remove, re-add,
+     * etc. the same listener: each new listen() call would necessarily
+     * perform a new dependency sort. Assuming you specify the same
+     * after/before lists each time, using inventName() when you first
+     * instantiate your listener, then passing the same name on each listen()
+     * call, allows us to optimize away the second and subsequent dependency
+     * sorts.
+     *
+     * If (as is typical) you pass a <tt>boost::bind()</tt> expression as @a
+     * listener, listen() will inspect the components of that expression. If a
+     * bound object matches any of several cases, the connection will
+     * automatically be disconnected when that object is destroyed.
+     *
+     * * You bind a <tt>boost::weak_ptr</tt>.
+     * * Binding a <tt>boost::shared_ptr</tt> that way would ensure that the
+     *   referenced object would @em never be destroyed, since the @c
+     *   shared_ptr stored in the LLEventPump would remain an outstanding
+     *   reference. Use the weaken() function to convert your @c shared_ptr to
+     *   @c weak_ptr. Because this is easy to forget, binding a @c shared_ptr
+     *   will produce a compile error (@c BOOST_STATIC_ASSERT failure).
+     * * You bind a simple pointer or reference to an object derived from
+     *   <tt>boost::enable_shared_from_this</tt>. (UNDER CONSTRUCTION)
+     * * You bind a simple pointer or reference to an object derived from
+     *   LLEventTrackable. Unlike the cases described above, though, this is
+     *   vulnerable to a couple of cross-thread race conditions, as described
+     *   in the LLEventTrackable documentation.
+     */
+    template <typename LISTENER>
+    LLBoundListener listen(const std::string& name, const LISTENER& listener,
+                           const NameList& after=NameList(),
+                           const NameList& before=NameList())
+    {
+        // Examine listener, using our listen_impl() method to make the
+        // actual connection.
+        // This is why listen() is a template. Conversion from boost::bind()
+        // to LLEventListener performs type erasure, so it's important to look
+        // at the boost::bind object itself before that happens.
+        return LLEventDetail::visit_and_connect(listener,
+                                                boost::bind(&LLEventPump::listen_impl,
+                                                            this,
+                                                            name,
+                                                            _1,
+                                                            after,
+                                                            before));
+    }
+
+    /// Get the LLBoundListener associated with the passed name (dummy
+    /// LLBoundListener if not found)
+    virtual LLBoundListener getListener(const std::string& name) const;
+    /**
+     * Instantiate one of these to block an existing connection:
+     * @code
+     * { // in some local scope
+     *     LLEventPump::Blocker block(someLLBoundListener);
+     *     // code that needs the connection blocked
+     * } // unblock the connection again
+     * @endcode
+     */
+    typedef boost::signals2::shared_connection_block Blocker;
+    /// Unregister a listener by name. Prefer this to
+    /// <tt>getListener(name).disconnect()</tt> because stopListening() also
+    /// forgets this name.
+    virtual void stopListening(const std::string& name);
+    /// Post an event to all listeners. The @c bool return is only meaningful
+    /// if the underlying leaf class is LLEventStream -- beware of relying on
+    /// it too much! Truthfully, we return @c bool mostly to permit chaining
+    /// one LLEventPump as a listener on another.
+    virtual bool post(const LLSD&) = 0;
+    /// Enable/disable: while disabled, silently ignore all post() calls
+    virtual void enable(bool enabled=true) { mEnabled = enabled; }
+    /// query
+    virtual bool enabled() const { return mEnabled; }
+
+    /// Generate a distinct name for a listener -- see listen()
+    static std::string inventName(const std::string& pfx="listener");
+
+private:
+    friend class LLEventPumps;
+    /// flush queued events
+    virtual void flush() {}
+
+    virtual void reset();
+
+private:
+    virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
+                                        const NameList& after,
+                                        const NameList& before);
+    std::string mName;
+
+protected:
+    /// implement the dispatching
+    boost::scoped_ptr<LLStandardSignal> mSignal;
+
+    /// valve open?
+    bool mEnabled;
+    /// Map of named listeners. This tracks the listeners that actually exist
+    /// at this moment. When we stopListening(), we discard the entry from
+    /// this map.
+    typedef std::map<std::string, boost::signals2::connection> ConnectionMap;
+    ConnectionMap mConnections;
+    typedef LLDependencies<std::string, float> DependencyMap;
+    /// Dependencies between listeners. For each listener, track the float
+    /// used to establish its place in mSignal's order. This caches all the
+    /// listeners that have ever registered; stopListening() does not discard
+    /// the entry from this map. This is to avoid a new dependency sort if the
+    /// same listener with the same dependencies keeps hopping on and off this
+    /// LLEventPump.
+    DependencyMap mDeps;
+};
+
+/*****************************************************************************
+*   LLEventStream
+*****************************************************************************/
+/**
+ * LLEventStream is a thin wrapper around LLStandardSignal. Posting an
+ * event immediately calls all registered listeners.
+ */
+class LL_COMMON_API LLEventStream: public LLEventPump
+{
+public:
+    LLEventStream(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
+    virtual ~LLEventStream() {}
+
+    /// Post an event to all listeners
+    virtual bool post(const LLSD& event);
+};
+
+/*****************************************************************************
+*   LLEventQueue
+*****************************************************************************/
+/**
+ * LLEventQueue isa LLEventPump whose post() method defers calling registered
+ * listeners until flush() is called.
+ */
+class LL_COMMON_API LLEventQueue: public LLEventPump
+{
+public:
+    LLEventQueue(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
+    virtual ~LLEventQueue() {}
+
+    /// Post an event to all listeners
+    virtual bool post(const LLSD& event);
+
+private:
+    /// flush queued events
+    virtual void flush();
+
+private:
+    typedef std::deque<LLSD> EventQueue;
+    EventQueue mEventQueue;
+};
+
+/*****************************************************************************
+*   LLReqID
+*****************************************************************************/
+/**
+ * This class helps the implementer of a given event API to honor the
+ * ["reqid"] convention. By this convention, each event API stamps into its
+ * response LLSD a ["reqid"] key whose value echoes the ["reqid"] value, if
+ * any, from the corresponding request.
+ *
+ * This supports an (atypical, but occasionally necessary) use case in which
+ * two or more asynchronous requests are multiplexed onto the same ["reply"]
+ * LLEventPump. Since the response events could arrive in arbitrary order, the
+ * caller must be able to demux them. It does so by matching the ["reqid"]
+ * value in each response with the ["reqid"] value in the corresponding
+ * request.
+ *
+ * It is the caller's responsibility to ensure distinct ["reqid"] values for
+ * that case. Though LLSD::UUID is guaranteed to work, it might be overkill:
+ * the "namespace" of unique ["reqid"] values is simply the set of requests
+ * specifying the same ["reply"] LLEventPump name.
+ *
+ * Making a given event API echo the request's ["reqid"] into the response is
+ * nearly trivial. This helper is mostly for mnemonic purposes, to serve as a
+ * place to put these comments. We hope that each time a coder implements a
+ * new event API based on some existing one, s/he will say, "Huh, what's an
+ * LLReqID?" and look up this material.
+ *
+ * The hardest part about the convention is deciding where to store the
+ * ["reqid"] value. Ironically, LLReqID can't help with that: you must store
+ * an LLReqID instance in whatever storage will persist until the reply is
+ * sent. For example, if the request ultimately ends up using a Responder
+ * subclass, storing an LLReqID instance in the Responder works.
+ *
+ * @note
+ * The @em implementer of an event API must honor the ["reqid"] convention.
+ * However, the @em caller of an event API need only use it if s/he is sharing
+ * the same ["reply"] LLEventPump for two or more asynchronous event API
+ * requests.
+ *
+ * In most cases, it's far easier for the caller to instantiate a local
+ * LLEventStream and pass its name to the event API in question. Then it's
+ * perfectly reasonable not to set a ["reqid"] key in the request, ignoring
+ * the @c isUndefined() ["reqid"] value in the response.
+ */
+class LL_COMMON_API LLReqID
+{
+public:
+    /**
+     * If you have the request in hand at the time you instantiate the
+     * LLReqID, pass that request to extract its ["reqid"].
+ */
+    LLReqID(const LLSD& request):
+        mReqid(request["reqid"])
+    {}
+    /// If you don't yet have the request, use setFrom() later.
+    LLReqID() {}
+
+    /// Extract and store the ["reqid"] value from an incoming request.
+    void setFrom(const LLSD& request)
+    {
+        mReqid = request["reqid"];
+    }
+
+    /// Set ["reqid"] key into a pending response LLSD object.
+    void stamp(LLSD& response) const;
+
+    /// Make a whole new response LLSD object with our ["reqid"].
+    LLSD makeResponse() const
+    {
+        LLSD response;
+        stamp(response);
+        return response;
+    }
+
+    /// Not really sure of a use case for this accessor...
+    LLSD getReqID() const { return mReqid; }
+
+private:
+    LLSD mReqid;
+};
+
+/*****************************************************************************
+*   Underpinnings
+*****************************************************************************/
+/**
+ * We originally provided a suite of overloaded
+ * LLEventTrackable::listenTo(LLEventPump&, ...) methods that would call
+ * LLEventPump::listen(...) and then pass the returned LLBoundListener to
+ * LLEventTrackable::track(). This was workable but error-prone: the coder
+ * must remember to call listenTo() rather than the more straightforward
+ * listen() method.
+ *
+ * Now we publish only the single canonical listen() method, so there's a
+ * uniform mechanism. Having a single way to do this is good, in that there's
+ * no question in the coder's mind which of several alternatives to choose.
+ *
+ * To support automatic connection management, we use boost::visit_each
+ * (http://www.boost.org/doc/libs/1_37_0/doc/html/boost/visit_each.html) to
+ * inspect each argument of a boost::bind expression. (Although the visit_each
+ * mechanism was first introduced with the original Boost.Signals library, it
+ * was only later documented.)
+ *
+ * Cases:
+ * * At least one of the function's arguments is a boost::weak_ptr<T>. Pass
+ *   the corresponding shared_ptr to slot_type::track(). Ideally that would be
+ *   the object whose method we want to call, but in fact we do the same for
+ *   any weak_ptr we might find among the bound arguments. If we're passing
+ *   our bound method a weak_ptr to some object, wouldn't the destruction of
+ *   that object invalidate the call? So we disconnect automatically when any
+ *   such object is destroyed. This is the mechanism preferred by boost::
+ *   signals2.
+ * * One of the functions's arguments is a boost::shared_ptr<T>. This produces
+ *   a compile error: the bound copy of the shared_ptr stored in the
+ *   boost_bind object stored in the signal object would make the referenced
+ *   T object immortal. We provide a weaken() function. Pass
+ *   weaken(your_shared_ptr) instead. (We can inspect, but not modify, the
+ *   boost::bind object. Otherwise we'd replace the shared_ptr with weak_ptr
+ *   implicitly and just proceed.)
+ * * One of the function's arguments is a plain pointer/reference to an object
+ *   derived from boost::enable_shared_from_this. We assume that this object
+ *   is managed using boost::shared_ptr, so we implicitly extract a shared_ptr
+ *   and track that. (UNDER CONSTRUCTION)
+ * * One of the function's arguments is derived from LLEventTrackable. Pass
+ *   the LLBoundListener to its LLEventTrackable::track(). This is vulnerable
+ *   to a couple different race conditions, as described in LLEventTrackable
+ *   documentation. (NOTE: Now that LLEventTrackable is a typedef for
+ *   boost::signals2::trackable, the Signals2 library handles this itself, so
+ *   our visitor needs no special logic for this case.)
+ * * Any other argument type is irrelevant to automatic connection management.
+ */
+
+namespace LLEventDetail
+{
+    template <typename F>
+    const F& unwrap(const F& f) { return f; }
+
+    template <typename F>
+    const F& unwrap(const boost::reference_wrapper<F>& f) { return f.get(); }
+
+    // Most of the following is lifted from the Boost.Signals use of
+    // visit_each.
+    template<bool Cond> struct truth {};
+
+    /**
+     * boost::visit_each() Visitor, used on a template argument <tt>const F&
+     * f</tt> as follows (see visit_and_connect()):
+     * @code
+     * LLEventListener listener(f);
+     * Visitor visitor(listener); // bind listener so it can track() shared_ptrs
+     * using boost::visit_each;   // allow unqualified visit_each() call for ADL
+     * visit_each(visitor, unwrap(f));
+     * @endcode
+     */
+    class Visitor
+    {
+    public:
+        /**
+         * Visitor binds a reference to LLEventListener so we can track() any
+         * shared_ptrs we find in the argument list.
+         */
+        Visitor(LLEventListener& listener):
+            mListener(listener)
+        {
+        }
+
+        /**
+         * boost::visit_each() calls this method for each component of a
+         * boost::bind() expression.
+         */
+        template <typename T>
+        void operator()(const T& t) const
+        {
+            decode(t, 0);
+        }
+
+    private:
+        // decode() decides between a reference wrapper and anything else
+        // boost::ref() variant
+        template<typename T>
+        void decode(const boost::reference_wrapper<T>& t, int) const
+        {
+//          add_if_trackable(t.get_pointer());
+        }
+
+        // decode() anything else
+        template<typename T>
+        void decode(const T& t, long) const
+        {
+            typedef truth<(boost::is_pointer<T>::value)> is_a_pointer;
+            maybe_get_pointer(t, is_a_pointer());
+        }
+
+        // maybe_get_pointer() decides between a pointer and a non-pointer
+        // plain pointer variant
+        template<typename T>
+        void maybe_get_pointer(const T& t, truth<true>) const
+        {
+//          add_if_trackable(t);
+        }
+
+        // shared_ptr variant
+        template<typename T>
+        void maybe_get_pointer(const boost::shared_ptr<T>& t, truth<false>) const
+        {
+            // If we have a shared_ptr to this object, it doesn't matter
+            // whether the object is derived from LLEventTrackable, so no
+            // further analysis of T is needed.
+//          mListener.track(t);
+
+            // Make this case illegal. Passing a bound shared_ptr to
+            // slot_type::track() is useless, since the bound shared_ptr will
+            // keep the object alive anyway! Force the coder to cast to weak_ptr.
+
+            // Trivial as it is, make the BOOST_STATIC_ASSERT() condition
+            // dependent on template param so the macro is only evaluated if
+            // this method is in fact instantiated, as described here:
+            // http://www.boost.org/doc/libs/1_34_1/doc/html/boost_staticassert.html
+
+            // ATTENTION: Don't bind a shared_ptr<anything> using
+            // LLEventPump::listen(boost::bind()). Doing so captures a copy of
+            // the shared_ptr, making the referenced object effectively
+            // immortal. Use the weaken() function, e.g.:
+            // somepump.listen(boost::bind(...weaken(my_shared_ptr)...));
+            // This lets us automatically disconnect when the referenced
+            // object is destroyed.
+            BOOST_STATIC_ASSERT(sizeof(T) == 0);
+        }
+
+        // weak_ptr variant
+        template<typename T>
+        void maybe_get_pointer(const boost::weak_ptr<T>& t, truth<false>) const
+        {
+            // If we have a weak_ptr to this object, it doesn't matter
+            // whether the object is derived from LLEventTrackable, so no
+            // further analysis of T is needed.
+            mListener.track(t);
+//          std::cout << "Found weak_ptr<" << typeid(T).name() << ">!\n";
+        }
+
+#if 0
+        // reference to anything derived from boost::enable_shared_from_this
+        template <typename T>
+        inline void maybe_get_pointer(const boost::enable_shared_from_this<T>& ct,
+                                      truth<false>) const
+        {
+            // Use the slot_type::track(shared_ptr) mechanism. Cast away
+            // const-ness because (in our code base anyway) it's unusual
+            // to find shared_ptr<const T>.
+            boost::enable_shared_from_this<T>&
+                t(const_cast<boost::enable_shared_from_this<T>&>(ct));
+            std::cout << "Capturing shared_from_this()" << std::endl;
+            boost::shared_ptr<T> sp(t.shared_from_this());
+/*==========================================================================*|
+            std::cout << "Capturing weak_ptr" << std::endl;
+            boost::weak_ptr<T> wp(sp);
+|*==========================================================================*/
+            std::cout << "Tracking shared__ptr" << std::endl;
+            mListener.track(sp);
+        }
+#endif
+
+        // non-pointer variant
+        template<typename T>
+        void maybe_get_pointer(const T& t, truth<false>) const
+        {
+            // Take the address of this object, because the object itself may be
+            // trackable
+//          add_if_trackable(boost::addressof(t));
+        }
+
+/*==========================================================================*|
+        // add_if_trackable() adds LLEventTrackable objects to mTrackables
+        inline void add_if_trackable(const LLEventTrackable* t) const
+        {
+            if (t)
+            {
+            }
+        }
+
+        // pointer to anything not an LLEventTrackable subclass
+        inline void add_if_trackable(const void*) const
+        {
+        }
+
+        // pointer to free function
+        // The following construct uses the preprocessor to generate
+        // add_if_trackable() overloads accepting pointer-to-function taking
+        // 0, 1, ..., LLEVENTS_LISTENER_ARITY parameters of arbitrary type.
+#define BOOST_PP_LOCAL_MACRO(n)                                     \
+        template <typename R                                        \
+                  BOOST_PP_COMMA_IF(n)                              \
+                  BOOST_PP_ENUM_PARAMS(n, typename T)>              \
+        inline void                                                 \
+        add_if_trackable(R (*)(BOOST_PP_ENUM_PARAMS(n, T))) const   \
+        {                                                           \
+        }
+#define BOOST_PP_LOCAL_LIMITS (0, LLEVENTS_LISTENER_ARITY)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef  BOOST_PP_LOCAL_MACRO
+#undef  BOOST_PP_LOCAL_LIMITS
+|*==========================================================================*/
+
+        /// Bind a reference to the LLEventListener to call its track() method.
+        LLEventListener& mListener;
+    };
+
+    /**
+     * Utility template function to use Visitor appropriately
+     *
+     * @param raw_listener Callable to connect, typically a boost::bind()
+     * expression. This will be visited by Visitor using boost::visit_each().
+     * @param connect_funct Callable that will connect() @a raw_listener to an
+     * LLStandardSignal, returning LLBoundListener.
+     */
+    template <typename LISTENER>
+    LLBoundListener visit_and_connect(const LISTENER& raw_listener,
+                                      const ConnectFunc& connect_func)
+    {
+        // Capture the listener
+        LLEventListener listener(raw_listener);
+        // Define our Visitor, binding the listener so we can call
+        // listener.track() if we discover any shared_ptr<Foo>.
+        LLEventDetail::Visitor visitor(listener);
+        // Allow unqualified visit_each() call for ADL
+        using boost::visit_each;
+        // Visit each component of a boost::bind() expression. Pass
+        // 'raw_listener', our template argument, rather than 'listener' from
+        // which type details have been erased. unwrap() comes from
+        // Boost.Signals, in case we were passed a boost::ref().
+        visit_each(visitor, LLEventDetail::unwrap(raw_listener));
+        // Make the connection using passed function. At present, wrapping
+        // this functionality into this function is a bit silly: we don't
+        // really need a visit_and_connect() function any more, just a visit()
+        // function. The definition of this function dates from when, after
+        // visit_each(), after establishing the connection, we had to
+        // postprocess the new connection with the visitor object. That's no
+        // longer necessary.
+        return connect_func(listener);
+    }
+} // namespace LLEventDetail
+
+// Somewhat to my surprise, passing boost::bind(...boost::weak_ptr<T>...) to
+// listen() fails in Boost code trying to instantiate LLEventListener (i.e.
+// LLStandardSignal::slot_type) because the boost::get_pointer() utility function isn't
+// specialized for boost::weak_ptr. This remedies that omission.
+namespace boost
+{
+    template <typename T>
+    T* get_pointer(const weak_ptr<T>& ptr) { return shared_ptr<T>(ptr).get(); }
+}
+
+/// Since we forbid use of listen(boost::bind(...shared_ptr<T>...)), provide an
+/// easy way to cast to the corresponding weak_ptr.
+template <typename T>
+boost::weak_ptr<T> weaken(const boost::shared_ptr<T>& ptr)
+{
+    return boost::weak_ptr<T>(ptr);
+}
+
+#endif /* ! defined(LL_LLEVENTS_H) */
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index 905d736d6213a1a38f1db81e2bced96c40d1ddab..45b84ea3eaa5c353913b7bc3acfec5ddbe6bafce 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -1,317 +1,317 @@
-/** 
- * @file llfasttimer.h
- * @brief Declaration of a fast timer.
- *
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_FASTTIMER_H
-#define LL_FASTTIMER_H
-
-#include "llinstancetracker.h"
-
-#define FAST_TIMER_ON 1
-
-#if LL_WINDOWS
-
-// shift off lower 8 bits for lower resolution but longer term timing
-// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
-inline U32 get_cpu_clock_count_32()
-{
-	U32 ret_val;
-	__asm 
-	{
-        _emit   0x0f
-        _emit   0x31
-		shr eax,8
-		shl edx,24
-		or eax, edx
-		mov dword ptr [ret_val], eax
-	}
-    return ret_val;
-}
-
-// return full timer value, still shifted by 8 bits
-inline U64 get_cpu_clock_count_64()
-{
-	U64 ret_val;
-	__asm 
-	{
-        _emit   0x0f
-        _emit   0x31
-		mov eax,eax
-		mov edx,edx
-		mov dword ptr [ret_val+4], edx
-		mov dword ptr [ret_val], eax
-	}
-    return ret_val >> 8;
-}
-
-#endif // LL_WINDOWS
-
-#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
-inline U32 get_cpu_clock_count_32()
-{																	
-	U64 x;															
-	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));					
-	return (U32)x >> 8;													
-}
-
-inline U32 get_cpu_clock_count_64()
-{																	
-	U64 x;
-	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
-	return x >> 8;
-}
-#endif
-
-#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
-//
-// Mac PPC (deprecated) & Solaris SPARC implementation of CPU clock
-//
-// Just use gettimeofday implementation for now
-
-inline U32 get_cpu_clock_count_32()
-{
-	return (U32)get_clock_count();
-}
-
-inline U32 get_cpu_clock_count_64()
-{																	
-	return get_clock_count();
-}
-#endif
-
-class LLMutex;
-
-#include <queue>
-#include "llsd.h"
-
-
-class LL_COMMON_API LLFastTimer
-{
-public:
-	// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances
-	class LL_COMMON_API NamedTimer 
-	:	public LLInstanceTracker<NamedTimer>
-	{
-		friend class DeclareTimer;
-	public:
-		~NamedTimer();
-
-		enum { HISTORY_NUM = 60 };
-
-		const std::string& getName() const { return mName; }
-		NamedTimer* getParent() const { return mParent; }
-		void setParent(NamedTimer* parent);
-		S32 getDepth();
-		std::string getToolTip(S32 history_index = -1);
-
-		typedef std::vector<NamedTimer*>::const_iterator child_const_iter;
-		child_const_iter beginChildren();
-		child_const_iter endChildren();
-		std::vector<NamedTimer*>& getChildren();
-
-		void setCollapsed(bool collapsed) { mCollapsed = collapsed; }
-		bool getCollapsed() const { return mCollapsed; }
-
-		U32 getCountAverage() const { return mCountAverage; }
-		U32 getCallAverage() const { return mCallAverage; }
-
-		U32 getHistoricalCount(S32 history_index = 0) const;
-		U32 getHistoricalCalls(S32 history_index = 0) const;
-
-		static NamedTimer& getRootNamedTimer();
-
-		struct FrameState
-		{
-			FrameState(NamedTimer* timerp);
-
-			U32 		mSelfTimeCounter;
-			U32 		mCalls;
-			FrameState*	mParent;		// info for caller timer
-			FrameState*	mLastCaller;	// used to bootstrap tree construction
-			NamedTimer*	mTimer;
-			U16			mActiveCount;	// number of timers with this ID active on stack
-			bool		mMoveUpTree;	// needs to be moved up the tree of timers at the end of frame
-		};
-
-		S32 getFrameStateIndex() const { return mFrameStateIndex; }
-
-		FrameState& getFrameState() const;
-
-
-	private: 
-		friend class LLFastTimer;
-		friend class NamedTimerFactory;
-
-		//
-		// methods
-		//
-		NamedTimer(const std::string& name);
-		// recursive call to gather total time from children
-		static void accumulateTimings();
-
-		// updates cumulative times and hierarchy, 
-		// can be called multiple times in a frame, at any point
-		static void processTimes();
-
-		static void buildHierarchy();
-		static void resetFrame();
-		static void reset();
-
-	
-		//
-		// members
-		//
-		S32			mFrameStateIndex;
-
-		std::string	mName;
-
-		U32 		mTotalTimeCounter;
-
-		U32 		mCountAverage;
-		U32			mCallAverage;
-
-		U32*		mCountHistory;
-		U32*		mCallHistory;
-
-		// tree structure
-		NamedTimer*					mParent;				// NamedTimer of caller(parent)
-		std::vector<NamedTimer*>	mChildren;
-		bool						mCollapsed;				// don't show children
-		bool						mNeedsSorting;			// sort children whenever child added
-
-	};
-
-	// used to statically declare a new named timer
-	class LL_COMMON_API DeclareTimer
-	:	public LLInstanceTracker<DeclareTimer>
-	{
-	public:
-		DeclareTimer(const std::string& name, bool open);
-		DeclareTimer(const std::string& name);
-
-		static void updateCachedPointers();
-
-		// convertable to NamedTimer::FrameState for convenient usage of LLFastTimer(declared_timer)
-		operator NamedTimer::FrameState&() { return *mFrameState; }
-	private:
-		NamedTimer&				mTimer;
-		NamedTimer::FrameState* mFrameState; 
-	};
-
-
-public:
-	static LLMutex* sLogLock;
-	static std::queue<LLSD> sLogQueue;
-	static BOOL sLog;
-	static BOOL sMetricLog;
-
-	typedef std::vector<NamedTimer::FrameState> info_list_t;
-	static info_list_t& getFrameStateList();
-
-	enum RootTimerMarker { ROOT };
-	LLFastTimer(RootTimerMarker);
-
-	LLFastTimer(NamedTimer::FrameState& timer)
-	:	mFrameState(&timer)
-	{
-#if FAST_TIMER_ON
-		NamedTimer::FrameState* frame_state = &timer;
-		U32 cur_time = get_cpu_clock_count_32();
-		mStartSelfTime = cur_time;
-		mStartTotalTime = cur_time;
-
-		frame_state->mActiveCount++;
-		frame_state->mCalls++;
-		// keep current parent as long as it is active when we are
-		frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0);
-	
-		mLastTimer = sCurTimer;
-		sCurTimer = this;
-#endif
-	}
-
-	~LLFastTimer()
-	{
-#if FAST_TIMER_ON
-		NamedTimer::FrameState* frame_state = mFrameState;
-		U32 cur_time = get_cpu_clock_count_32();
-		frame_state->mSelfTimeCounter += cur_time - mStartSelfTime;
-
-		frame_state->mActiveCount--;
-		LLFastTimer* last_timer = mLastTimer;
-		sCurTimer = last_timer;
-
-		// store last caller to bootstrap tree creation
-		frame_state->mLastCaller = last_timer->mFrameState;
-
-		// we are only tracking self time, so subtract our total time delta from parents
-		U32 total_time = cur_time - mStartTotalTime;
-		last_timer->mStartSelfTime += total_time;
-#endif
-	}
-
-
-	// call this once a frame to reset timers
-	static void nextFrame();
-
-	// dumps current cumulative frame stats to log
-	// call nextFrame() to reset timers
-	static void dumpCurTimes(); 
-
-	// call this to reset timer hierarchy, averages, etc.
-	static void reset();
-
-	static U64 countsPerSecond();
-	static S32 getLastFrameIndex() { return sLastFrameIndex; }
-	static S32 getCurFrameIndex() { return sCurFrameIndex; }
-
-	static void writeLog(std::ostream& os);
-	static const NamedTimer* getTimerByName(const std::string& name);
-
-public:
-	static bool 		sPauseHistory;
-	static bool 		sResetHistory;
-	
-private:
-	typedef std::vector<LLFastTimer*> timer_stack_t;
-	static LLFastTimer*		sCurTimer;
-	static S32				sCurFrameIndex;
-	static S32				sLastFrameIndex;
-	static U64				sLastFrameTime;
-	static info_list_t*		sTimerInfos;
-
-	U32						mStartSelfTime;	// start time + time of all child timers
-	U32						mStartTotalTime;	// start time + time of all child timers
-	NamedTimer::FrameState*	mFrameState;
-	LLFastTimer*			mLastTimer;
-};
-
-#endif // LL_LLFASTTIMER_H
+/** 
+ * @file llfasttimer.h
+ * @brief Declaration of a fast timer.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_FASTTIMER_H
+#define LL_FASTTIMER_H
+
+#include "llinstancetracker.h"
+
+#define FAST_TIMER_ON 1
+
+#if LL_WINDOWS
+
+// shift off lower 8 bits for lower resolution but longer term timing
+// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
+inline U32 get_cpu_clock_count_32()
+{
+	U32 ret_val;
+	__asm 
+	{
+        _emit   0x0f
+        _emit   0x31
+		shr eax,8
+		shl edx,24
+		or eax, edx
+		mov dword ptr [ret_val], eax
+	}
+    return ret_val;
+}
+
+// return full timer value, still shifted by 8 bits
+inline U64 get_cpu_clock_count_64()
+{
+	U64 ret_val;
+	__asm 
+	{
+        _emit   0x0f
+        _emit   0x31
+		mov eax,eax
+		mov edx,edx
+		mov dword ptr [ret_val+4], edx
+		mov dword ptr [ret_val], eax
+	}
+    return ret_val >> 8;
+}
+
+#endif // LL_WINDOWS
+
+#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
+inline U32 get_cpu_clock_count_32()
+{																	
+	U64 x;															
+	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));					
+	return (U32)x >> 8;													
+}
+
+inline U32 get_cpu_clock_count_64()
+{																	
+	U64 x;
+	__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
+	return x >> 8;
+}
+#endif
+
+#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
+//
+// Mac PPC (deprecated) & Solaris SPARC implementation of CPU clock
+//
+// Just use gettimeofday implementation for now
+
+inline U32 get_cpu_clock_count_32()
+{
+	return (U32)get_clock_count();
+}
+
+inline U32 get_cpu_clock_count_64()
+{																	
+	return get_clock_count();
+}
+#endif
+
+class LLMutex;
+
+#include <queue>
+#include "llsd.h"
+
+
+class LL_COMMON_API LLFastTimer
+{
+public:
+	// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances
+	class LL_COMMON_API NamedTimer 
+	:	public LLInstanceTracker<NamedTimer>
+	{
+		friend class DeclareTimer;
+	public:
+		~NamedTimer();
+
+		enum { HISTORY_NUM = 60 };
+
+		const std::string& getName() const { return mName; }
+		NamedTimer* getParent() const { return mParent; }
+		void setParent(NamedTimer* parent);
+		S32 getDepth();
+		std::string getToolTip(S32 history_index = -1);
+
+		typedef std::vector<NamedTimer*>::const_iterator child_const_iter;
+		child_const_iter beginChildren();
+		child_const_iter endChildren();
+		std::vector<NamedTimer*>& getChildren();
+
+		void setCollapsed(bool collapsed) { mCollapsed = collapsed; }
+		bool getCollapsed() const { return mCollapsed; }
+
+		U32 getCountAverage() const { return mCountAverage; }
+		U32 getCallAverage() const { return mCallAverage; }
+
+		U32 getHistoricalCount(S32 history_index = 0) const;
+		U32 getHistoricalCalls(S32 history_index = 0) const;
+
+		static NamedTimer& getRootNamedTimer();
+
+		struct FrameState
+		{
+			FrameState(NamedTimer* timerp);
+
+			U32 		mSelfTimeCounter;
+			U32 		mCalls;
+			FrameState*	mParent;		// info for caller timer
+			FrameState*	mLastCaller;	// used to bootstrap tree construction
+			NamedTimer*	mTimer;
+			U16			mActiveCount;	// number of timers with this ID active on stack
+			bool		mMoveUpTree;	// needs to be moved up the tree of timers at the end of frame
+		};
+
+		S32 getFrameStateIndex() const { return mFrameStateIndex; }
+
+		FrameState& getFrameState() const;
+
+
+	private: 
+		friend class LLFastTimer;
+		friend class NamedTimerFactory;
+
+		//
+		// methods
+		//
+		NamedTimer(const std::string& name);
+		// recursive call to gather total time from children
+		static void accumulateTimings();
+
+		// updates cumulative times and hierarchy, 
+		// can be called multiple times in a frame, at any point
+		static void processTimes();
+
+		static void buildHierarchy();
+		static void resetFrame();
+		static void reset();
+
+	
+		//
+		// members
+		//
+		S32			mFrameStateIndex;
+
+		std::string	mName;
+
+		U32 		mTotalTimeCounter;
+
+		U32 		mCountAverage;
+		U32			mCallAverage;
+
+		U32*		mCountHistory;
+		U32*		mCallHistory;
+
+		// tree structure
+		NamedTimer*					mParent;				// NamedTimer of caller(parent)
+		std::vector<NamedTimer*>	mChildren;
+		bool						mCollapsed;				// don't show children
+		bool						mNeedsSorting;			// sort children whenever child added
+
+	};
+
+	// used to statically declare a new named timer
+	class LL_COMMON_API DeclareTimer
+	:	public LLInstanceTracker<DeclareTimer>
+	{
+	public:
+		DeclareTimer(const std::string& name, bool open);
+		DeclareTimer(const std::string& name);
+
+		static void updateCachedPointers();
+
+		// convertable to NamedTimer::FrameState for convenient usage of LLFastTimer(declared_timer)
+		operator NamedTimer::FrameState&() { return *mFrameState; }
+	private:
+		NamedTimer&				mTimer;
+		NamedTimer::FrameState* mFrameState; 
+	};
+
+
+public:
+	static LLMutex* sLogLock;
+	static std::queue<LLSD> sLogQueue;
+	static BOOL sLog;
+	static BOOL sMetricLog;
+
+	typedef std::vector<NamedTimer::FrameState> info_list_t;
+	static info_list_t& getFrameStateList();
+
+	enum RootTimerMarker { ROOT };
+	LLFastTimer(RootTimerMarker);
+
+	LLFastTimer(NamedTimer::FrameState& timer)
+	:	mFrameState(&timer)
+	{
+#if FAST_TIMER_ON
+		NamedTimer::FrameState* frame_state = &timer;
+		U32 cur_time = get_cpu_clock_count_32();
+		mStartSelfTime = cur_time;
+		mStartTotalTime = cur_time;
+
+		frame_state->mActiveCount++;
+		frame_state->mCalls++;
+		// keep current parent as long as it is active when we are
+		frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0);
+	
+		mLastTimer = sCurTimer;
+		sCurTimer = this;
+#endif
+	}
+
+	~LLFastTimer()
+	{
+#if FAST_TIMER_ON
+		NamedTimer::FrameState* frame_state = mFrameState;
+		U32 cur_time = get_cpu_clock_count_32();
+		frame_state->mSelfTimeCounter += cur_time - mStartSelfTime;
+
+		frame_state->mActiveCount--;
+		LLFastTimer* last_timer = mLastTimer;
+		sCurTimer = last_timer;
+
+		// store last caller to bootstrap tree creation
+		frame_state->mLastCaller = last_timer->mFrameState;
+
+		// we are only tracking self time, so subtract our total time delta from parents
+		U32 total_time = cur_time - mStartTotalTime;
+		last_timer->mStartSelfTime += total_time;
+#endif
+	}
+
+
+	// call this once a frame to reset timers
+	static void nextFrame();
+
+	// dumps current cumulative frame stats to log
+	// call nextFrame() to reset timers
+	static void dumpCurTimes(); 
+
+	// call this to reset timer hierarchy, averages, etc.
+	static void reset();
+
+	static U64 countsPerSecond();
+	static S32 getLastFrameIndex() { return sLastFrameIndex; }
+	static S32 getCurFrameIndex() { return sCurFrameIndex; }
+
+	static void writeLog(std::ostream& os);
+	static const NamedTimer* getTimerByName(const std::string& name);
+
+public:
+	static bool 		sPauseHistory;
+	static bool 		sResetHistory;
+	
+private:
+	typedef std::vector<LLFastTimer*> timer_stack_t;
+	static LLFastTimer*		sCurTimer;
+	static S32				sCurFrameIndex;
+	static S32				sLastFrameIndex;
+	static U64				sLastFrameTime;
+	static info_list_t*		sTimerInfos;
+
+	U32						mStartSelfTime;	// start time + time of all child timers
+	U32						mStartTotalTime;	// start time + time of all child timers
+	NamedTimer::FrameState*	mFrameState;
+	LLFastTimer*			mLastTimer;
+};
+
+#endif // LL_LLFASTTIMER_H
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..487594fe0d20501cc5372671831e9f66e2d97f23
--- /dev/null
+++ b/indra/llcommon/llfoldertype.cpp
@@ -0,0 +1,168 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementatino of LLFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+///----------------------------------------------------------------------------
+/// Class LLFolderType
+///----------------------------------------------------------------------------
+struct FolderEntry : public LLDictionaryEntry
+{
+	FolderEntry(const std::string &type_name, // 8 character limit!
+				bool is_protected) // can the viewer change categories of this type?
+		:
+	LLDictionaryEntry(type_name),
+	mIsProtected(is_protected)
+	{
+		llassert(type_name.length() <= 8);
+	}
+
+	const bool mIsProtected;
+};
+
+class LLFolderDictionary : public LLSingleton<LLFolderDictionary>,
+						   public LLDictionary<LLFolderType::EType, FolderEntry>
+{
+public:
+	LLFolderDictionary();
+};
+
+LLFolderDictionary::LLFolderDictionary()
+{
+	//       													    TYPE NAME	PROTECTED
+	//      													   |-----------|---------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new FolderEntry("texture",	TRUE));
+	addEntry(LLFolderType::FT_SOUND, 				new FolderEntry("sound",	TRUE));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new FolderEntry("callcard",	TRUE));
+	addEntry(LLFolderType::FT_LANDMARK, 			new FolderEntry("landmark",	TRUE));
+	addEntry(LLFolderType::FT_CLOTHING, 			new FolderEntry("clothing",	TRUE));
+	addEntry(LLFolderType::FT_OBJECT, 				new FolderEntry("object",	TRUE));
+	addEntry(LLFolderType::FT_NOTECARD, 			new FolderEntry("notecard",	TRUE));
+	addEntry(LLFolderType::FT_CATEGORY, 			new FolderEntry("category",	TRUE));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new FolderEntry("root",		TRUE));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new FolderEntry("lsltext",	TRUE));
+	addEntry(LLFolderType::FT_BODYPART, 			new FolderEntry("bodypart",	TRUE));
+	addEntry(LLFolderType::FT_TRASH, 				new FolderEntry("trash",	TRUE));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new FolderEntry("snapshot", TRUE));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new FolderEntry("lstndfnd",	TRUE));
+	addEntry(LLFolderType::FT_ANIMATION, 			new FolderEntry("animatn",	TRUE));
+	addEntry(LLFolderType::FT_GESTURE, 				new FolderEntry("gesture",	TRUE));
+	addEntry(LLFolderType::FT_FAVORITE, 			new FolderEntry("favorite",	TRUE));
+	
+	for (S32 ensemble_num = S32(LLFolderType::FT_ENSEMBLE_START); ensemble_num <= S32(LLFolderType::FT_ENSEMBLE_END); ensemble_num++)
+	{
+		addEntry(LLFolderType::EType(ensemble_num), new FolderEntry("ensemble", FALSE)); 
+	}
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new FolderEntry("current",	TRUE));
+	addEntry(LLFolderType::FT_OUTFIT, 				new FolderEntry("outfit",	FALSE));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new FolderEntry("my_otfts",	TRUE));
+
+	addEntry(LLFolderType::FT_MESH, 				new FolderEntry("mesh",	TRUE));
+
+	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new FolderEntry("-1",		FALSE));
+};
+
+// static
+LLFolderType::EType LLFolderType::lookup(const std::string& name)
+{
+	return LLFolderDictionary::getInstance()->lookup(name);
+}
+
+// static
+const std::string &LLFolderType::lookup(LLFolderType::EType folder_type)
+{
+	const FolderEntry *entry = LLFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	else
+	{
+		return badLookup();
+	}
+}
+
+// static
+// Only ensembles and plain folders aren't protected.  "Protected" means
+// you can't change certain properties such as their type.
+bool LLFolderType::lookupIsProtectedType(EType folder_type)
+{
+	const LLFolderDictionary *dict = LLFolderDictionary::getInstance();
+	const FolderEntry *entry = dict->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIsProtected;
+	}
+	return true;
+}
+
+// static
+bool LLFolderType::lookupIsEnsembleType(EType folder_type)
+{
+	return (folder_type >= FT_ENSEMBLE_START &&
+			folder_type <= FT_ENSEMBLE_END);
+}
+
+// static
+LLAssetType::EType LLFolderType::folderTypeToAssetType(LLFolderType::EType folder_type)
+{
+	if (LLAssetType::lookup(LLAssetType::EType(folder_type)) == LLAssetType::badLookup())
+	{
+		llwarns << "Converting to unknown asset type " << folder_type << llendl;
+	}
+	return (LLAssetType::EType)folder_type;
+}
+
+// static
+LLFolderType::EType LLFolderType::assetTypeToFolderType(LLAssetType::EType asset_type)
+{
+	if (LLFolderType::lookup(LLFolderType::EType(asset_type)) == LLFolderType::badLookup())
+	{
+		llwarns << "Converting to unknown folder type " << asset_type << llendl;
+	}
+	return (LLFolderType::EType)asset_type;
+}
+
+// static
+const std::string &LLFolderType::badLookup()
+{
+	static const std::string sBadLookup = "llfoldertype_bad_lookup";
+	return sBadLookup;
+}
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
new file mode 100644
index 0000000000000000000000000000000000000000..314ed63c350e64759525179557027b5e883cf399
--- /dev/null
+++ b/indra/llcommon/llfoldertype.h
@@ -0,0 +1,125 @@
+/** 
+ * @file llfoldertype.h
+ * @brief Declaration of LLFolderType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFOLDERTYPE_H
+#define LL_LLFOLDERTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class handles folder types (similar to assettype, except for folders)
+// and operations on those.
+class LL_COMMON_API LLFolderType
+{
+public:
+	// ! BACKWARDS COMPATIBILITY ! Folder type enums must match asset type enums.
+	enum EType
+	{
+		FT_TEXTURE = 0,
+
+		FT_SOUND = 1, 
+
+		FT_CALLINGCARD = 2,
+
+		FT_LANDMARK = 3,
+
+		// FT_SCRIPT = 4,
+
+		FT_CLOTHING = 5,
+
+		FT_OBJECT = 6,
+
+		FT_NOTECARD = 7,
+
+		FT_CATEGORY = 8,
+
+		FT_ROOT_CATEGORY = 9,
+
+		FT_LSL_TEXT = 10,
+
+		// FT_LSL_BYTECODE = 11,
+		// FT_TEXTURE_TGA = 12,
+
+		FT_BODYPART = 13,
+
+		FT_TRASH = 14,
+
+		FT_SNAPSHOT_CATEGORY = 15,
+
+		FT_LOST_AND_FOUND = 16,
+
+		// FT_SOUND_WAV = 17,
+		// FT_IMAGE_TGA = 18,
+		// FT_IMAGE_JPEG = 19,
+
+		FT_ANIMATION = 20,
+
+		FT_GESTURE = 21,
+
+		// FT_SIMSTATE = 22,
+
+		FT_FAVORITE = 23,
+
+		FT_ENSEMBLE_START = 26,
+		FT_ENSEMBLE_END = 45,
+			// This range is reserved for special clothing folder types.
+
+		FT_CURRENT_OUTFIT = 46,
+		FT_OUTFIT = 47,
+		FT_MY_OUTFITS = 48,
+		
+		FT_MESH = 49,
+
+		FT_INBOX = 50,
+
+		FT_COUNT = 51,
+
+		FT_NONE = -1
+	};
+
+	static EType 				lookup(const std::string& type_name);
+	static const std::string&	lookup(EType folder_type);
+
+	static bool 				lookupIsProtectedType(EType folder_type);
+	static bool 				lookupIsEnsembleType(EType folder_type);
+
+	static LLAssetType::EType	folderTypeToAssetType(LLFolderType::EType folder_type);
+	static LLFolderType::EType	assetTypeToFolderType(LLAssetType::EType asset_type);
+
+	static const std::string&	badLookup(); // error string when a lookup fails
+
+protected:
+	LLFolderType() {}
+	~LLFolderType() {}
+};
+
+#endif // LL_LLFOLDERTYPE_H
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index 09f19532b7c56439e2b580cdffd326ba9b14cf1d..1c6f64dd8bcc5ad0fb112abce920352156adca74 100644
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -1,65 +1,65 @@
-/** 
- * @file llmemory.h
- * @brief Memory allocation/deallocation header-stuff goes here.
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- * 
- * Copyright (c) 2002-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-#ifndef LLMEMORY_H
-#define LLMEMORY_H
-
-
-
-extern S32 gTotalDAlloc;
-extern S32 gTotalDAUse;
-extern S32 gDACount;
-
-extern void* ll_allocate (size_t size);
-extern void ll_release (void *p);
-
-class LL_COMMON_API LLMemory
-{
-public:
-	static void initClass();
-	static void cleanupClass();
-	static void freeReserve();
-	// Return the resident set size of the current process, in bytes.
-	// Return value is zero if not known.
-	static U64 getCurrentRSS();
-private:
-	static char* reserveMem;
-};
-
-// LLRefCount moved to llrefcount.h
-
-// LLPointer moved to llpointer.h
-
-// LLSafeHandle moved to llsafehandle.h
-
-// LLSingleton moved to llsingleton.h
-
-#endif
+/** 
+ * @file llmemory.h
+ * @brief Memory allocation/deallocation header-stuff goes here.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#ifndef LLMEMORY_H
+#define LLMEMORY_H
+
+
+
+extern S32 gTotalDAlloc;
+extern S32 gTotalDAUse;
+extern S32 gDACount;
+
+extern void* ll_allocate (size_t size);
+extern void ll_release (void *p);
+
+class LL_COMMON_API LLMemory
+{
+public:
+	static void initClass();
+	static void cleanupClass();
+	static void freeReserve();
+	// Return the resident set size of the current process, in bytes.
+	// Return value is zero if not known.
+	static U64 getCurrentRSS();
+private:
+	static char* reserveMem;
+};
+
+// LLRefCount moved to llrefcount.h
+
+// LLPointer moved to llpointer.h
+
+// LLSafeHandle moved to llsafehandle.h
+
+// LLSingleton moved to llsingleton.h
+
+#endif
diff --git a/indra/llcommon/llmemtype.h b/indra/llcommon/llmemtype.h
index 5952a3a7c5a5b69ea782a1b174aaf145db0aa774..677fad3034d033d558c3584ca1ffe6052f94689f 100644
--- a/indra/llcommon/llmemtype.h
+++ b/indra/llcommon/llmemtype.h
@@ -1,248 +1,248 @@
-/** 
- * @file llmemtype.h
- * @brief Runtime memory usage debugging utilities.
- *
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- * 
- * Copyright (c) 2005-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_MEMTYPE_H
-#define LL_MEMTYPE_H
-
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-
-#include "linden_common.h"
-//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-// WARNING: Never commit with MEM_TRACK_MEM == 1
-//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-#define MEM_TRACK_MEM (0 && LL_WINDOWS)
-
-#include <vector>
-
-#define MEM_TYPE_NEW(T)
-
-class LL_COMMON_API LLMemType
-{
-public:
-
-	// class we'll initialize all instances of as
-	// static members of MemType.  Then use
-	// to construct any new mem type.
-	class LL_COMMON_API DeclareMemType
-	{
-	public:
-		DeclareMemType(char const * st);
-		~DeclareMemType();
-	
-		S32 mID;
-		char const * mName;
-		
-		// array so we can map an index ID to Name
-		static std::vector<char const *> mNameList;
-	};
-
-	LLMemType(DeclareMemType& dt);
-	~LLMemType();
-
-	static char const * getNameFromID(S32 id);
-
-	static DeclareMemType MTYPE_INIT;
-	static DeclareMemType MTYPE_STARTUP;
-	static DeclareMemType MTYPE_MAIN;
-	static DeclareMemType MTYPE_FRAME;
-
-	static DeclareMemType MTYPE_GATHER_INPUT;
-	static DeclareMemType MTYPE_JOY_KEY;
-
-	static DeclareMemType MTYPE_IDLE;
-	static DeclareMemType MTYPE_IDLE_PUMP;
-	static DeclareMemType MTYPE_IDLE_NETWORK;
-	static DeclareMemType MTYPE_IDLE_UPDATE_REGIONS;
-	static DeclareMemType MTYPE_IDLE_UPDATE_VIEWER_REGION;
-	static DeclareMemType MTYPE_IDLE_UPDATE_SURFACE;
-	static DeclareMemType MTYPE_IDLE_UPDATE_PARCEL_OVERLAY;
-	static DeclareMemType MTYPE_IDLE_AUDIO;
-
-	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING;
-	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_ASKS;
-	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_REPLIES;
-
-	static DeclareMemType MTYPE_MESSAGE_CHECK_ALL;
-	static DeclareMemType MTYPE_MESSAGE_PROCESS_ACKS;
-
-	static DeclareMemType MTYPE_RENDER;
-	static DeclareMemType MTYPE_SLEEP;
-
-	static DeclareMemType MTYPE_NETWORK;
-	static DeclareMemType MTYPE_PHYSICS;
-	static DeclareMemType MTYPE_INTERESTLIST;
-
-	static DeclareMemType MTYPE_IMAGEBASE;
-	static DeclareMemType MTYPE_IMAGERAW;
-	static DeclareMemType MTYPE_IMAGEFORMATTED;
-	
-	static DeclareMemType MTYPE_APPFMTIMAGE;
-	static DeclareMemType MTYPE_APPRAWIMAGE;
-	static DeclareMemType MTYPE_APPAUXRAWIMAGE;
-	
-	static DeclareMemType MTYPE_DRAWABLE;
-	
-	static DeclareMemType MTYPE_OBJECT;
-	static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE;
-	static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE_CORE;
-
-	static DeclareMemType MTYPE_DISPLAY;
-	static DeclareMemType MTYPE_DISPLAY_UPDATE;
-	static DeclareMemType MTYPE_DISPLAY_UPDATE_CAMERA;
-	static DeclareMemType MTYPE_DISPLAY_UPDATE_GEOM;
-	static DeclareMemType MTYPE_DISPLAY_SWAP;
-	static DeclareMemType MTYPE_DISPLAY_UPDATE_HUD;
-	static DeclareMemType MTYPE_DISPLAY_GEN_REFLECTION;
-	static DeclareMemType MTYPE_DISPLAY_IMAGE_UPDATE;
-	static DeclareMemType MTYPE_DISPLAY_STATE_SORT;
-	static DeclareMemType MTYPE_DISPLAY_SKY;
-	static DeclareMemType MTYPE_DISPLAY_RENDER_GEOM;
-	static DeclareMemType MTYPE_DISPLAY_RENDER_FLUSH;
-	static DeclareMemType MTYPE_DISPLAY_RENDER_UI;
-	static DeclareMemType MTYPE_DISPLAY_RENDER_ATTACHMENTS;
-
-	static DeclareMemType MTYPE_VERTEX_DATA;
-	static DeclareMemType MTYPE_VERTEX_CONSTRUCTOR;
-	static DeclareMemType MTYPE_VERTEX_DESTRUCTOR;
-	static DeclareMemType MTYPE_VERTEX_CREATE_VERTICES;
-	static DeclareMemType MTYPE_VERTEX_CREATE_INDICES;
-	static DeclareMemType MTYPE_VERTEX_DESTROY_BUFFER;	
-	static DeclareMemType MTYPE_VERTEX_DESTROY_INDICES;
-	static DeclareMemType MTYPE_VERTEX_UPDATE_VERTS;
-	static DeclareMemType MTYPE_VERTEX_UPDATE_INDICES;
-	static DeclareMemType MTYPE_VERTEX_ALLOCATE_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_RESIZE_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_VERTICES;
-	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_INDICES;
-	static DeclareMemType MTYPE_VERTEX_UNMAP_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_SET_STRIDE;
-	static DeclareMemType MTYPE_VERTEX_SET_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_SETUP_VERTEX_BUFFER;
-	static DeclareMemType MTYPE_VERTEX_CLEANUP_CLASS;
-
-	static DeclareMemType MTYPE_SPACE_PARTITION;
-
-	static DeclareMemType MTYPE_PIPELINE;
-	static DeclareMemType MTYPE_PIPELINE_INIT;
-	static DeclareMemType MTYPE_PIPELINE_CREATE_BUFFERS;
-	static DeclareMemType MTYPE_PIPELINE_RESTORE_GL;
-	static DeclareMemType MTYPE_PIPELINE_UNLOAD_SHADERS;
-	static DeclareMemType MTYPE_PIPELINE_LIGHTING_DETAIL;
-	static DeclareMemType MTYPE_PIPELINE_GET_POOL_TYPE;
-	static DeclareMemType MTYPE_PIPELINE_ADD_POOL;
-	static DeclareMemType MTYPE_PIPELINE_ALLOCATE_DRAWABLE;
-	static DeclareMemType MTYPE_PIPELINE_ADD_OBJECT;
-	static DeclareMemType MTYPE_PIPELINE_CREATE_OBJECTS;
-	static DeclareMemType MTYPE_PIPELINE_UPDATE_MOVE;
-	static DeclareMemType MTYPE_PIPELINE_UPDATE_GEOM;
-	static DeclareMemType MTYPE_PIPELINE_MARK_VISIBLE;
-	static DeclareMemType MTYPE_PIPELINE_MARK_MOVED;
-	static DeclareMemType MTYPE_PIPELINE_MARK_SHIFT;
-	static DeclareMemType MTYPE_PIPELINE_SHIFT_OBJECTS;
-	static DeclareMemType MTYPE_PIPELINE_MARK_TEXTURED;
-	static DeclareMemType MTYPE_PIPELINE_MARK_REBUILD;
-	static DeclareMemType MTYPE_PIPELINE_UPDATE_CULL;
-	static DeclareMemType MTYPE_PIPELINE_STATE_SORT;
-	static DeclareMemType MTYPE_PIPELINE_POST_SORT;
-	
-	static DeclareMemType MTYPE_PIPELINE_RENDER_HUD_ELS;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_HL;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_DEFFERRED;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_POST_DEF;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_SHADOW;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_SELECT;
-	static DeclareMemType MTYPE_PIPELINE_REBUILD_POOLS;
-	static DeclareMemType MTYPE_PIPELINE_QUICK_LOOKUP;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_OBJECTS;
-	static DeclareMemType MTYPE_PIPELINE_GENERATE_IMPOSTOR;
-	static DeclareMemType MTYPE_PIPELINE_RENDER_BLOOM;
-
-	static DeclareMemType MTYPE_UPKEEP_POOLS;
-
-	static DeclareMemType MTYPE_AVATAR;
-	static DeclareMemType MTYPE_AVATAR_MESH;
-	static DeclareMemType MTYPE_PARTICLES;
-	static DeclareMemType MTYPE_REGIONS;
-
-	static DeclareMemType MTYPE_INVENTORY;
-	static DeclareMemType MTYPE_INVENTORY_DRAW;
-	static DeclareMemType MTYPE_INVENTORY_BUILD_NEW_VIEWS;
-	static DeclareMemType MTYPE_INVENTORY_DO_FOLDER;
-	static DeclareMemType MTYPE_INVENTORY_POST_BUILD;
-	static DeclareMemType MTYPE_INVENTORY_FROM_XML;
-	static DeclareMemType MTYPE_INVENTORY_CREATE_NEW_ITEM;
-	static DeclareMemType MTYPE_INVENTORY_VIEW_INIT;
-	static DeclareMemType MTYPE_INVENTORY_VIEW_SHOW;
-	static DeclareMemType MTYPE_INVENTORY_VIEW_TOGGLE;
-
-	static DeclareMemType MTYPE_ANIMATION;
-	static DeclareMemType MTYPE_VOLUME;
-	static DeclareMemType MTYPE_PRIMITIVE;
-	
-	static DeclareMemType MTYPE_SCRIPT;
-	static DeclareMemType MTYPE_SCRIPT_RUN;
-	static DeclareMemType MTYPE_SCRIPT_BYTECODE;
-	
-	static DeclareMemType MTYPE_IO_PUMP;
-	static DeclareMemType MTYPE_IO_TCP;
-	static DeclareMemType MTYPE_IO_BUFFER;
-	static DeclareMemType MTYPE_IO_HTTP_SERVER;
-	static DeclareMemType MTYPE_IO_SD_SERVER;
-	static DeclareMemType MTYPE_IO_SD_CLIENT;
-	static DeclareMemType MTYPE_IO_URL_REQUEST;
-
-	static DeclareMemType MTYPE_DIRECTX_INIT;
-
-	static DeclareMemType MTYPE_TEMP1;
-	static DeclareMemType MTYPE_TEMP2;
-	static DeclareMemType MTYPE_TEMP3;
-	static DeclareMemType MTYPE_TEMP4;
-	static DeclareMemType MTYPE_TEMP5;
-	static DeclareMemType MTYPE_TEMP6;
-	static DeclareMemType MTYPE_TEMP7;
-	static DeclareMemType MTYPE_TEMP8;
-	static DeclareMemType MTYPE_TEMP9;
-
-	static DeclareMemType MTYPE_OTHER; // Special; used by display code
-
-	S32 mTypeIndex;
-};
-
-//----------------------------------------------------------------------------
-
-#endif
-
+/** 
+ * @file llmemtype.h
+ * @brief Runtime memory usage debugging utilities.
+ *
+ * $LicenseInfo:firstyear=2005&license=viewergpl$
+ * 
+ * Copyright (c) 2005-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_MEMTYPE_H
+#define LL_MEMTYPE_H
+
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+
+#include "linden_common.h"
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+// WARNING: Never commit with MEM_TRACK_MEM == 1
+//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+#define MEM_TRACK_MEM (0 && LL_WINDOWS)
+
+#include <vector>
+
+#define MEM_TYPE_NEW(T)
+
+class LL_COMMON_API LLMemType
+{
+public:
+
+	// class we'll initialize all instances of as
+	// static members of MemType.  Then use
+	// to construct any new mem type.
+	class LL_COMMON_API DeclareMemType
+	{
+	public:
+		DeclareMemType(char const * st);
+		~DeclareMemType();
+	
+		S32 mID;
+		char const * mName;
+		
+		// array so we can map an index ID to Name
+		static std::vector<char const *> mNameList;
+	};
+
+	LLMemType(DeclareMemType& dt);
+	~LLMemType();
+
+	static char const * getNameFromID(S32 id);
+
+	static DeclareMemType MTYPE_INIT;
+	static DeclareMemType MTYPE_STARTUP;
+	static DeclareMemType MTYPE_MAIN;
+	static DeclareMemType MTYPE_FRAME;
+
+	static DeclareMemType MTYPE_GATHER_INPUT;
+	static DeclareMemType MTYPE_JOY_KEY;
+
+	static DeclareMemType MTYPE_IDLE;
+	static DeclareMemType MTYPE_IDLE_PUMP;
+	static DeclareMemType MTYPE_IDLE_NETWORK;
+	static DeclareMemType MTYPE_IDLE_UPDATE_REGIONS;
+	static DeclareMemType MTYPE_IDLE_UPDATE_VIEWER_REGION;
+	static DeclareMemType MTYPE_IDLE_UPDATE_SURFACE;
+	static DeclareMemType MTYPE_IDLE_UPDATE_PARCEL_OVERLAY;
+	static DeclareMemType MTYPE_IDLE_AUDIO;
+
+	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING;
+	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_ASKS;
+	static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_REPLIES;
+
+	static DeclareMemType MTYPE_MESSAGE_CHECK_ALL;
+	static DeclareMemType MTYPE_MESSAGE_PROCESS_ACKS;
+
+	static DeclareMemType MTYPE_RENDER;
+	static DeclareMemType MTYPE_SLEEP;
+
+	static DeclareMemType MTYPE_NETWORK;
+	static DeclareMemType MTYPE_PHYSICS;
+	static DeclareMemType MTYPE_INTERESTLIST;
+
+	static DeclareMemType MTYPE_IMAGEBASE;
+	static DeclareMemType MTYPE_IMAGERAW;
+	static DeclareMemType MTYPE_IMAGEFORMATTED;
+	
+	static DeclareMemType MTYPE_APPFMTIMAGE;
+	static DeclareMemType MTYPE_APPRAWIMAGE;
+	static DeclareMemType MTYPE_APPAUXRAWIMAGE;
+	
+	static DeclareMemType MTYPE_DRAWABLE;
+	
+	static DeclareMemType MTYPE_OBJECT;
+	static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE;
+	static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE_CORE;
+
+	static DeclareMemType MTYPE_DISPLAY;
+	static DeclareMemType MTYPE_DISPLAY_UPDATE;
+	static DeclareMemType MTYPE_DISPLAY_UPDATE_CAMERA;
+	static DeclareMemType MTYPE_DISPLAY_UPDATE_GEOM;
+	static DeclareMemType MTYPE_DISPLAY_SWAP;
+	static DeclareMemType MTYPE_DISPLAY_UPDATE_HUD;
+	static DeclareMemType MTYPE_DISPLAY_GEN_REFLECTION;
+	static DeclareMemType MTYPE_DISPLAY_IMAGE_UPDATE;
+	static DeclareMemType MTYPE_DISPLAY_STATE_SORT;
+	static DeclareMemType MTYPE_DISPLAY_SKY;
+	static DeclareMemType MTYPE_DISPLAY_RENDER_GEOM;
+	static DeclareMemType MTYPE_DISPLAY_RENDER_FLUSH;
+	static DeclareMemType MTYPE_DISPLAY_RENDER_UI;
+	static DeclareMemType MTYPE_DISPLAY_RENDER_ATTACHMENTS;
+
+	static DeclareMemType MTYPE_VERTEX_DATA;
+	static DeclareMemType MTYPE_VERTEX_CONSTRUCTOR;
+	static DeclareMemType MTYPE_VERTEX_DESTRUCTOR;
+	static DeclareMemType MTYPE_VERTEX_CREATE_VERTICES;
+	static DeclareMemType MTYPE_VERTEX_CREATE_INDICES;
+	static DeclareMemType MTYPE_VERTEX_DESTROY_BUFFER;	
+	static DeclareMemType MTYPE_VERTEX_DESTROY_INDICES;
+	static DeclareMemType MTYPE_VERTEX_UPDATE_VERTS;
+	static DeclareMemType MTYPE_VERTEX_UPDATE_INDICES;
+	static DeclareMemType MTYPE_VERTEX_ALLOCATE_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_RESIZE_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_VERTICES;
+	static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_INDICES;
+	static DeclareMemType MTYPE_VERTEX_UNMAP_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_SET_STRIDE;
+	static DeclareMemType MTYPE_VERTEX_SET_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_SETUP_VERTEX_BUFFER;
+	static DeclareMemType MTYPE_VERTEX_CLEANUP_CLASS;
+
+	static DeclareMemType MTYPE_SPACE_PARTITION;
+
+	static DeclareMemType MTYPE_PIPELINE;
+	static DeclareMemType MTYPE_PIPELINE_INIT;
+	static DeclareMemType MTYPE_PIPELINE_CREATE_BUFFERS;
+	static DeclareMemType MTYPE_PIPELINE_RESTORE_GL;
+	static DeclareMemType MTYPE_PIPELINE_UNLOAD_SHADERS;
+	static DeclareMemType MTYPE_PIPELINE_LIGHTING_DETAIL;
+	static DeclareMemType MTYPE_PIPELINE_GET_POOL_TYPE;
+	static DeclareMemType MTYPE_PIPELINE_ADD_POOL;
+	static DeclareMemType MTYPE_PIPELINE_ALLOCATE_DRAWABLE;
+	static DeclareMemType MTYPE_PIPELINE_ADD_OBJECT;
+	static DeclareMemType MTYPE_PIPELINE_CREATE_OBJECTS;
+	static DeclareMemType MTYPE_PIPELINE_UPDATE_MOVE;
+	static DeclareMemType MTYPE_PIPELINE_UPDATE_GEOM;
+	static DeclareMemType MTYPE_PIPELINE_MARK_VISIBLE;
+	static DeclareMemType MTYPE_PIPELINE_MARK_MOVED;
+	static DeclareMemType MTYPE_PIPELINE_MARK_SHIFT;
+	static DeclareMemType MTYPE_PIPELINE_SHIFT_OBJECTS;
+	static DeclareMemType MTYPE_PIPELINE_MARK_TEXTURED;
+	static DeclareMemType MTYPE_PIPELINE_MARK_REBUILD;
+	static DeclareMemType MTYPE_PIPELINE_UPDATE_CULL;
+	static DeclareMemType MTYPE_PIPELINE_STATE_SORT;
+	static DeclareMemType MTYPE_PIPELINE_POST_SORT;
+	
+	static DeclareMemType MTYPE_PIPELINE_RENDER_HUD_ELS;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_HL;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_DEFFERRED;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_POST_DEF;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_SHADOW;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_SELECT;
+	static DeclareMemType MTYPE_PIPELINE_REBUILD_POOLS;
+	static DeclareMemType MTYPE_PIPELINE_QUICK_LOOKUP;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_OBJECTS;
+	static DeclareMemType MTYPE_PIPELINE_GENERATE_IMPOSTOR;
+	static DeclareMemType MTYPE_PIPELINE_RENDER_BLOOM;
+
+	static DeclareMemType MTYPE_UPKEEP_POOLS;
+
+	static DeclareMemType MTYPE_AVATAR;
+	static DeclareMemType MTYPE_AVATAR_MESH;
+	static DeclareMemType MTYPE_PARTICLES;
+	static DeclareMemType MTYPE_REGIONS;
+
+	static DeclareMemType MTYPE_INVENTORY;
+	static DeclareMemType MTYPE_INVENTORY_DRAW;
+	static DeclareMemType MTYPE_INVENTORY_BUILD_NEW_VIEWS;
+	static DeclareMemType MTYPE_INVENTORY_DO_FOLDER;
+	static DeclareMemType MTYPE_INVENTORY_POST_BUILD;
+	static DeclareMemType MTYPE_INVENTORY_FROM_XML;
+	static DeclareMemType MTYPE_INVENTORY_CREATE_NEW_ITEM;
+	static DeclareMemType MTYPE_INVENTORY_VIEW_INIT;
+	static DeclareMemType MTYPE_INVENTORY_VIEW_SHOW;
+	static DeclareMemType MTYPE_INVENTORY_VIEW_TOGGLE;
+
+	static DeclareMemType MTYPE_ANIMATION;
+	static DeclareMemType MTYPE_VOLUME;
+	static DeclareMemType MTYPE_PRIMITIVE;
+	
+	static DeclareMemType MTYPE_SCRIPT;
+	static DeclareMemType MTYPE_SCRIPT_RUN;
+	static DeclareMemType MTYPE_SCRIPT_BYTECODE;
+	
+	static DeclareMemType MTYPE_IO_PUMP;
+	static DeclareMemType MTYPE_IO_TCP;
+	static DeclareMemType MTYPE_IO_BUFFER;
+	static DeclareMemType MTYPE_IO_HTTP_SERVER;
+	static DeclareMemType MTYPE_IO_SD_SERVER;
+	static DeclareMemType MTYPE_IO_SD_CLIENT;
+	static DeclareMemType MTYPE_IO_URL_REQUEST;
+
+	static DeclareMemType MTYPE_DIRECTX_INIT;
+
+	static DeclareMemType MTYPE_TEMP1;
+	static DeclareMemType MTYPE_TEMP2;
+	static DeclareMemType MTYPE_TEMP3;
+	static DeclareMemType MTYPE_TEMP4;
+	static DeclareMemType MTYPE_TEMP5;
+	static DeclareMemType MTYPE_TEMP6;
+	static DeclareMemType MTYPE_TEMP7;
+	static DeclareMemType MTYPE_TEMP8;
+	static DeclareMemType MTYPE_TEMP9;
+
+	static DeclareMemType MTYPE_OTHER; // Special; used by display code
+
+	S32 mTypeIndex;
+};
+
+//----------------------------------------------------------------------------
+
+#endif
+
diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h
index 48baa50edbe809cd5a8c4f850966f281ea5f7955..48244480b1276e271669fbfb406db8d97d03098f 100644
--- a/indra/llcommon/llpreprocessor.h
+++ b/indra/llcommon/llpreprocessor.h
@@ -1,168 +1,168 @@
-/** 
- * @file llpreprocessor.h
- * @brief This file should be included in all Linden Lab files and
- * should only contain special preprocessor directives
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LLPREPROCESSOR_H
-#define LLPREPROCESSOR_H
-
-// Figure out endianness of platform
-#ifdef LL_LINUX
-#define __ENABLE_WSTRING
-#include <endian.h>
-#endif	//	LL_LINUX
-
-#if LL_SOLARIS
-#   ifdef  __sparc     // Since we're talking Solaris 10 and up, only 64 bit is supported.
-#      define LL_BIG_ENDIAN 1
-#      define LL_SOLARIS_ALIGNED_CPU 1     //  used to designate issues where SPARC alignment is addressed
-#      define LL_SOLARIS_NON_MESA_GL 1      //  The SPARC GL does not provide a MESA-based GL API
-#   endif
-#   include <sys/isa_defs.h> // ensure we know which end is up
-#endif // LL_SOLARIS
-
-#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386)))
-#define LL_LITTLE_ENDIAN 1
-#else
-#define LL_BIG_ENDIAN 1
-#endif
-
-// Per-compiler switches
-#ifdef __GNUC__
-#define LL_FORCE_INLINE inline __attribute__((always_inline))
-#else
-#define LL_FORCE_INLINE __forceinline
-#endif
-
-// Figure out differences between compilers
-#if defined(__GNUC__)
-	#define GCC_VERSION (__GNUC__ * 10000 \
-						+ __GNUC_MINOR__ * 100 \
-						+ __GNUC_PATCHLEVEL__)
-	#ifndef LL_GNUC
-		#define LL_GNUC 1
-	#endif
-#elif defined(__MSVC_VER__) || defined(_MSC_VER)
-	#ifndef LL_MSVC
-		#define LL_MSVC 1
-	#endif
-	#if _MSC_VER < 1400
-		#define LL_MSVC7 //Visual C++ 2003 or earlier
-	#endif
-#endif
-
-// Deal with minor differences on Unixy OSes.
-#if LL_DARWIN || LL_LINUX
-	// Different name, same functionality.
-	#define stricmp strcasecmp
-	#define strnicmp strncasecmp
-
-	// Not sure why this is different, but...
-	#ifndef MAX_PATH
-		#define MAX_PATH PATH_MAX
-	#endif	//	not MAX_PATH
-
-#endif
-
-
-// Static linking with apr on windows needs to be declared.
-#if LL_WINDOWS && !LL_COMMON_LINK_SHARED
-#ifndef APR_DECLARE_STATIC
-#define APR_DECLARE_STATIC // For APR on Windows
-#endif
-#ifndef APU_DECLARE_STATIC
-#define APU_DECLARE_STATIC // For APR util on Windows
-#endif
-#endif
-
-#if defined(LL_WINDOWS)
-#define BOOST_REGEX_NO_LIB 1
-#define CURL_STATICLIB 1
-#ifndef XML_STATIC
-#define XML_STATIC
-#endif
-#endif	//	LL_WINDOWS
-
-
-// Deal with VC6 problems
-#if LL_MSVC
-#pragma warning( 3	     : 4701 )	// "local variable used without being initialized"  Treat this as level 3, not level 4.
-#pragma warning( 3	     : 4702 )	// "unreachable code"  Treat this as level 3, not level 4.
-#pragma warning( 3	     : 4189 )	// "local variable initialized but not referenced"  Treat this as level 3, not level 4.
-//#pragma warning( 3	: 4018 )	// "signed/unsigned mismatch"  Treat this as level 3, not level 4.
-#pragma warning( 3      :  4263 )	// 'function' : member function does not override any base class virtual member function
-#pragma warning( 3      :  4264 )	// "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
-#pragma warning( 3       : 4265 )	// "class has virtual functions, but destructor is not virtual"
-#pragma warning( 3      :  4266 )	// 'function' : no override available for virtual member function from base 'type'; function is hidden
-#pragma warning( disable : 4284 )	// silly MS warning deep inside their <map> include file
-#pragma warning( disable : 4503 )	// 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
-#pragma warning( disable : 4800 )	// 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
-#pragma warning( disable : 4996 )	// warning: deprecated
-
-// level 4 warnings that we need to disable:
-#pragma warning (disable : 4100) // unreferenced formal parameter
-#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )
-#pragma warning (disable : 4244) // possible loss of data on conversions
-#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
-#pragma warning (disable : 4512) // assignment operator could not be generated
-#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )
-
-#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class
-#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class
-#endif	//	LL_MSVC
-
-#if LL_WINDOWS
-#define LL_DLLEXPORT __declspec(dllexport)
-#define LL_DLLIMPORT __declspec(dllimport)
-#elif LL_LINUX
-#define LL_DLLEXPORT __attribute__ ((visibility("default")))
-#define LL_DLLIMPORT
-#else
-#define LL_DLLEXPORT
-#define LL_DLLIMPORT
-#endif // LL_WINDOWS
-
-#if LL_COMMON_LINK_SHARED
-// CMake automagically defines llcommon_EXPORTS only when building llcommon
-// sources, and only when llcommon is a shared library (i.e. when
-// LL_COMMON_LINK_SHARED). We must still test LL_COMMON_LINK_SHARED because
-// otherwise we can't distinguish between (non-llcommon source) and (llcommon
-// not shared).
-# if defined(llcommon_EXPORTS)
-#   define LL_COMMON_API LL_DLLEXPORT
-# else //llcommon_EXPORTS
-#   define LL_COMMON_API LL_DLLIMPORT
-# endif //llcommon_EXPORTS
-#else // LL_COMMON_LINK_SHARED
-# define LL_COMMON_API
-#endif // LL_COMMON_LINK_SHARED
-
-#endif	//	not LL_LINDEN_PREPROCESSOR_H
+/** 
+ * @file llpreprocessor.h
+ * @brief This file should be included in all Linden Lab files and
+ * should only contain special preprocessor directives
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LLPREPROCESSOR_H
+#define LLPREPROCESSOR_H
+
+// Figure out endianness of platform
+#ifdef LL_LINUX
+#define __ENABLE_WSTRING
+#include <endian.h>
+#endif	//	LL_LINUX
+
+#if LL_SOLARIS
+#   ifdef  __sparc     // Since we're talking Solaris 10 and up, only 64 bit is supported.
+#      define LL_BIG_ENDIAN 1
+#      define LL_SOLARIS_ALIGNED_CPU 1     //  used to designate issues where SPARC alignment is addressed
+#      define LL_SOLARIS_NON_MESA_GL 1      //  The SPARC GL does not provide a MESA-based GL API
+#   endif
+#   include <sys/isa_defs.h> // ensure we know which end is up
+#endif // LL_SOLARIS
+
+#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386)))
+#define LL_LITTLE_ENDIAN 1
+#else
+#define LL_BIG_ENDIAN 1
+#endif
+
+// Per-compiler switches
+#ifdef __GNUC__
+#define LL_FORCE_INLINE inline __attribute__((always_inline))
+#else
+#define LL_FORCE_INLINE __forceinline
+#endif
+
+// Figure out differences between compilers
+#if defined(__GNUC__)
+	#define GCC_VERSION (__GNUC__ * 10000 \
+						+ __GNUC_MINOR__ * 100 \
+						+ __GNUC_PATCHLEVEL__)
+	#ifndef LL_GNUC
+		#define LL_GNUC 1
+	#endif
+#elif defined(__MSVC_VER__) || defined(_MSC_VER)
+	#ifndef LL_MSVC
+		#define LL_MSVC 1
+	#endif
+	#if _MSC_VER < 1400
+		#define LL_MSVC7 //Visual C++ 2003 or earlier
+	#endif
+#endif
+
+// Deal with minor differences on Unixy OSes.
+#if LL_DARWIN || LL_LINUX
+	// Different name, same functionality.
+	#define stricmp strcasecmp
+	#define strnicmp strncasecmp
+
+	// Not sure why this is different, but...
+	#ifndef MAX_PATH
+		#define MAX_PATH PATH_MAX
+	#endif	//	not MAX_PATH
+
+#endif
+
+
+// Static linking with apr on windows needs to be declared.
+#if LL_WINDOWS && !LL_COMMON_LINK_SHARED
+#ifndef APR_DECLARE_STATIC
+#define APR_DECLARE_STATIC // For APR on Windows
+#endif
+#ifndef APU_DECLARE_STATIC
+#define APU_DECLARE_STATIC // For APR util on Windows
+#endif
+#endif
+
+#if defined(LL_WINDOWS)
+#define BOOST_REGEX_NO_LIB 1
+#define CURL_STATICLIB 1
+#ifndef XML_STATIC
+#define XML_STATIC
+#endif
+#endif	//	LL_WINDOWS
+
+
+// Deal with VC6 problems
+#if LL_MSVC
+#pragma warning( 3	     : 4701 )	// "local variable used without being initialized"  Treat this as level 3, not level 4.
+#pragma warning( 3	     : 4702 )	// "unreachable code"  Treat this as level 3, not level 4.
+#pragma warning( 3	     : 4189 )	// "local variable initialized but not referenced"  Treat this as level 3, not level 4.
+//#pragma warning( 3	: 4018 )	// "signed/unsigned mismatch"  Treat this as level 3, not level 4.
+#pragma warning( 3      :  4263 )	// 'function' : member function does not override any base class virtual member function
+#pragma warning( 3      :  4264 )	// "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
+#pragma warning( 3       : 4265 )	// "class has virtual functions, but destructor is not virtual"
+#pragma warning( 3      :  4266 )	// 'function' : no override available for virtual member function from base 'type'; function is hidden
+#pragma warning( disable : 4284 )	// silly MS warning deep inside their <map> include file
+#pragma warning( disable : 4503 )	// 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
+#pragma warning( disable : 4800 )	// 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
+#pragma warning( disable : 4996 )	// warning: deprecated
+
+// level 4 warnings that we need to disable:
+#pragma warning (disable : 4100) // unreferenced formal parameter
+#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )
+#pragma warning (disable : 4244) // possible loss of data on conversions
+#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
+#pragma warning (disable : 4512) // assignment operator could not be generated
+#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )
+
+#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class
+#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class
+#endif	//	LL_MSVC
+
+#if LL_WINDOWS
+#define LL_DLLEXPORT __declspec(dllexport)
+#define LL_DLLIMPORT __declspec(dllimport)
+#elif LL_LINUX
+#define LL_DLLEXPORT __attribute__ ((visibility("default")))
+#define LL_DLLIMPORT
+#else
+#define LL_DLLEXPORT
+#define LL_DLLIMPORT
+#endif // LL_WINDOWS
+
+#if LL_COMMON_LINK_SHARED
+// CMake automagically defines llcommon_EXPORTS only when building llcommon
+// sources, and only when llcommon is a shared library (i.e. when
+// LL_COMMON_LINK_SHARED). We must still test LL_COMMON_LINK_SHARED because
+// otherwise we can't distinguish between (non-llcommon source) and (llcommon
+// not shared).
+# if defined(llcommon_EXPORTS)
+#   define LL_COMMON_API LL_DLLEXPORT
+# else //llcommon_EXPORTS
+#   define LL_COMMON_API LL_DLLIMPORT
+# endif //llcommon_EXPORTS
+#else // LL_COMMON_LINK_SHARED
+# define LL_COMMON_API
+#endif // LL_COMMON_LINK_SHARED
+
+#endif	//	not LL_LINDEN_PREPROCESSOR_H
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 3db5c365454ed056156f3a773068113412acd958..e7ad571a905d793031be93686b6b368a5ba06ec5 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -42,7 +42,8 @@ LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) :
 	LLThread(name),
 	mThreaded(threaded),
 	mIdleThread(TRUE),
-	mNextHandle(0)
+	mNextHandle(0),
+	mStarted(FALSE)
 {
 	if (mThreaded)
 	{
@@ -53,6 +54,10 @@ LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) :
 // MAIN THREAD
 LLQueuedThread::~LLQueuedThread()
 {
+	if (!mThreaded)
+	{
+		endThread();
+	}
 	shutdown();
 	// ~LLThread() will be called here
 }
@@ -106,6 +111,14 @@ void LLQueuedThread::shutdown()
 // virtual
 S32 LLQueuedThread::update(U32 max_time_ms)
 {
+	if (!mStarted)
+	{
+		if (!mThreaded)
+		{
+			startThread();
+			mStarted = TRUE;
+		}
+	}
 	return updateQueue(max_time_ms);
 }
 
@@ -452,26 +465,12 @@ S32 LLQueuedThread::processNextRequest()
 		}
 	}
 
-	S32 res;
 	S32 pending = getPending();
-	if (pending == 0)
-	{
-		if (isQuitting())
-		{
-			res = -1; // exit thread
-		}
-		else
-		{
-			res = 0;
-		}
-	}
-	else
-	{
-		res = pending;
-	}
-	return res;
+
+	return pending;
 }
 
+// virtual
 bool LLQueuedThread::runCondition()
 {
 	// mRunCondition must be locked here
@@ -481,35 +480,53 @@ bool LLQueuedThread::runCondition()
 		return true;
 }
 
+// virtual
 void LLQueuedThread::run()
 {
+	// call checPause() immediately so we don't try to do anything before the class is fully constructed
+	checkPause();
+	startThread();
+	mStarted = TRUE;
+	
 	while (1)
 	{
 		// this will block on the condition until runCondition() returns true, the thread is unpaused, or the thread leaves the RUNNING state.
 		checkPause();
 		
-		if(isQuitting())
+		if (isQuitting())
+		{
+			endThread();
 			break;
-
-		//llinfos << "QUEUED THREAD RUNNING, queue size = " << mRequestQueue.size() << llendl;
+		}
 
 		mIdleThread = FALSE;
+
+		threadedUpdate();
 		
 		int res = processNextRequest();
 		if (res == 0)
 		{
 			mIdleThread = TRUE;
+			ms_sleep(1);
 		}
-		
-		if (res < 0) // finished working and want to exit
-		{
-			break;
-		}
-
 		//LLThread::yield(); // thread should yield after each request		
 	}
+	llinfos << "LLQueuedThread " << mName << " EXITING." << llendl;
+}
+
+// virtual
+void LLQueuedThread::startThread()
+{
+}
 
-	llinfos << "QUEUED THREAD " << mName << " EXITING." << llendl;
+// virtual
+void LLQueuedThread::endThread()
+{
+}
+
+// virtual
+void LLQueuedThread::threadedUpdate()
+{
 }
 
 //============================================================================
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
index 8bfa5632a162ee4da4f0cd8587bb316c6914fe76..9a9dbb18cc3c56608924eca155a04c6dce30b5f8 100644
--- a/indra/llcommon/llqueuedthread.h
+++ b/indra/llcommon/llqueuedthread.h
@@ -166,6 +166,9 @@ class LL_COMMON_API LLQueuedThread : public LLThread
 
 	virtual bool runCondition(void);
 	virtual void run(void);
+	virtual void startThread(void);
+	virtual void endThread(void);
+	virtual void threadedUpdate(void);
 
 protected:
 	handle_t generateHandle();
@@ -200,6 +203,7 @@ class LL_COMMON_API LLQueuedThread : public LLThread
 	
 protected:
 	BOOL mThreaded;  // if false, run on main thread and do updates during update()
+	BOOL mStarted;  // required when mThreaded is false to call startThread() from update()
 	LLAtomic32<BOOL> mIdleThread; // request queue is empty (or we are quitting) and the thread is idle
 	
 	typedef std::set<QueuedRequest*, queued_request_less> request_queue_t;
diff --git a/indra/llcommon/llstacktrace.cpp b/indra/llcommon/llstacktrace.cpp
index 3cb074257bc8927e6f05e53c1aa3161f18707a94..6558df70a42cc4d92098f6b77507756e96155cd5 100644
--- a/indra/llcommon/llstacktrace.cpp
+++ b/indra/llcommon/llstacktrace.cpp
@@ -1,142 +1,142 @@
-/** 
- * @file llstacktrace.cpp
- * @brief stack tracing functionality
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-#include "llstacktrace.h"
-
-#ifdef LL_WINDOWS
-
-#include <iostream>
-#include <sstream>
-
-#include "windows.h"
-#include "Dbghelp.h"
-
-typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
-    IN ULONG frames_to_skip,
-    IN ULONG frames_to_capture,
-    OUT PVOID *backtrace,
-    OUT PULONG backtrace_hash);
-
-static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
-   (RtlCaptureStackBackTrace_Function*)
-   GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
-
-bool ll_get_stack_trace(std::vector<std::string>& lines)
-{
-	const S32 MAX_STACK_DEPTH = 32;
-	const S32 STRING_NAME_LENGTH = 200;
-	const S32 FRAME_SKIP = 2;
-	static BOOL symbolsLoaded = false;
-	static BOOL firstCall = true;
-
-	HANDLE hProc = GetCurrentProcess();
-
-	// load the symbols if they're not loaded
-	if(!symbolsLoaded && firstCall)
-	{
-		symbolsLoaded = SymInitialize(hProc, NULL, true);
-		firstCall = false;
-	}
-
-	// if loaded, get the call stack
-	if(symbolsLoaded)
-	{
-		// create the frames to hold the addresses
-		void* frames[MAX_STACK_DEPTH];
-		memset(frames, 0, sizeof(void*)*MAX_STACK_DEPTH);
-		S32 depth = 0;
-
-		// get the addresses
-		depth = RtlCaptureStackBackTrace_fn(FRAME_SKIP, MAX_STACK_DEPTH, frames, NULL);
-
-		IMAGEHLP_LINE64 line;
-		memset(&line, 0, sizeof(IMAGEHLP_LINE64));
-		line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
-
-		// create something to hold address info
-		PIMAGEHLP_SYMBOL64 pSym;
-		pSym = (PIMAGEHLP_SYMBOL64)malloc(sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
-		memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
-		pSym->MaxNameLength = STRING_NAME_LENGTH;
-		pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
-
-		// get address info for each address frame
-		// and store
-		for(S32 i=0; i < depth; i++)
-		{
-			std::stringstream stack_line;
-			BOOL ret;
-
-			DWORD64 addr = (DWORD64)frames[i];
-			ret = SymGetSymFromAddr64(hProc, addr, 0, pSym);
-			if(ret)
-			{
-				stack_line << pSym->Name << " ";
-			}
-
-			DWORD dummy;
-			ret = SymGetLineFromAddr64(hProc, addr, &dummy, &line);
-			if(ret)
-			{
-				std::string file_name = line.FileName;
-				std::string::size_type index = file_name.rfind("\\");
-				stack_line << file_name.substr(index + 1, file_name.size()) << ":" << line.LineNumber; 
-			}
-
-			lines.push_back(stack_line.str());
-		}
-		
-		free(pSym);
-
-		// TODO: figure out a way to cleanup symbol loading
-		// Not hugely necessary, however.
-		//SymCleanup(hProc);
-		return true;
-	}
-	else
-	{
-		lines.push_back("Stack Trace Failed.  PDB symbol info not loaded");
-	}
-
-	return false;
-}
-
-#else
-
-bool ll_get_stack_trace(std::vector<std::string>& lines)
-{
-	return false;
-}
-
-#endif
-
+/** 
+ * @file llstacktrace.cpp
+ * @brief stack tracing functionality
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "llstacktrace.h"
+
+#ifdef LL_WINDOWS
+
+#include <iostream>
+#include <sstream>
+
+#include "windows.h"
+#include "Dbghelp.h"
+
+typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
+    IN ULONG frames_to_skip,
+    IN ULONG frames_to_capture,
+    OUT PVOID *backtrace,
+    OUT PULONG backtrace_hash);
+
+static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
+   (RtlCaptureStackBackTrace_Function*)
+   GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
+
+bool ll_get_stack_trace(std::vector<std::string>& lines)
+{
+	const S32 MAX_STACK_DEPTH = 32;
+	const S32 STRING_NAME_LENGTH = 200;
+	const S32 FRAME_SKIP = 2;
+	static BOOL symbolsLoaded = false;
+	static BOOL firstCall = true;
+
+	HANDLE hProc = GetCurrentProcess();
+
+	// load the symbols if they're not loaded
+	if(!symbolsLoaded && firstCall)
+	{
+		symbolsLoaded = SymInitialize(hProc, NULL, true);
+		firstCall = false;
+	}
+
+	// if loaded, get the call stack
+	if(symbolsLoaded)
+	{
+		// create the frames to hold the addresses
+		void* frames[MAX_STACK_DEPTH];
+		memset(frames, 0, sizeof(void*)*MAX_STACK_DEPTH);
+		S32 depth = 0;
+
+		// get the addresses
+		depth = RtlCaptureStackBackTrace_fn(FRAME_SKIP, MAX_STACK_DEPTH, frames, NULL);
+
+		IMAGEHLP_LINE64 line;
+		memset(&line, 0, sizeof(IMAGEHLP_LINE64));
+		line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
+
+		// create something to hold address info
+		PIMAGEHLP_SYMBOL64 pSym;
+		pSym = (PIMAGEHLP_SYMBOL64)malloc(sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
+		memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
+		pSym->MaxNameLength = STRING_NAME_LENGTH;
+		pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
+
+		// get address info for each address frame
+		// and store
+		for(S32 i=0; i < depth; i++)
+		{
+			std::stringstream stack_line;
+			BOOL ret;
+
+			DWORD64 addr = (DWORD64)frames[i];
+			ret = SymGetSymFromAddr64(hProc, addr, 0, pSym);
+			if(ret)
+			{
+				stack_line << pSym->Name << " ";
+			}
+
+			DWORD dummy;
+			ret = SymGetLineFromAddr64(hProc, addr, &dummy, &line);
+			if(ret)
+			{
+				std::string file_name = line.FileName;
+				std::string::size_type index = file_name.rfind("\\");
+				stack_line << file_name.substr(index + 1, file_name.size()) << ":" << line.LineNumber; 
+			}
+
+			lines.push_back(stack_line.str());
+		}
+		
+		free(pSym);
+
+		// TODO: figure out a way to cleanup symbol loading
+		// Not hugely necessary, however.
+		//SymCleanup(hProc);
+		return true;
+	}
+	else
+	{
+		lines.push_back("Stack Trace Failed.  PDB symbol info not loaded");
+	}
+
+	return false;
+}
+
+#else
+
+bool ll_get_stack_trace(std::vector<std::string>& lines)
+{
+	return false;
+}
+
+#endif
+
diff --git a/indra/llcommon/llstacktrace.h b/indra/llcommon/llstacktrace.h
index b84b1aa6ade73d81ad6fb642f37b46c7904fbadb..9f857f0fd3fc3bf4872340b19a28d311d0ee4af9 100644
--- a/indra/llcommon/llstacktrace.h
+++ b/indra/llcommon/llstacktrace.h
@@ -1,44 +1,44 @@
-/** 
- * @file llstacktrace.h
- * @brief stack trace functions
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-
-#ifndef LL_LLSTACKTRACE_H
-#define LL_LLSTACKTRACE_H
-
-#include "stdtypes.h"
-#include <vector>
-#include <string>
-
-LL_COMMON_API bool ll_get_stack_trace(std::vector<std::string>& lines);
-
-#endif
-
+/** 
+ * @file llstacktrace.h
+ * @brief stack trace functions
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#ifndef LL_LLSTACKTRACE_H
+#define LL_LLSTACKTRACE_H
+
+#include "stdtypes.h"
+#include <vector>
+#include <string>
+
+LL_COMMON_API bool ll_get_stack_trace(std::vector<std::string>& lines);
+
+#endif
+
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index edbb007f61c852bb09154ae60241ee26b776d418..31e70e0fe4d950989d3de39ae10991f9cc5bdf38 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -1,1300 +1,1300 @@
-/** 
- * @file llstring.h
- * @brief String utility functions and std::string class.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLSTRING_H
-#define LL_LLSTRING_H
-
-#include <string>
-#include <cstdio>
-#include <locale>
-#include <iomanip>
-#include "llsd.h"
-#include "llfasttimer.h"
-
-#if LL_LINUX || LL_SOLARIS
-#include <wctype.h>
-#include <wchar.h>
-#endif
-
-#include <string.h>
-
-#if LL_SOLARIS
-// stricmp and strnicmp do not exist on Solaris:
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-#endif
-
-const char LL_UNKNOWN_CHAR = '?';
-
-#if LL_DARWIN || LL_LINUX || LL_SOLARIS
-// Template specialization of char_traits for U16s. Only necessary on Mac and Linux (exists on Windows already)
-#include <cstring>
-
-namespace std
-{
-template<>
-struct char_traits<U16>
-{
-	typedef U16 		char_type;
-	typedef int 	    int_type;
-	typedef streampos 	pos_type;
-	typedef streamoff 	off_type;
-	typedef mbstate_t 	state_type;
-	
-	static void 
-		assign(char_type& __c1, const char_type& __c2)
-	{ __c1 = __c2; }
-	
-	static bool 
-		eq(const char_type& __c1, const char_type& __c2)
-	{ return __c1 == __c2; }
-	
-	static bool 
-		lt(const char_type& __c1, const char_type& __c2)
-	{ return __c1 < __c2; }
-	
-	static int 
-		compare(const char_type* __s1, const char_type* __s2, size_t __n)
-	{ return memcmp(__s1, __s2, __n * sizeof(char_type)); }
-	
-	static size_t
-		length(const char_type* __s)
-	{
-		const char_type *cur_char = __s;
-		while (*cur_char != 0)
-		{
-			++cur_char;
-		}
-		return cur_char - __s;
-	}
-	
-	static const char_type* 
-		find(const char_type* __s, size_t __n, const char_type& __a)
-	{ return static_cast<const char_type*>(memchr(__s, __a, __n * sizeof(char_type))); }
-	
-	static char_type* 
-		move(char_type* __s1, const char_type* __s2, size_t __n)
-	{ return static_cast<char_type*>(memmove(__s1, __s2, __n * sizeof(char_type))); }
-	
-	static char_type* 
-		copy(char_type* __s1, const char_type* __s2, size_t __n)
-	{  return static_cast<char_type*>(memcpy(__s1, __s2, __n * sizeof(char_type))); }	/* Flawfinder: ignore */
-	
-	static char_type* 
-		assign(char_type* __s, size_t __n, char_type __a)
-	{ 
-		// This isn't right.
-		//return static_cast<char_type*>(memset(__s, __a, __n * sizeof(char_type))); 
-		
-		// I don't think there's a standard 'memset' for 16-bit values.
-		// Do this the old-fashioned way.
-		
-		size_t __i;
-		for(__i = 0; __i < __n; __i++)
-		{
-			__s[__i] = __a;
-		}
-		return __s; 
-	}
-	
-	static char_type 
-		to_char_type(const int_type& __c)
-	{ return static_cast<char_type>(__c); }
-	
-	static int_type 
-		to_int_type(const char_type& __c)
-	{ return static_cast<int_type>(__c); }
-	
-	static bool 
-		eq_int_type(const int_type& __c1, const int_type& __c2)
-	{ return __c1 == __c2; }
-	
-	static int_type 
-		eof() { return static_cast<int_type>(EOF); }
-	
-	static int_type 
-		not_eof(const int_type& __c)
-      { return (__c == eof()) ? 0 : __c; }
-  };
-};
-#endif
-
-class LL_COMMON_API LLStringOps
-{
-private:
-	static long sPacificTimeOffset;
-	static long sLocalTimeOffset;
-	static bool sPacificDaylightTime;
-	static std::map<std::string, std::string> datetimeToCodes;
-
-public:
-	static char toUpper(char elem) { return toupper((unsigned char)elem); }
-	static llwchar toUpper(llwchar elem) { return towupper(elem); }
-	
-	static char toLower(char elem) { return tolower((unsigned char)elem); }
-	static llwchar toLower(llwchar elem) { return towlower(elem); }
-
-	static bool isSpace(char elem) { return isspace((unsigned char)elem) != 0; }
-	static bool isSpace(llwchar elem) { return iswspace(elem) != 0; }
-
-	static bool isUpper(char elem) { return isupper((unsigned char)elem) != 0; }
-	static bool isUpper(llwchar elem) { return iswupper(elem) != 0; }
-
-	static bool isLower(char elem) { return islower((unsigned char)elem) != 0; }
-	static bool isLower(llwchar elem) { return iswlower(elem) != 0; }
-
-	static bool isDigit(char a) { return isdigit((unsigned char)a) != 0; }
-	static bool isDigit(llwchar a) { return iswdigit(a) != 0; }
-
-	static bool isPunct(char a) { return ispunct((unsigned char)a) != 0; }
-	static bool isPunct(llwchar a) { return iswpunct(a) != 0; }
-
-	static bool isAlnum(char a) { return isalnum((unsigned char)a) != 0; }
-	static bool isAlnum(llwchar a) { return iswalnum(a) != 0; }
-
-	static S32	collate(const char* a, const char* b) { return strcoll(a, b); }
-	static S32	collate(const llwchar* a, const llwchar* b);
-
-	static void setupDatetimeInfo(bool pacific_daylight_time);
-	static long getPacificTimeOffset(void) { return sPacificTimeOffset;}
-	static long getLocalTimeOffset(void) { return sLocalTimeOffset;}
-	// Is the Pacific time zone (aka server time zone)
-	// currently in daylight savings time?
-	static bool getPacificDaylightTime(void) { return sPacificDaylightTime;}
-
-	static std::string getDatetimeCode (std::string key);
-};
-
-/**
- * @brief Return a string constructed from in without crashing if the
- * pointer is NULL.
- */
-LL_COMMON_API std::string ll_safe_string(const char* in);
-LL_COMMON_API std::string ll_safe_string(const char* in, S32 maxlen);
-
-
-// Allowing assignments from non-strings into format_map_t is apparently
-// *really* error-prone, so subclass std::string with just basic c'tors.
-class LLFormatMapString
-{
-public:
-	LLFormatMapString() {};
-	LLFormatMapString(const char* s) : mString(ll_safe_string(s)) {};
-	LLFormatMapString(const std::string& s) : mString(s) {};
-	operator std::string() const { return mString; }
-	bool operator<(const LLFormatMapString& rhs) const { return mString < rhs.mString; }
-	std::size_t length() const { return mString.length(); }
-	
-private:
-	std::string mString;
-};
-
-template <class T>
-class LLStringUtilBase
-{
-private:
-	static std::string sLocale;
-
-public:
-	typedef typename std::basic_string<T>::size_type size_type;
-	
-public:
-	/////////////////////////////////////////////////////////////////////////////////////////
-	// Static Utility functions that operate on std::strings
-
-	static std::basic_string<T> null;
-	
-	typedef std::map<LLFormatMapString, LLFormatMapString> format_map_t;
-	LL_COMMON_API static void getTokens(const std::basic_string<T>& instr, std::vector<std::basic_string<T> >& tokens, const std::basic_string<T>& delims);
-	LL_COMMON_API static void formatNumber(std::basic_string<T>& numStr, std::basic_string<T> decimals);
-	LL_COMMON_API static bool formatDatetime(std::basic_string<T>& replacement, std::basic_string<T> token, std::basic_string<T> param, S32 secFromEpoch);
-	LL_COMMON_API static S32 format(std::basic_string<T>& s, const format_map_t& substitutions);
-	LL_COMMON_API static S32 format(std::basic_string<T>& s, const LLSD& substitutions);
-	LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const format_map_t& substitutions);
-	LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const LLSD& substitutions);
-	static void setLocale (std::string inLocale) {sLocale = inLocale;};
-	static std::string getLocale (void) {return sLocale;};
-	
-	static bool isValidIndex(const std::basic_string<T>& string, size_type i)
-	{
-		return !string.empty() && (0 <= i) && (i <= string.size());
-	}
-
-	static void	trimHead(std::basic_string<T>& string);
-	static void	trimTail(std::basic_string<T>& string);
-	static void	trim(std::basic_string<T>& string)	{ trimHead(string); trimTail(string); }
-	static void truncate(std::basic_string<T>& string, size_type count);
-
-	static void	toUpper(std::basic_string<T>& string);
-	static void	toLower(std::basic_string<T>& string);
-	
-	// True if this is the head of s.
-	static BOOL	isHead( const std::basic_string<T>& string, const T* s ); 
-
-	/**
-	 * @brief Returns true if string starts with substr
-	 *
-	 * If etither string or substr are empty, this method returns false.
-	 */
-	static bool startsWith(
-		const std::basic_string<T>& string,
-		const std::basic_string<T>& substr);
-
-	/**
-	 * @brief Returns true if string ends in substr
-	 *
-	 * If etither string or substr are empty, this method returns false.
-	 */
-	static bool endsWith(
-		const std::basic_string<T>& string,
-		const std::basic_string<T>& substr);
-
-	static void	addCRLF(std::basic_string<T>& string);
-	static void	removeCRLF(std::basic_string<T>& string);
-
-	static void	replaceTabsWithSpaces( std::basic_string<T>& string, size_type spaces_per_tab );
-	static void	replaceNonstandardASCII( std::basic_string<T>& string, T replacement );
-	static void	replaceChar( std::basic_string<T>& string, T target, T replacement );
-	static void replaceString( std::basic_string<T>& string, std::basic_string<T> target, std::basic_string<T> replacement );
-	
-	static BOOL	containsNonprintable(const std::basic_string<T>& string);
-	static void	stripNonprintable(std::basic_string<T>& string);
-
-	/**
-	 * @brief Unsafe way to make ascii characters. You should probably
-	 * only call this when interacting with the host operating system.
-	 * The 1 byte std::string does not work correctly.
-	 * The 2 and 4 byte std::string probably work, so LLWStringUtil::_makeASCII
-	 * should work.
-	 */
-	static void _makeASCII(std::basic_string<T>& string);
-
-	// Conversion to other data types
-	static BOOL	convertToBOOL(const std::basic_string<T>& string, BOOL& value);
-	static BOOL	convertToU8(const std::basic_string<T>& string, U8& value);
-	static BOOL	convertToS8(const std::basic_string<T>& string, S8& value);
-	static BOOL	convertToS16(const std::basic_string<T>& string, S16& value);
-	static BOOL	convertToU16(const std::basic_string<T>& string, U16& value);
-	static BOOL	convertToU32(const std::basic_string<T>& string, U32& value);
-	static BOOL	convertToS32(const std::basic_string<T>& string, S32& value);
-	static BOOL	convertToF32(const std::basic_string<T>& string, F32& value);
-	static BOOL	convertToF64(const std::basic_string<T>& string, F64& value);
-
-	/////////////////////////////////////////////////////////////////////////////////////////
-	// Utility functions for working with char*'s and strings
-
-	// Like strcmp but also handles empty strings. Uses
-	// current locale.
-	static S32		compareStrings(const T* lhs, const T* rhs);
-	static S32		compareStrings(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs);
-	
-	// case insensitive version of above. Uses current locale on
-	// Win32, and falls back to a non-locale aware comparison on
-	// Linux.
-	static S32		compareInsensitive(const T* lhs, const T* rhs);
-	static S32		compareInsensitive(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs);
-
-	// Case sensitive comparison with good handling of numbers.  Does not use current locale.
-	// a.k.a. strdictcmp()
-	static S32		compareDict(const std::basic_string<T>& a, const std::basic_string<T>& b);
-
-	// Case *in*sensitive comparison with good handling of numbers.  Does not use current locale.
-	// a.k.a. strdictcmp()
-	static S32		compareDictInsensitive(const std::basic_string<T>& a, const std::basic_string<T>& b);
-
-	// Puts compareDict() in a form appropriate for LL container classes to use for sorting.
-	static BOOL		precedesDict( const std::basic_string<T>& a, const std::basic_string<T>& b );
-
-	// A replacement for strncpy.
-	// If the dst buffer is dst_size bytes long or more, ensures that dst is null terminated and holds
-	// up to dst_size-1 characters of src.
-	static void		copy(T* dst, const T* src, size_type dst_size);
-	
-	// Copies src into dst at a given offset.  
-	static void		copyInto(std::basic_string<T>& dst, const std::basic_string<T>& src, size_type offset);
-	
-	static bool		isPartOfWord(T c) { return (c == (T)'_') || LLStringOps::isAlnum(c); }
-
-
-#ifdef _DEBUG	
-	LL_COMMON_API static void		testHarness();
-#endif
-
-private:
-	LL_COMMON_API static size_type getSubstitution(const std::basic_string<T>& instr, size_type& start, std::vector<std::basic_string<T> >& tokens);
-};
-
-template<class T> std::basic_string<T> LLStringUtilBase<T>::null;
-template<class T> std::string LLStringUtilBase<T>::sLocale;
-
-typedef LLStringUtilBase<char> LLStringUtil;
-typedef LLStringUtilBase<llwchar> LLWStringUtil;
-typedef std::basic_string<llwchar> LLWString;
-
-//@ Use this where we want to disallow input in the form of "foo"
-//  This is used to catch places where english text is embedded in the code
-//  instead of in a translatable XUI file.
-class LLStringExplicit : public std::string
-{
-public:
-	explicit LLStringExplicit(const char* s) : std::string(s) {}
-	LLStringExplicit(const std::string& s) : std::string(s) {}
-	LLStringExplicit(const std::string& s, size_type pos, size_type n = std::string::npos) : std::string(s, pos, n) {}
-};
-
-struct LLDictionaryLess
-{
-public:
-	bool operator()(const std::string& a, const std::string& b)
-	{
-		return (LLStringUtil::precedesDict(a, b) ? true : false);
-	}
-};
-
-
-/**
- * Simple support functions
- */
-
-/**
- * @brief chop off the trailing characters in a string.
- *
- * This function works on bytes rather than glyphs, so this will
- * incorrectly truncate non-single byte strings.
- * Use utf8str_truncate() for utf8 strings
- * @return a copy of in string minus the trailing count bytes.
- */
-inline std::string chop_tail_copy(
-	const std::string& in,
-	std::string::size_type count)
-{
-	return std::string(in, 0, in.length() - count);
-}
-
-/**
- * @brief This translates a nybble stored as a hex value from 0-f back
- * to a nybble in the low order bits of the return byte.
- */
-LL_COMMON_API U8 hex_as_nybble(char hex);
-
-/**
- * @brief read the contents of a file into a string.
- *
- * Since this function has no concept of character encoding, most
- * anything you do with this method ill-advised. Please avoid.
- * @param str [out] The string which will have.
- * @param filename The full name of the file to read.
- * @return Returns true on success. If false, str is unmodified.
- */
-LL_COMMON_API bool _read_file_into_string(std::string& str, const std::string& filename);
-LL_COMMON_API bool iswindividual(llwchar elem);
-
-/**
- * Unicode support
- */
-
-// Make the incoming string a utf8 string. Replaces any unknown glyph
-// with the UNKOWN_CHARACTER. Once any unknown glph is found, the rest
-// of the data may not be recovered.
-LL_COMMON_API std::string rawstr_to_utf8(const std::string& raw);
-
-//
-// We should never use UTF16 except when communicating with Win32!
-//
-typedef std::basic_string<U16> llutf16string;
-
-LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str, S32 len);
-LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str);
-
-LL_COMMON_API llutf16string wstring_to_utf16str(const LLWString &utf32str, S32 len);
-LL_COMMON_API llutf16string wstring_to_utf16str(const LLWString &utf32str);
-
-LL_COMMON_API llutf16string utf8str_to_utf16str ( const std::string& utf8str, S32 len);
-LL_COMMON_API llutf16string utf8str_to_utf16str ( const std::string& utf8str );
-
-LL_COMMON_API LLWString utf8str_to_wstring(const std::string &utf8str, S32 len);
-LL_COMMON_API LLWString utf8str_to_wstring(const std::string &utf8str);
-// Same function, better name. JC
-inline LLWString utf8string_to_wstring(const std::string& utf8_string) { return utf8str_to_wstring(utf8_string); }
-
-//
-LL_COMMON_API S32 wchar_to_utf8chars(llwchar inchar, char* outchars);
-
-LL_COMMON_API std::string wstring_to_utf8str(const LLWString &utf32str, S32 len);
-LL_COMMON_API std::string wstring_to_utf8str(const LLWString &utf32str);
-
-LL_COMMON_API std::string utf16str_to_utf8str(const llutf16string &utf16str, S32 len);
-LL_COMMON_API std::string utf16str_to_utf8str(const llutf16string &utf16str);
-
-// Length of this UTF32 string in bytes when transformed to UTF8
-LL_COMMON_API S32 wstring_utf8_length(const LLWString& wstr); 
-
-// Length in bytes of this wide char in a UTF8 string
-LL_COMMON_API S32 wchar_utf8_length(const llwchar wc); 
-
-LL_COMMON_API std::string utf8str_tolower(const std::string& utf8str);
-
-// Length in llwchar (UTF-32) of the first len units (16 bits) of the given UTF-16 string.
-LL_COMMON_API S32 utf16str_wstring_length(const llutf16string &utf16str, S32 len);
-
-// Length in utf16string (UTF-16) of wlen wchars beginning at woffset.
-LL_COMMON_API S32 wstring_utf16_length(const LLWString & wstr, S32 woffset, S32 wlen);
-
-// Length in wstring (i.e., llwchar count) of a part of a wstring specified by utf16 length (i.e., utf16 units.)
-LL_COMMON_API S32 wstring_wstring_length_from_utf16_length(const LLWString & wstr, S32 woffset, S32 utf16_length, BOOL *unaligned = NULL);
-
-/**
- * @brief Properly truncate a utf8 string to a maximum byte count.
- * 
- * The returned string may be less than max_len if the truncation
- * happens in the middle of a glyph. If max_len is longer than the
- * string passed in, the return value == utf8str.
- * @param utf8str A valid utf8 string to truncate.
- * @param max_len The maximum number of bytes in the return value.
- * @return Returns a valid utf8 string with byte count <= max_len.
- */
-LL_COMMON_API std::string utf8str_truncate(const std::string& utf8str, const S32 max_len);
-
-LL_COMMON_API std::string utf8str_trim(const std::string& utf8str);
-
-LL_COMMON_API S32 utf8str_compare_insensitive(
-	const std::string& lhs,
-	const std::string& rhs);
-
-/**
- * @brief Replace all occurences of target_char with replace_char
- *
- * @param utf8str A utf8 string to process.
- * @param target_char The wchar to be replaced
- * @param replace_char The wchar which is written on replace
- */
-LL_COMMON_API std::string utf8str_substChar(
-	const std::string& utf8str,
-	const llwchar target_char,
-	const llwchar replace_char);
-
-LL_COMMON_API std::string utf8str_makeASCII(const std::string& utf8str);
-
-// Hack - used for evil notecards.
-LL_COMMON_API std::string mbcsstring_makeASCII(const std::string& str); 
-
-LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str);
-
-
-#if LL_WINDOWS
-/* @name Windows string helpers
- */
-//@{
-
-/**
- * @brief Implementation the expected snprintf interface.
- *
- * If the size of the passed in buffer is not large enough to hold the string,
- * two bad things happen:
- * 1. resulting formatted string is NOT null terminated
- * 2. Depending on the platform, the return value could be a) the required
- *    size of the buffer to copy the entire formatted string or b) -1.
- *    On Windows with VS.Net 2003, it returns -1 e.g. 
- *
- * safe_snprintf always adds a NULL terminator so that the caller does not
- * need to check for return value or need to add the NULL terminator.
- * It does not, however change the return value - to let the caller know
- * that the passed in buffer size was not large enough to hold the
- * formatted string.
- *
- */
-
-// Deal with the differeneces on Windows
-namespace snprintf_hack
-{
-	LL_COMMON_API int snprintf(char *str, size_t size, const char *format, ...);
-}
-
-using snprintf_hack::snprintf;
-
-/**
- * @brief Convert a wide string to std::string
- *
- * This replaces the unsafe W2A macro from ATL.
- */
-LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in);
-
-//@}
-#endif // LL_WINDOWS
-
-/**
- * Many of the 'strip' and 'replace' methods of LLStringUtilBase need
- * specialization to work with the signed char type.
- * Sadly, it is not possible (AFAIK) to specialize a single method of
- * a template class.
- * That stuff should go here.
- */
-namespace LLStringFn
-{
-	/**
-	 * @brief Replace all non-printable characters with replacement in
-	 * string.
-	 * NOTE - this will zap non-ascii
-	 *
-	 * @param [in,out] string the to modify. out value is the string
-	 * with zero non-printable characters.
-	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
-	 */
-	LL_COMMON_API void replace_nonprintable_in_ascii(
-		std::basic_string<char>& string,
-		char replacement);
-
-
-	/**
-	 * @brief Replace all non-printable characters and pipe characters
-	 * with replacement in a string.
-	 * NOTE - this will zap non-ascii
-	 *
-	 * @param [in,out] the string to modify. out value is the string
-	 * with zero non-printable characters and zero pipe characters.
-	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
-	 */
-	LL_COMMON_API void replace_nonprintable_and_pipe_in_ascii(std::basic_string<char>& str,
-									   char replacement);
-
-
-	/**
-	 * @brief Remove all characters that are not allowed in XML 1.0.
-	 * Returns a copy of the string with those characters removed.
-	 * Works with US ASCII and UTF-8 encoded strings.  JC
-	 */
-	LL_COMMON_API std::string strip_invalid_xml(const std::string& input);
-
-
-	/**
-	 * @brief Replace all control characters (0 <= c < 0x20) with replacement in
-	 * string.   This is safe for utf-8
-	 *
-	 * @param [in,out] string the to modify. out value is the string
-	 * with zero non-printable characters.
-	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
-	 */
-	LL_COMMON_API void replace_ascii_controlchars(
-		std::basic_string<char>& string,
-		char replacement);
-}
-
-////////////////////////////////////////////////////////////
-// NOTE: LLStringUtil::format, getTokens, and support functions moved to llstring.cpp.
-// There is no LLWStringUtil::format implementation currently.
-// Calling thse for anything other than LLStringUtil will produce link errors.
-
-////////////////////////////////////////////////////////////
-
-
-// static
-template<class T> 
-S32 LLStringUtilBase<T>::compareStrings(const T* lhs, const T* rhs)
-{	
-	S32 result;
-	if( lhs == rhs )
-	{
-		result = 0;
-	}
-	else
-	if ( !lhs || !lhs[0] )
-	{
-		result = ((!rhs || !rhs[0]) ? 0 : 1);
-	}
-	else
-	if ( !rhs || !rhs[0])
-	{
-		result = -1;
-	}
-	else
-	{
-		result = LLStringOps::collate(lhs, rhs);
-	}
-	return result;
-}
-
-//static 
-template<class T> 
-S32 LLStringUtilBase<T>::compareStrings(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs)
-{
-	return LLStringOps::collate(lhs.c_str(), rhs.c_str());
-}
-
-// static
-template<class T> 
-S32 LLStringUtilBase<T>::compareInsensitive(const T* lhs, const T* rhs )
-{
-	S32 result;
-	if( lhs == rhs )
-	{
-		result = 0;
-	}
-	else
-	if ( !lhs || !lhs[0] )
-	{
-		result = ((!rhs || !rhs[0]) ? 0 : 1);
-	}
-	else
-	if ( !rhs || !rhs[0] )
-	{
-		result = -1;
-	}
-	else
-	{
-		std::basic_string<T> lhs_string(lhs);
-		std::basic_string<T> rhs_string(rhs);
-		LLStringUtilBase<T>::toUpper(lhs_string);
-		LLStringUtilBase<T>::toUpper(rhs_string);
-		result = LLStringOps::collate(lhs_string.c_str(), rhs_string.c_str());
-	}
-	return result;
-}
-
-//static 
-template<class T> 
-S32 LLStringUtilBase<T>::compareInsensitive(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs)
-{
-	std::basic_string<T> lhs_string(lhs);
-	std::basic_string<T> rhs_string(rhs);
-	LLStringUtilBase<T>::toUpper(lhs_string);
-	LLStringUtilBase<T>::toUpper(rhs_string);
-	return LLStringOps::collate(lhs_string.c_str(), rhs_string.c_str());
-}
-
-// Case sensitive comparison with good handling of numbers.  Does not use current locale.
-// a.k.a. strdictcmp()
-
-//static 
-template<class T>
-S32 LLStringUtilBase<T>::compareDict(const std::basic_string<T>& astr, const std::basic_string<T>& bstr)
-{
-	const T* a = astr.c_str();
-	const T* b = bstr.c_str();
-	T ca, cb;
-	S32 ai, bi, cnt = 0;
-	S32 bias = 0;
-
-	ca = *(a++);
-	cb = *(b++);
-	while( ca && cb ){
-		if( bias==0 ){
-			if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); bias--; }
-			if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); bias++; }
-		}else{
-			if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); }
-			if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); }
-		}
-		if( LLStringOps::isDigit(ca) ){
-			if( cnt-->0 ){
-				if( cb!=ca ) break;
-			}else{
-				if( !LLStringOps::isDigit(cb) ) break;
-				for(ai=0; LLStringOps::isDigit(a[ai]); ai++);
-				for(bi=0; LLStringOps::isDigit(b[bi]); bi++);
-				if( ai<bi ){ ca=0; break; }
-				if( bi<ai ){ cb=0; break; }
-				if( ca!=cb ) break;
-				cnt = ai;
-			}
-		}else if( ca!=cb ){   break;
-		}
-		ca = *(a++);
-		cb = *(b++);
-	}
-	if( ca==cb ) ca += bias;
-	return ca-cb;
-}
-
-// static
-template<class T>
-S32 LLStringUtilBase<T>::compareDictInsensitive(const std::basic_string<T>& astr, const std::basic_string<T>& bstr)
-{
-	const T* a = astr.c_str();
-	const T* b = bstr.c_str();
-	T ca, cb;
-	S32 ai, bi, cnt = 0;
-
-	ca = *(a++);
-	cb = *(b++);
-	while( ca && cb ){
-		if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); }
-		if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); }
-		if( LLStringOps::isDigit(ca) ){
-			if( cnt-->0 ){
-				if( cb!=ca ) break;
-			}else{
-				if( !LLStringOps::isDigit(cb) ) break;
-				for(ai=0; LLStringOps::isDigit(a[ai]); ai++);
-				for(bi=0; LLStringOps::isDigit(b[bi]); bi++);
-				if( ai<bi ){ ca=0; break; }
-				if( bi<ai ){ cb=0; break; }
-				if( ca!=cb ) break;
-				cnt = ai;
-			}
-		}else if( ca!=cb ){   break;
-		}
-		ca = *(a++);
-		cb = *(b++);
-	}
-	return ca-cb;
-}
-
-// Puts compareDict() in a form appropriate for LL container classes to use for sorting.
-// static 
-template<class T> 
-BOOL LLStringUtilBase<T>::precedesDict( const std::basic_string<T>& a, const std::basic_string<T>& b )
-{
-	if( a.size() && b.size() )
-	{
-		return (LLStringUtilBase<T>::compareDict(a.c_str(), b.c_str()) < 0);
-	}
-	else
-	{
-		return (!b.empty());
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::toUpper(std::basic_string<T>& string)	
-{ 
-	if( !string.empty() )
-	{ 
-		std::transform(
-			string.begin(),
-			string.end(),
-			string.begin(),
-			(T(*)(T)) &LLStringOps::toUpper);
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::toLower(std::basic_string<T>& string)
-{ 
-	if( !string.empty() )
-	{ 
-		std::transform(
-			string.begin(),
-			string.end(),
-			string.begin(),
-			(T(*)(T)) &LLStringOps::toLower);
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::trimHead(std::basic_string<T>& string)
-{			
-	if( !string.empty() )
-	{
-		size_type i = 0;
-		while( i < string.length() && LLStringOps::isSpace( string[i] ) )
-		{
-			i++;
-		}
-		string.erase(0, i);
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::trimTail(std::basic_string<T>& string)
-{			
-	if( string.size() )
-	{
-		size_type len = string.length();
-		size_type i = len;
-		while( i > 0 && LLStringOps::isSpace( string[i-1] ) )
-		{
-			i--;
-		}
-
-		string.erase( i, len - i );
-	}
-}
-
-
-// Replace line feeds with carriage return-line feed pairs.
-//static
-template<class T>
-void LLStringUtilBase<T>::addCRLF(std::basic_string<T>& string)
-{
-	const T LF = 10;
-	const T CR = 13;
-
-	// Count the number of line feeds
-	size_type count = 0;
-	size_type len = string.size();
-	size_type i;
-	for( i = 0; i < len; i++ )
-	{
-		if( string[i] == LF )
-		{
-			count++;
-		}
-	}
-
-	// Insert a carriage return before each line feed
-	if( count )
-	{
-		size_type size = len + count;
-		T *t = new T[size];
-		size_type j = 0;
-		for( i = 0; i < len; ++i )
-		{
-			if( string[i] == LF )
-			{
-				t[j] = CR;
-				++j;
-			}
-			t[j] = string[i];
-			++j;
-		}
-
-		string.assign(t, size);
-	}
-}
-
-// Remove all carriage returns
-//static
-template<class T> 
-void LLStringUtilBase<T>::removeCRLF(std::basic_string<T>& string)
-{
-	const T CR = 13;
-
-	size_type cr_count = 0;
-	size_type len = string.size();
-	size_type i;
-	for( i = 0; i < len - cr_count; i++ )
-	{
-		if( string[i+cr_count] == CR )
-		{
-			cr_count++;
-		}
-
-		string[i] = string[i+cr_count];
-	}
-	string.erase(i, cr_count);
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::replaceChar( std::basic_string<T>& string, T target, T replacement )
-{
-	size_type found_pos = 0;
-	while( (found_pos = string.find(target, found_pos)) != std::basic_string<T>::npos ) 
-	{
-		string[found_pos] = replacement;
-		found_pos++; // avoid infinite defeat if target == replacement
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::replaceString( std::basic_string<T>& string, std::basic_string<T> target, std::basic_string<T> replacement )
-{
-	size_type found_pos = 0;
-	while( (found_pos = string.find(target, found_pos)) != std::basic_string<T>::npos )
-	{
-		string.replace( found_pos, target.length(), replacement );
-		found_pos += replacement.length(); // avoid infinite defeat if replacement contains target
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::replaceNonstandardASCII( std::basic_string<T>& string, T replacement )
-{
-	const char LF = 10;
-	const S8 MIN = 32;
-//	const S8 MAX = 127;
-
-	size_type len = string.size();
-	for( size_type i = 0; i < len; i++ )
-	{
-		// No need to test MAX < mText[i] because we treat mText[i] as a signed char,
-		// which has a max value of 127.
-		if( ( S8(string[i]) < MIN ) && (string[i] != LF) )
-		{
-			string[i] = replacement;
-		}
-	}
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::replaceTabsWithSpaces( std::basic_string<T>& str, size_type spaces_per_tab )
-{
-	const T TAB = '\t';
-	const T SPACE = ' ';
-
-	std::basic_string<T> out_str;
-	// Replace tabs with spaces
-	for (size_type i = 0; i < str.length(); i++)
-	{
-		if (str[i] == TAB)
-		{
-			for (size_type j = 0; j < spaces_per_tab; j++)
-				out_str += SPACE;
-		}
-		else
-		{
-			out_str += str[i];
-		}
-	}
-	str = out_str;
-}
-
-//static
-template<class T> 
-BOOL LLStringUtilBase<T>::containsNonprintable(const std::basic_string<T>& string)
-{
-	const char MIN = 32;
-	BOOL rv = FALSE;
-	for (size_type i = 0; i < string.size(); i++)
-	{
-		if(string[i] < MIN)
-		{
-			rv = TRUE;
-			break;
-		}
-	}
-	return rv;
-}
-
-//static
-template<class T> 
-void LLStringUtilBase<T>::stripNonprintable(std::basic_string<T>& string)
-{
-	const char MIN = 32;
-	size_type j = 0;
-	if (string.empty())
-	{
-		return;
-	}
-	size_t src_size = string.size();
-	char* c_string = new char[src_size + 1];
-	if(c_string == NULL)
-	{
-		return;
-	}
-	copy(c_string, string.c_str(), src_size+1);
-	char* write_head = &c_string[0];
-	for (size_type i = 0; i < src_size; i++)
-	{
-		char* read_head = &string[i];
-		write_head = &c_string[j];
-		if(!(*read_head < MIN))
-		{
-			*write_head = *read_head;
-			++j;
-		}
-	}
-	c_string[j]= '\0';
-	string = c_string;
-	delete []c_string;
-}
-
-template<class T> 
-void LLStringUtilBase<T>::_makeASCII(std::basic_string<T>& string)
-{
-	// Replace non-ASCII chars with LL_UNKNOWN_CHAR
-	for (size_type i = 0; i < string.length(); i++)
-	{
-		if (string[i] > 0x7f)
-		{
-			string[i] = LL_UNKNOWN_CHAR;
-		}
-	}
-}
-
-// static
-template<class T> 
-void LLStringUtilBase<T>::copy( T* dst, const T* src, size_type dst_size )
-{
-	if( dst_size > 0 )
-	{
-		size_type min_len = 0;
-		if( src )
-		{
-			min_len = llmin( dst_size - 1, strlen( src ) );  /* Flawfinder: ignore */
-			memcpy(dst, src, min_len * sizeof(T));		/* Flawfinder: ignore */
-		}
-		dst[min_len] = '\0';
-	}
-}
-
-// static
-template<class T> 
-void LLStringUtilBase<T>::copyInto(std::basic_string<T>& dst, const std::basic_string<T>& src, size_type offset)
-{
-	if ( offset == dst.length() )
-	{
-		// special case - append to end of string and avoid expensive
-		// (when strings are large) string manipulations
-		dst += src;
-	}
-	else
-	{
-		std::basic_string<T> tail = dst.substr(offset);
-
-		dst = dst.substr(0, offset);
-		dst += src;
-		dst += tail;
-	};
-}
-
-// True if this is the head of s.
-//static
-template<class T> 
-BOOL LLStringUtilBase<T>::isHead( const std::basic_string<T>& string, const T* s ) 
-{ 
-	if( string.empty() )
-	{
-		// Early exit
-		return FALSE;
-	}
-	else
-	{
-		return (strncmp( s, string.c_str(), string.size() ) == 0);
-	}
-}
-
-// static
-template<class T> 
-bool LLStringUtilBase<T>::startsWith(
-	const std::basic_string<T>& string,
-	const std::basic_string<T>& substr)
-{
-	if(string.empty() || (substr.empty())) return false;
-	if(0 == string.find(substr)) return true;
-	return false;
-}
-
-// static
-template<class T> 
-bool LLStringUtilBase<T>::endsWith(
-	const std::basic_string<T>& string,
-	const std::basic_string<T>& substr)
-{
-	if(string.empty() || (substr.empty())) return false;
-	std::string::size_type idx = string.rfind(substr);
-	if(std::string::npos == idx) return false;
-	return (idx == (string.size() - substr.size()));
-}
-
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToBOOL(const std::basic_string<T>& string, BOOL& value)
-{
-	if( string.empty() )
-	{
-		return FALSE;
-	}
-
-	std::basic_string<T> temp( string );
-	trim(temp);
-	if( 
-		(temp == "1") || 
-		(temp == "T") || 
-		(temp == "t") || 
-		(temp == "TRUE") || 
-		(temp == "true") || 
-		(temp == "True") )
-	{
-		value = TRUE;
-		return TRUE;
-	}
-	else
-	if( 
-		(temp == "0") || 
-		(temp == "F") || 
-		(temp == "f") || 
-		(temp == "FALSE") || 
-		(temp == "false") || 
-		(temp == "False") )
-	{
-		value = FALSE;
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToU8(const std::basic_string<T>& string, U8& value) 
-{
-	S32 value32 = 0;
-	BOOL success = convertToS32(string, value32);
-	if( success && (U8_MIN <= value32) && (value32 <= U8_MAX) )
-	{
-		value = (U8) value32;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToS8(const std::basic_string<T>& string, S8& value) 
-{
-	S32 value32 = 0;
-	BOOL success = convertToS32(string, value32);
-	if( success && (S8_MIN <= value32) && (value32 <= S8_MAX) )
-	{
-		value = (S8) value32;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToS16(const std::basic_string<T>& string, S16& value) 
-{
-	S32 value32 = 0;
-	BOOL success = convertToS32(string, value32);
-	if( success && (S16_MIN <= value32) && (value32 <= S16_MAX) )
-	{
-		value = (S16) value32;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToU16(const std::basic_string<T>& string, U16& value) 
-{
-	S32 value32 = 0;
-	BOOL success = convertToS32(string, value32);
-	if( success && (U16_MIN <= value32) && (value32 <= U16_MAX) )
-	{
-		value = (U16) value32;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToU32(const std::basic_string<T>& string, U32& value) 
-{
-	if( string.empty() )
-	{
-		return FALSE;
-	}
-
-	std::basic_string<T> temp( string );
-	trim(temp);
-	U32 v;
-	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
-	if(i_stream >> v)
-	{
-		value = v;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToS32(const std::basic_string<T>& string, S32& value) 
-{
-	if( string.empty() )
-	{
-		return FALSE;
-	}
-
-	std::basic_string<T> temp( string );
-	trim(temp);
-	S32 v;
-	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
-	if(i_stream >> v)
-	{
-		//TODO: figure out overflow and underflow reporting here
-		//if((LONG_MAX == v) || (LONG_MIN == v))
-		//{
-		//	// Underflow or overflow
-		//	return FALSE;
-		//}
-
-		value = v;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToF32(const std::basic_string<T>& string, F32& value) 
-{
-	F64 value64 = 0.0;
-	BOOL success = convertToF64(string, value64);
-	if( success && (-F32_MAX <= value64) && (value64 <= F32_MAX) )
-	{
-		value = (F32) value64;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-BOOL LLStringUtilBase<T>::convertToF64(const std::basic_string<T>& string, F64& value)
-{
-	if( string.empty() )
-	{
-		return FALSE;
-	}
-
-	std::basic_string<T> temp( string );
-	trim(temp);
-	F64 v;
-	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
-	if(i_stream >> v)
-	{
-		//TODO: figure out overflow and underflow reporting here
-		//if( ((-HUGE_VAL == v) || (HUGE_VAL == v))) )
-		//{
-		//	// Underflow or overflow
-		//	return FALSE;
-		//}
-
-		value = v;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-template<class T> 
-void LLStringUtilBase<T>::truncate(std::basic_string<T>& string, size_type count)
-{
-	size_type cur_size = string.size();
-	string.resize(count < cur_size ? count : cur_size);
-}
-
-#endif  // LL_STRING_H
+/** 
+ * @file llstring.h
+ * @brief String utility functions and std::string class.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSTRING_H
+#define LL_LLSTRING_H
+
+#include <string>
+#include <cstdio>
+#include <locale>
+#include <iomanip>
+#include "llsd.h"
+#include "llfasttimer.h"
+
+#if LL_LINUX || LL_SOLARIS
+#include <wctype.h>
+#include <wchar.h>
+#endif
+
+#include <string.h>
+
+#if LL_SOLARIS
+// stricmp and strnicmp do not exist on Solaris:
+#define stricmp strcasecmp
+#define strnicmp strncasecmp
+#endif
+
+const char LL_UNKNOWN_CHAR = '?';
+
+#if LL_DARWIN || LL_LINUX || LL_SOLARIS
+// Template specialization of char_traits for U16s. Only necessary on Mac and Linux (exists on Windows already)
+#include <cstring>
+
+namespace std
+{
+template<>
+struct char_traits<U16>
+{
+	typedef U16 		char_type;
+	typedef int 	    int_type;
+	typedef streampos 	pos_type;
+	typedef streamoff 	off_type;
+	typedef mbstate_t 	state_type;
+	
+	static void 
+		assign(char_type& __c1, const char_type& __c2)
+	{ __c1 = __c2; }
+	
+	static bool 
+		eq(const char_type& __c1, const char_type& __c2)
+	{ return __c1 == __c2; }
+	
+	static bool 
+		lt(const char_type& __c1, const char_type& __c2)
+	{ return __c1 < __c2; }
+	
+	static int 
+		compare(const char_type* __s1, const char_type* __s2, size_t __n)
+	{ return memcmp(__s1, __s2, __n * sizeof(char_type)); }
+	
+	static size_t
+		length(const char_type* __s)
+	{
+		const char_type *cur_char = __s;
+		while (*cur_char != 0)
+		{
+			++cur_char;
+		}
+		return cur_char - __s;
+	}
+	
+	static const char_type* 
+		find(const char_type* __s, size_t __n, const char_type& __a)
+	{ return static_cast<const char_type*>(memchr(__s, __a, __n * sizeof(char_type))); }
+	
+	static char_type* 
+		move(char_type* __s1, const char_type* __s2, size_t __n)
+	{ return static_cast<char_type*>(memmove(__s1, __s2, __n * sizeof(char_type))); }
+	
+	static char_type* 
+		copy(char_type* __s1, const char_type* __s2, size_t __n)
+	{  return static_cast<char_type*>(memcpy(__s1, __s2, __n * sizeof(char_type))); }	/* Flawfinder: ignore */
+	
+	static char_type* 
+		assign(char_type* __s, size_t __n, char_type __a)
+	{ 
+		// This isn't right.
+		//return static_cast<char_type*>(memset(__s, __a, __n * sizeof(char_type))); 
+		
+		// I don't think there's a standard 'memset' for 16-bit values.
+		// Do this the old-fashioned way.
+		
+		size_t __i;
+		for(__i = 0; __i < __n; __i++)
+		{
+			__s[__i] = __a;
+		}
+		return __s; 
+	}
+	
+	static char_type 
+		to_char_type(const int_type& __c)
+	{ return static_cast<char_type>(__c); }
+	
+	static int_type 
+		to_int_type(const char_type& __c)
+	{ return static_cast<int_type>(__c); }
+	
+	static bool 
+		eq_int_type(const int_type& __c1, const int_type& __c2)
+	{ return __c1 == __c2; }
+	
+	static int_type 
+		eof() { return static_cast<int_type>(EOF); }
+	
+	static int_type 
+		not_eof(const int_type& __c)
+      { return (__c == eof()) ? 0 : __c; }
+  };
+};
+#endif
+
+class LL_COMMON_API LLStringOps
+{
+private:
+	static long sPacificTimeOffset;
+	static long sLocalTimeOffset;
+	static bool sPacificDaylightTime;
+	static std::map<std::string, std::string> datetimeToCodes;
+
+public:
+	static char toUpper(char elem) { return toupper((unsigned char)elem); }
+	static llwchar toUpper(llwchar elem) { return towupper(elem); }
+	
+	static char toLower(char elem) { return tolower((unsigned char)elem); }
+	static llwchar toLower(llwchar elem) { return towlower(elem); }
+
+	static bool isSpace(char elem) { return isspace((unsigned char)elem) != 0; }
+	static bool isSpace(llwchar elem) { return iswspace(elem) != 0; }
+
+	static bool isUpper(char elem) { return isupper((unsigned char)elem) != 0; }
+	static bool isUpper(llwchar elem) { return iswupper(elem) != 0; }
+
+	static bool isLower(char elem) { return islower((unsigned char)elem) != 0; }
+	static bool isLower(llwchar elem) { return iswlower(elem) != 0; }
+
+	static bool isDigit(char a) { return isdigit((unsigned char)a) != 0; }
+	static bool isDigit(llwchar a) { return iswdigit(a) != 0; }
+
+	static bool isPunct(char a) { return ispunct((unsigned char)a) != 0; }
+	static bool isPunct(llwchar a) { return iswpunct(a) != 0; }
+
+	static bool isAlnum(char a) { return isalnum((unsigned char)a) != 0; }
+	static bool isAlnum(llwchar a) { return iswalnum(a) != 0; }
+
+	static S32	collate(const char* a, const char* b) { return strcoll(a, b); }
+	static S32	collate(const llwchar* a, const llwchar* b);
+
+	static void setupDatetimeInfo(bool pacific_daylight_time);
+	static long getPacificTimeOffset(void) { return sPacificTimeOffset;}
+	static long getLocalTimeOffset(void) { return sLocalTimeOffset;}
+	// Is the Pacific time zone (aka server time zone)
+	// currently in daylight savings time?
+	static bool getPacificDaylightTime(void) { return sPacificDaylightTime;}
+
+	static std::string getDatetimeCode (std::string key);
+};
+
+/**
+ * @brief Return a string constructed from in without crashing if the
+ * pointer is NULL.
+ */
+LL_COMMON_API std::string ll_safe_string(const char* in);
+LL_COMMON_API std::string ll_safe_string(const char* in, S32 maxlen);
+
+
+// Allowing assignments from non-strings into format_map_t is apparently
+// *really* error-prone, so subclass std::string with just basic c'tors.
+class LLFormatMapString
+{
+public:
+	LLFormatMapString() {};
+	LLFormatMapString(const char* s) : mString(ll_safe_string(s)) {};
+	LLFormatMapString(const std::string& s) : mString(s) {};
+	operator std::string() const { return mString; }
+	bool operator<(const LLFormatMapString& rhs) const { return mString < rhs.mString; }
+	std::size_t length() const { return mString.length(); }
+	
+private:
+	std::string mString;
+};
+
+template <class T>
+class LLStringUtilBase
+{
+private:
+	static std::string sLocale;
+
+public:
+	typedef typename std::basic_string<T>::size_type size_type;
+	
+public:
+	/////////////////////////////////////////////////////////////////////////////////////////
+	// Static Utility functions that operate on std::strings
+
+	static std::basic_string<T> null;
+	
+	typedef std::map<LLFormatMapString, LLFormatMapString> format_map_t;
+	LL_COMMON_API static void getTokens(const std::basic_string<T>& instr, std::vector<std::basic_string<T> >& tokens, const std::basic_string<T>& delims);
+	LL_COMMON_API static void formatNumber(std::basic_string<T>& numStr, std::basic_string<T> decimals);
+	LL_COMMON_API static bool formatDatetime(std::basic_string<T>& replacement, std::basic_string<T> token, std::basic_string<T> param, S32 secFromEpoch);
+	LL_COMMON_API static S32 format(std::basic_string<T>& s, const format_map_t& substitutions);
+	LL_COMMON_API static S32 format(std::basic_string<T>& s, const LLSD& substitutions);
+	LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const format_map_t& substitutions);
+	LL_COMMON_API static bool simpleReplacement(std::basic_string<T>& replacement, std::basic_string<T> token, const LLSD& substitutions);
+	static void setLocale (std::string inLocale) {sLocale = inLocale;};
+	static std::string getLocale (void) {return sLocale;};
+	
+	static bool isValidIndex(const std::basic_string<T>& string, size_type i)
+	{
+		return !string.empty() && (0 <= i) && (i <= string.size());
+	}
+
+	static void	trimHead(std::basic_string<T>& string);
+	static void	trimTail(std::basic_string<T>& string);
+	static void	trim(std::basic_string<T>& string)	{ trimHead(string); trimTail(string); }
+	static void truncate(std::basic_string<T>& string, size_type count);
+
+	static void	toUpper(std::basic_string<T>& string);
+	static void	toLower(std::basic_string<T>& string);
+	
+	// True if this is the head of s.
+	static BOOL	isHead( const std::basic_string<T>& string, const T* s ); 
+
+	/**
+	 * @brief Returns true if string starts with substr
+	 *
+	 * If etither string or substr are empty, this method returns false.
+	 */
+	static bool startsWith(
+		const std::basic_string<T>& string,
+		const std::basic_string<T>& substr);
+
+	/**
+	 * @brief Returns true if string ends in substr
+	 *
+	 * If etither string or substr are empty, this method returns false.
+	 */
+	static bool endsWith(
+		const std::basic_string<T>& string,
+		const std::basic_string<T>& substr);
+
+	static void	addCRLF(std::basic_string<T>& string);
+	static void	removeCRLF(std::basic_string<T>& string);
+
+	static void	replaceTabsWithSpaces( std::basic_string<T>& string, size_type spaces_per_tab );
+	static void	replaceNonstandardASCII( std::basic_string<T>& string, T replacement );
+	static void	replaceChar( std::basic_string<T>& string, T target, T replacement );
+	static void replaceString( std::basic_string<T>& string, std::basic_string<T> target, std::basic_string<T> replacement );
+	
+	static BOOL	containsNonprintable(const std::basic_string<T>& string);
+	static void	stripNonprintable(std::basic_string<T>& string);
+
+	/**
+	 * @brief Unsafe way to make ascii characters. You should probably
+	 * only call this when interacting with the host operating system.
+	 * The 1 byte std::string does not work correctly.
+	 * The 2 and 4 byte std::string probably work, so LLWStringUtil::_makeASCII
+	 * should work.
+	 */
+	static void _makeASCII(std::basic_string<T>& string);
+
+	// Conversion to other data types
+	static BOOL	convertToBOOL(const std::basic_string<T>& string, BOOL& value);
+	static BOOL	convertToU8(const std::basic_string<T>& string, U8& value);
+	static BOOL	convertToS8(const std::basic_string<T>& string, S8& value);
+	static BOOL	convertToS16(const std::basic_string<T>& string, S16& value);
+	static BOOL	convertToU16(const std::basic_string<T>& string, U16& value);
+	static BOOL	convertToU32(const std::basic_string<T>& string, U32& value);
+	static BOOL	convertToS32(const std::basic_string<T>& string, S32& value);
+	static BOOL	convertToF32(const std::basic_string<T>& string, F32& value);
+	static BOOL	convertToF64(const std::basic_string<T>& string, F64& value);
+
+	/////////////////////////////////////////////////////////////////////////////////////////
+	// Utility functions for working with char*'s and strings
+
+	// Like strcmp but also handles empty strings. Uses
+	// current locale.
+	static S32		compareStrings(const T* lhs, const T* rhs);
+	static S32		compareStrings(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs);
+	
+	// case insensitive version of above. Uses current locale on
+	// Win32, and falls back to a non-locale aware comparison on
+	// Linux.
+	static S32		compareInsensitive(const T* lhs, const T* rhs);
+	static S32		compareInsensitive(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs);
+
+	// Case sensitive comparison with good handling of numbers.  Does not use current locale.
+	// a.k.a. strdictcmp()
+	static S32		compareDict(const std::basic_string<T>& a, const std::basic_string<T>& b);
+
+	// Case *in*sensitive comparison with good handling of numbers.  Does not use current locale.
+	// a.k.a. strdictcmp()
+	static S32		compareDictInsensitive(const std::basic_string<T>& a, const std::basic_string<T>& b);
+
+	// Puts compareDict() in a form appropriate for LL container classes to use for sorting.
+	static BOOL		precedesDict( const std::basic_string<T>& a, const std::basic_string<T>& b );
+
+	// A replacement for strncpy.
+	// If the dst buffer is dst_size bytes long or more, ensures that dst is null terminated and holds
+	// up to dst_size-1 characters of src.
+	static void		copy(T* dst, const T* src, size_type dst_size);
+	
+	// Copies src into dst at a given offset.  
+	static void		copyInto(std::basic_string<T>& dst, const std::basic_string<T>& src, size_type offset);
+	
+	static bool		isPartOfWord(T c) { return (c == (T)'_') || LLStringOps::isAlnum(c); }
+
+
+#ifdef _DEBUG	
+	LL_COMMON_API static void		testHarness();
+#endif
+
+private:
+	LL_COMMON_API static size_type getSubstitution(const std::basic_string<T>& instr, size_type& start, std::vector<std::basic_string<T> >& tokens);
+};
+
+template<class T> std::basic_string<T> LLStringUtilBase<T>::null;
+template<class T> std::string LLStringUtilBase<T>::sLocale;
+
+typedef LLStringUtilBase<char> LLStringUtil;
+typedef LLStringUtilBase<llwchar> LLWStringUtil;
+typedef std::basic_string<llwchar> LLWString;
+
+//@ Use this where we want to disallow input in the form of "foo"
+//  This is used to catch places where english text is embedded in the code
+//  instead of in a translatable XUI file.
+class LLStringExplicit : public std::string
+{
+public:
+	explicit LLStringExplicit(const char* s) : std::string(s) {}
+	LLStringExplicit(const std::string& s) : std::string(s) {}
+	LLStringExplicit(const std::string& s, size_type pos, size_type n = std::string::npos) : std::string(s, pos, n) {}
+};
+
+struct LLDictionaryLess
+{
+public:
+	bool operator()(const std::string& a, const std::string& b)
+	{
+		return (LLStringUtil::precedesDict(a, b) ? true : false);
+	}
+};
+
+
+/**
+ * Simple support functions
+ */
+
+/**
+ * @brief chop off the trailing characters in a string.
+ *
+ * This function works on bytes rather than glyphs, so this will
+ * incorrectly truncate non-single byte strings.
+ * Use utf8str_truncate() for utf8 strings
+ * @return a copy of in string minus the trailing count bytes.
+ */
+inline std::string chop_tail_copy(
+	const std::string& in,
+	std::string::size_type count)
+{
+	return std::string(in, 0, in.length() - count);
+}
+
+/**
+ * @brief This translates a nybble stored as a hex value from 0-f back
+ * to a nybble in the low order bits of the return byte.
+ */
+LL_COMMON_API U8 hex_as_nybble(char hex);
+
+/**
+ * @brief read the contents of a file into a string.
+ *
+ * Since this function has no concept of character encoding, most
+ * anything you do with this method ill-advised. Please avoid.
+ * @param str [out] The string which will have.
+ * @param filename The full name of the file to read.
+ * @return Returns true on success. If false, str is unmodified.
+ */
+LL_COMMON_API bool _read_file_into_string(std::string& str, const std::string& filename);
+LL_COMMON_API bool iswindividual(llwchar elem);
+
+/**
+ * Unicode support
+ */
+
+// Make the incoming string a utf8 string. Replaces any unknown glyph
+// with the UNKOWN_CHARACTER. Once any unknown glph is found, the rest
+// of the data may not be recovered.
+LL_COMMON_API std::string rawstr_to_utf8(const std::string& raw);
+
+//
+// We should never use UTF16 except when communicating with Win32!
+//
+typedef std::basic_string<U16> llutf16string;
+
+LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str, S32 len);
+LL_COMMON_API LLWString utf16str_to_wstring(const llutf16string &utf16str);
+
+LL_COMMON_API llutf16string wstring_to_utf16str(const LLWString &utf32str, S32 len);
+LL_COMMON_API llutf16string wstring_to_utf16str(const LLWString &utf32str);
+
+LL_COMMON_API llutf16string utf8str_to_utf16str ( const std::string& utf8str, S32 len);
+LL_COMMON_API llutf16string utf8str_to_utf16str ( const std::string& utf8str );
+
+LL_COMMON_API LLWString utf8str_to_wstring(const std::string &utf8str, S32 len);
+LL_COMMON_API LLWString utf8str_to_wstring(const std::string &utf8str);
+// Same function, better name. JC
+inline LLWString utf8string_to_wstring(const std::string& utf8_string) { return utf8str_to_wstring(utf8_string); }
+
+//
+LL_COMMON_API S32 wchar_to_utf8chars(llwchar inchar, char* outchars);
+
+LL_COMMON_API std::string wstring_to_utf8str(const LLWString &utf32str, S32 len);
+LL_COMMON_API std::string wstring_to_utf8str(const LLWString &utf32str);
+
+LL_COMMON_API std::string utf16str_to_utf8str(const llutf16string &utf16str, S32 len);
+LL_COMMON_API std::string utf16str_to_utf8str(const llutf16string &utf16str);
+
+// Length of this UTF32 string in bytes when transformed to UTF8
+LL_COMMON_API S32 wstring_utf8_length(const LLWString& wstr); 
+
+// Length in bytes of this wide char in a UTF8 string
+LL_COMMON_API S32 wchar_utf8_length(const llwchar wc); 
+
+LL_COMMON_API std::string utf8str_tolower(const std::string& utf8str);
+
+// Length in llwchar (UTF-32) of the first len units (16 bits) of the given UTF-16 string.
+LL_COMMON_API S32 utf16str_wstring_length(const llutf16string &utf16str, S32 len);
+
+// Length in utf16string (UTF-16) of wlen wchars beginning at woffset.
+LL_COMMON_API S32 wstring_utf16_length(const LLWString & wstr, S32 woffset, S32 wlen);
+
+// Length in wstring (i.e., llwchar count) of a part of a wstring specified by utf16 length (i.e., utf16 units.)
+LL_COMMON_API S32 wstring_wstring_length_from_utf16_length(const LLWString & wstr, S32 woffset, S32 utf16_length, BOOL *unaligned = NULL);
+
+/**
+ * @brief Properly truncate a utf8 string to a maximum byte count.
+ * 
+ * The returned string may be less than max_len if the truncation
+ * happens in the middle of a glyph. If max_len is longer than the
+ * string passed in, the return value == utf8str.
+ * @param utf8str A valid utf8 string to truncate.
+ * @param max_len The maximum number of bytes in the return value.
+ * @return Returns a valid utf8 string with byte count <= max_len.
+ */
+LL_COMMON_API std::string utf8str_truncate(const std::string& utf8str, const S32 max_len);
+
+LL_COMMON_API std::string utf8str_trim(const std::string& utf8str);
+
+LL_COMMON_API S32 utf8str_compare_insensitive(
+	const std::string& lhs,
+	const std::string& rhs);
+
+/**
+ * @brief Replace all occurences of target_char with replace_char
+ *
+ * @param utf8str A utf8 string to process.
+ * @param target_char The wchar to be replaced
+ * @param replace_char The wchar which is written on replace
+ */
+LL_COMMON_API std::string utf8str_substChar(
+	const std::string& utf8str,
+	const llwchar target_char,
+	const llwchar replace_char);
+
+LL_COMMON_API std::string utf8str_makeASCII(const std::string& utf8str);
+
+// Hack - used for evil notecards.
+LL_COMMON_API std::string mbcsstring_makeASCII(const std::string& str); 
+
+LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str);
+
+
+#if LL_WINDOWS
+/* @name Windows string helpers
+ */
+//@{
+
+/**
+ * @brief Implementation the expected snprintf interface.
+ *
+ * If the size of the passed in buffer is not large enough to hold the string,
+ * two bad things happen:
+ * 1. resulting formatted string is NOT null terminated
+ * 2. Depending on the platform, the return value could be a) the required
+ *    size of the buffer to copy the entire formatted string or b) -1.
+ *    On Windows with VS.Net 2003, it returns -1 e.g. 
+ *
+ * safe_snprintf always adds a NULL terminator so that the caller does not
+ * need to check for return value or need to add the NULL terminator.
+ * It does not, however change the return value - to let the caller know
+ * that the passed in buffer size was not large enough to hold the
+ * formatted string.
+ *
+ */
+
+// Deal with the differeneces on Windows
+namespace snprintf_hack
+{
+	LL_COMMON_API int snprintf(char *str, size_t size, const char *format, ...);
+}
+
+using snprintf_hack::snprintf;
+
+/**
+ * @brief Convert a wide string to std::string
+ *
+ * This replaces the unsafe W2A macro from ATL.
+ */
+LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in);
+
+//@}
+#endif // LL_WINDOWS
+
+/**
+ * Many of the 'strip' and 'replace' methods of LLStringUtilBase need
+ * specialization to work with the signed char type.
+ * Sadly, it is not possible (AFAIK) to specialize a single method of
+ * a template class.
+ * That stuff should go here.
+ */
+namespace LLStringFn
+{
+	/**
+	 * @brief Replace all non-printable characters with replacement in
+	 * string.
+	 * NOTE - this will zap non-ascii
+	 *
+	 * @param [in,out] string the to modify. out value is the string
+	 * with zero non-printable characters.
+	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
+	 */
+	LL_COMMON_API void replace_nonprintable_in_ascii(
+		std::basic_string<char>& string,
+		char replacement);
+
+
+	/**
+	 * @brief Replace all non-printable characters and pipe characters
+	 * with replacement in a string.
+	 * NOTE - this will zap non-ascii
+	 *
+	 * @param [in,out] the string to modify. out value is the string
+	 * with zero non-printable characters and zero pipe characters.
+	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
+	 */
+	LL_COMMON_API void replace_nonprintable_and_pipe_in_ascii(std::basic_string<char>& str,
+									   char replacement);
+
+
+	/**
+	 * @brief Remove all characters that are not allowed in XML 1.0.
+	 * Returns a copy of the string with those characters removed.
+	 * Works with US ASCII and UTF-8 encoded strings.  JC
+	 */
+	LL_COMMON_API std::string strip_invalid_xml(const std::string& input);
+
+
+	/**
+	 * @brief Replace all control characters (0 <= c < 0x20) with replacement in
+	 * string.   This is safe for utf-8
+	 *
+	 * @param [in,out] string the to modify. out value is the string
+	 * with zero non-printable characters.
+	 * @param The replacement character. use LL_UNKNOWN_CHAR if unsure.
+	 */
+	LL_COMMON_API void replace_ascii_controlchars(
+		std::basic_string<char>& string,
+		char replacement);
+}
+
+////////////////////////////////////////////////////////////
+// NOTE: LLStringUtil::format, getTokens, and support functions moved to llstring.cpp.
+// There is no LLWStringUtil::format implementation currently.
+// Calling thse for anything other than LLStringUtil will produce link errors.
+
+////////////////////////////////////////////////////////////
+
+
+// static
+template<class T> 
+S32 LLStringUtilBase<T>::compareStrings(const T* lhs, const T* rhs)
+{	
+	S32 result;
+	if( lhs == rhs )
+	{
+		result = 0;
+	}
+	else
+	if ( !lhs || !lhs[0] )
+	{
+		result = ((!rhs || !rhs[0]) ? 0 : 1);
+	}
+	else
+	if ( !rhs || !rhs[0])
+	{
+		result = -1;
+	}
+	else
+	{
+		result = LLStringOps::collate(lhs, rhs);
+	}
+	return result;
+}
+
+//static 
+template<class T> 
+S32 LLStringUtilBase<T>::compareStrings(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs)
+{
+	return LLStringOps::collate(lhs.c_str(), rhs.c_str());
+}
+
+// static
+template<class T> 
+S32 LLStringUtilBase<T>::compareInsensitive(const T* lhs, const T* rhs )
+{
+	S32 result;
+	if( lhs == rhs )
+	{
+		result = 0;
+	}
+	else
+	if ( !lhs || !lhs[0] )
+	{
+		result = ((!rhs || !rhs[0]) ? 0 : 1);
+	}
+	else
+	if ( !rhs || !rhs[0] )
+	{
+		result = -1;
+	}
+	else
+	{
+		std::basic_string<T> lhs_string(lhs);
+		std::basic_string<T> rhs_string(rhs);
+		LLStringUtilBase<T>::toUpper(lhs_string);
+		LLStringUtilBase<T>::toUpper(rhs_string);
+		result = LLStringOps::collate(lhs_string.c_str(), rhs_string.c_str());
+	}
+	return result;
+}
+
+//static 
+template<class T> 
+S32 LLStringUtilBase<T>::compareInsensitive(const std::basic_string<T>& lhs, const std::basic_string<T>& rhs)
+{
+	std::basic_string<T> lhs_string(lhs);
+	std::basic_string<T> rhs_string(rhs);
+	LLStringUtilBase<T>::toUpper(lhs_string);
+	LLStringUtilBase<T>::toUpper(rhs_string);
+	return LLStringOps::collate(lhs_string.c_str(), rhs_string.c_str());
+}
+
+// Case sensitive comparison with good handling of numbers.  Does not use current locale.
+// a.k.a. strdictcmp()
+
+//static 
+template<class T>
+S32 LLStringUtilBase<T>::compareDict(const std::basic_string<T>& astr, const std::basic_string<T>& bstr)
+{
+	const T* a = astr.c_str();
+	const T* b = bstr.c_str();
+	T ca, cb;
+	S32 ai, bi, cnt = 0;
+	S32 bias = 0;
+
+	ca = *(a++);
+	cb = *(b++);
+	while( ca && cb ){
+		if( bias==0 ){
+			if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); bias--; }
+			if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); bias++; }
+		}else{
+			if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); }
+			if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); }
+		}
+		if( LLStringOps::isDigit(ca) ){
+			if( cnt-->0 ){
+				if( cb!=ca ) break;
+			}else{
+				if( !LLStringOps::isDigit(cb) ) break;
+				for(ai=0; LLStringOps::isDigit(a[ai]); ai++);
+				for(bi=0; LLStringOps::isDigit(b[bi]); bi++);
+				if( ai<bi ){ ca=0; break; }
+				if( bi<ai ){ cb=0; break; }
+				if( ca!=cb ) break;
+				cnt = ai;
+			}
+		}else if( ca!=cb ){   break;
+		}
+		ca = *(a++);
+		cb = *(b++);
+	}
+	if( ca==cb ) ca += bias;
+	return ca-cb;
+}
+
+// static
+template<class T>
+S32 LLStringUtilBase<T>::compareDictInsensitive(const std::basic_string<T>& astr, const std::basic_string<T>& bstr)
+{
+	const T* a = astr.c_str();
+	const T* b = bstr.c_str();
+	T ca, cb;
+	S32 ai, bi, cnt = 0;
+
+	ca = *(a++);
+	cb = *(b++);
+	while( ca && cb ){
+		if( LLStringOps::isUpper(ca) ){ ca = LLStringOps::toLower(ca); }
+		if( LLStringOps::isUpper(cb) ){ cb = LLStringOps::toLower(cb); }
+		if( LLStringOps::isDigit(ca) ){
+			if( cnt-->0 ){
+				if( cb!=ca ) break;
+			}else{
+				if( !LLStringOps::isDigit(cb) ) break;
+				for(ai=0; LLStringOps::isDigit(a[ai]); ai++);
+				for(bi=0; LLStringOps::isDigit(b[bi]); bi++);
+				if( ai<bi ){ ca=0; break; }
+				if( bi<ai ){ cb=0; break; }
+				if( ca!=cb ) break;
+				cnt = ai;
+			}
+		}else if( ca!=cb ){   break;
+		}
+		ca = *(a++);
+		cb = *(b++);
+	}
+	return ca-cb;
+}
+
+// Puts compareDict() in a form appropriate for LL container classes to use for sorting.
+// static 
+template<class T> 
+BOOL LLStringUtilBase<T>::precedesDict( const std::basic_string<T>& a, const std::basic_string<T>& b )
+{
+	if( a.size() && b.size() )
+	{
+		return (LLStringUtilBase<T>::compareDict(a.c_str(), b.c_str()) < 0);
+	}
+	else
+	{
+		return (!b.empty());
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::toUpper(std::basic_string<T>& string)	
+{ 
+	if( !string.empty() )
+	{ 
+		std::transform(
+			string.begin(),
+			string.end(),
+			string.begin(),
+			(T(*)(T)) &LLStringOps::toUpper);
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::toLower(std::basic_string<T>& string)
+{ 
+	if( !string.empty() )
+	{ 
+		std::transform(
+			string.begin(),
+			string.end(),
+			string.begin(),
+			(T(*)(T)) &LLStringOps::toLower);
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::trimHead(std::basic_string<T>& string)
+{			
+	if( !string.empty() )
+	{
+		size_type i = 0;
+		while( i < string.length() && LLStringOps::isSpace( string[i] ) )
+		{
+			i++;
+		}
+		string.erase(0, i);
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::trimTail(std::basic_string<T>& string)
+{			
+	if( string.size() )
+	{
+		size_type len = string.length();
+		size_type i = len;
+		while( i > 0 && LLStringOps::isSpace( string[i-1] ) )
+		{
+			i--;
+		}
+
+		string.erase( i, len - i );
+	}
+}
+
+
+// Replace line feeds with carriage return-line feed pairs.
+//static
+template<class T>
+void LLStringUtilBase<T>::addCRLF(std::basic_string<T>& string)
+{
+	const T LF = 10;
+	const T CR = 13;
+
+	// Count the number of line feeds
+	size_type count = 0;
+	size_type len = string.size();
+	size_type i;
+	for( i = 0; i < len; i++ )
+	{
+		if( string[i] == LF )
+		{
+			count++;
+		}
+	}
+
+	// Insert a carriage return before each line feed
+	if( count )
+	{
+		size_type size = len + count;
+		T *t = new T[size];
+		size_type j = 0;
+		for( i = 0; i < len; ++i )
+		{
+			if( string[i] == LF )
+			{
+				t[j] = CR;
+				++j;
+			}
+			t[j] = string[i];
+			++j;
+		}
+
+		string.assign(t, size);
+	}
+}
+
+// Remove all carriage returns
+//static
+template<class T> 
+void LLStringUtilBase<T>::removeCRLF(std::basic_string<T>& string)
+{
+	const T CR = 13;
+
+	size_type cr_count = 0;
+	size_type len = string.size();
+	size_type i;
+	for( i = 0; i < len - cr_count; i++ )
+	{
+		if( string[i+cr_count] == CR )
+		{
+			cr_count++;
+		}
+
+		string[i] = string[i+cr_count];
+	}
+	string.erase(i, cr_count);
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::replaceChar( std::basic_string<T>& string, T target, T replacement )
+{
+	size_type found_pos = 0;
+	while( (found_pos = string.find(target, found_pos)) != std::basic_string<T>::npos ) 
+	{
+		string[found_pos] = replacement;
+		found_pos++; // avoid infinite defeat if target == replacement
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::replaceString( std::basic_string<T>& string, std::basic_string<T> target, std::basic_string<T> replacement )
+{
+	size_type found_pos = 0;
+	while( (found_pos = string.find(target, found_pos)) != std::basic_string<T>::npos )
+	{
+		string.replace( found_pos, target.length(), replacement );
+		found_pos += replacement.length(); // avoid infinite defeat if replacement contains target
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::replaceNonstandardASCII( std::basic_string<T>& string, T replacement )
+{
+	const char LF = 10;
+	const S8 MIN = 32;
+//	const S8 MAX = 127;
+
+	size_type len = string.size();
+	for( size_type i = 0; i < len; i++ )
+	{
+		// No need to test MAX < mText[i] because we treat mText[i] as a signed char,
+		// which has a max value of 127.
+		if( ( S8(string[i]) < MIN ) && (string[i] != LF) )
+		{
+			string[i] = replacement;
+		}
+	}
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::replaceTabsWithSpaces( std::basic_string<T>& str, size_type spaces_per_tab )
+{
+	const T TAB = '\t';
+	const T SPACE = ' ';
+
+	std::basic_string<T> out_str;
+	// Replace tabs with spaces
+	for (size_type i = 0; i < str.length(); i++)
+	{
+		if (str[i] == TAB)
+		{
+			for (size_type j = 0; j < spaces_per_tab; j++)
+				out_str += SPACE;
+		}
+		else
+		{
+			out_str += str[i];
+		}
+	}
+	str = out_str;
+}
+
+//static
+template<class T> 
+BOOL LLStringUtilBase<T>::containsNonprintable(const std::basic_string<T>& string)
+{
+	const char MIN = 32;
+	BOOL rv = FALSE;
+	for (size_type i = 0; i < string.size(); i++)
+	{
+		if(string[i] < MIN)
+		{
+			rv = TRUE;
+			break;
+		}
+	}
+	return rv;
+}
+
+//static
+template<class T> 
+void LLStringUtilBase<T>::stripNonprintable(std::basic_string<T>& string)
+{
+	const char MIN = 32;
+	size_type j = 0;
+	if (string.empty())
+	{
+		return;
+	}
+	size_t src_size = string.size();
+	char* c_string = new char[src_size + 1];
+	if(c_string == NULL)
+	{
+		return;
+	}
+	copy(c_string, string.c_str(), src_size+1);
+	char* write_head = &c_string[0];
+	for (size_type i = 0; i < src_size; i++)
+	{
+		char* read_head = &string[i];
+		write_head = &c_string[j];
+		if(!(*read_head < MIN))
+		{
+			*write_head = *read_head;
+			++j;
+		}
+	}
+	c_string[j]= '\0';
+	string = c_string;
+	delete []c_string;
+}
+
+template<class T> 
+void LLStringUtilBase<T>::_makeASCII(std::basic_string<T>& string)
+{
+	// Replace non-ASCII chars with LL_UNKNOWN_CHAR
+	for (size_type i = 0; i < string.length(); i++)
+	{
+		if (string[i] > 0x7f)
+		{
+			string[i] = LL_UNKNOWN_CHAR;
+		}
+	}
+}
+
+// static
+template<class T> 
+void LLStringUtilBase<T>::copy( T* dst, const T* src, size_type dst_size )
+{
+	if( dst_size > 0 )
+	{
+		size_type min_len = 0;
+		if( src )
+		{
+			min_len = llmin( dst_size - 1, strlen( src ) );  /* Flawfinder: ignore */
+			memcpy(dst, src, min_len * sizeof(T));		/* Flawfinder: ignore */
+		}
+		dst[min_len] = '\0';
+	}
+}
+
+// static
+template<class T> 
+void LLStringUtilBase<T>::copyInto(std::basic_string<T>& dst, const std::basic_string<T>& src, size_type offset)
+{
+	if ( offset == dst.length() )
+	{
+		// special case - append to end of string and avoid expensive
+		// (when strings are large) string manipulations
+		dst += src;
+	}
+	else
+	{
+		std::basic_string<T> tail = dst.substr(offset);
+
+		dst = dst.substr(0, offset);
+		dst += src;
+		dst += tail;
+	};
+}
+
+// True if this is the head of s.
+//static
+template<class T> 
+BOOL LLStringUtilBase<T>::isHead( const std::basic_string<T>& string, const T* s ) 
+{ 
+	if( string.empty() )
+	{
+		// Early exit
+		return FALSE;
+	}
+	else
+	{
+		return (strncmp( s, string.c_str(), string.size() ) == 0);
+	}
+}
+
+// static
+template<class T> 
+bool LLStringUtilBase<T>::startsWith(
+	const std::basic_string<T>& string,
+	const std::basic_string<T>& substr)
+{
+	if(string.empty() || (substr.empty())) return false;
+	if(0 == string.find(substr)) return true;
+	return false;
+}
+
+// static
+template<class T> 
+bool LLStringUtilBase<T>::endsWith(
+	const std::basic_string<T>& string,
+	const std::basic_string<T>& substr)
+{
+	if(string.empty() || (substr.empty())) return false;
+	std::string::size_type idx = string.rfind(substr);
+	if(std::string::npos == idx) return false;
+	return (idx == (string.size() - substr.size()));
+}
+
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToBOOL(const std::basic_string<T>& string, BOOL& value)
+{
+	if( string.empty() )
+	{
+		return FALSE;
+	}
+
+	std::basic_string<T> temp( string );
+	trim(temp);
+	if( 
+		(temp == "1") || 
+		(temp == "T") || 
+		(temp == "t") || 
+		(temp == "TRUE") || 
+		(temp == "true") || 
+		(temp == "True") )
+	{
+		value = TRUE;
+		return TRUE;
+	}
+	else
+	if( 
+		(temp == "0") || 
+		(temp == "F") || 
+		(temp == "f") || 
+		(temp == "FALSE") || 
+		(temp == "false") || 
+		(temp == "False") )
+	{
+		value = FALSE;
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToU8(const std::basic_string<T>& string, U8& value) 
+{
+	S32 value32 = 0;
+	BOOL success = convertToS32(string, value32);
+	if( success && (U8_MIN <= value32) && (value32 <= U8_MAX) )
+	{
+		value = (U8) value32;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToS8(const std::basic_string<T>& string, S8& value) 
+{
+	S32 value32 = 0;
+	BOOL success = convertToS32(string, value32);
+	if( success && (S8_MIN <= value32) && (value32 <= S8_MAX) )
+	{
+		value = (S8) value32;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToS16(const std::basic_string<T>& string, S16& value) 
+{
+	S32 value32 = 0;
+	BOOL success = convertToS32(string, value32);
+	if( success && (S16_MIN <= value32) && (value32 <= S16_MAX) )
+	{
+		value = (S16) value32;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToU16(const std::basic_string<T>& string, U16& value) 
+{
+	S32 value32 = 0;
+	BOOL success = convertToS32(string, value32);
+	if( success && (U16_MIN <= value32) && (value32 <= U16_MAX) )
+	{
+		value = (U16) value32;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToU32(const std::basic_string<T>& string, U32& value) 
+{
+	if( string.empty() )
+	{
+		return FALSE;
+	}
+
+	std::basic_string<T> temp( string );
+	trim(temp);
+	U32 v;
+	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
+	if(i_stream >> v)
+	{
+		value = v;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToS32(const std::basic_string<T>& string, S32& value) 
+{
+	if( string.empty() )
+	{
+		return FALSE;
+	}
+
+	std::basic_string<T> temp( string );
+	trim(temp);
+	S32 v;
+	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
+	if(i_stream >> v)
+	{
+		//TODO: figure out overflow and underflow reporting here
+		//if((LONG_MAX == v) || (LONG_MIN == v))
+		//{
+		//	// Underflow or overflow
+		//	return FALSE;
+		//}
+
+		value = v;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToF32(const std::basic_string<T>& string, F32& value) 
+{
+	F64 value64 = 0.0;
+	BOOL success = convertToF64(string, value64);
+	if( success && (-F32_MAX <= value64) && (value64 <= F32_MAX) )
+	{
+		value = (F32) value64;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+BOOL LLStringUtilBase<T>::convertToF64(const std::basic_string<T>& string, F64& value)
+{
+	if( string.empty() )
+	{
+		return FALSE;
+	}
+
+	std::basic_string<T> temp( string );
+	trim(temp);
+	F64 v;
+	std::basic_istringstream<T> i_stream((std::basic_string<T>)temp);
+	if(i_stream >> v)
+	{
+		//TODO: figure out overflow and underflow reporting here
+		//if( ((-HUGE_VAL == v) || (HUGE_VAL == v))) )
+		//{
+		//	// Underflow or overflow
+		//	return FALSE;
+		//}
+
+		value = v;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+template<class T> 
+void LLStringUtilBase<T>::truncate(std::basic_string<T>& string, size_type count)
+{
+	size_type cur_size = string.size();
+	string.resize(count < cur_size ? count : cur_size);
+}
+
+#endif  // LL_STRING_H
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index c3d7650bd9b2d101ddb117c5b1fa679665f17f75..932d96d9406b8e3bdd1ee97eacaf1b78430e6011 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -33,9 +33,7 @@
 #ifndef LL_LLTHREAD_H
 #define LL_LLTHREAD_H
 
-#include "llapr.h"
 #include "llapp.h"
-
 #include "apr_thread_cond.h"
 
 class LLThread;
diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
index 71c6fc059192e85fe03ca70fded4c6a8d90ceaba..0f1e59a18cce8886fbb562add35ef5b1437d6ee5 100644
--- a/indra/llcommon/llversionserver.h
+++ b/indra/llcommon/llversionserver.h
@@ -36,7 +36,7 @@
 const S32 LL_VERSION_MAJOR = 1;
 const S32 LL_VERSION_MINOR = 31;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 3256;
+const S32 LL_VERSION_BUILD = 200030;
 
 const char * const LL_CHANNEL = "Second Life Server";
 
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 082d054ba2efa5a6d53bf6bed1c8e86d561c4bb4..540aea42522a261e2ac1bd007999a97485ec5ed5 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -36,7 +36,7 @@
 const S32 LL_VERSION_MAJOR = 2;
 const S32 LL_VERSION_MINOR = 0;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 3256;
+const S32 LL_VERSION_BUILD = 200030;
 
 const char * const LL_CHANNEL = "Second Life Developer";
 
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 5dda60075534e902230bdf28a28a3e847c8e758c..82c736266db63eddb435f0e9d197130a499283a2 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -201,6 +201,7 @@ LLWorkerClass::~LLWorkerClass()
 {
 	llassert_always(!(mWorkFlags & WCF_WORKING));
 	llassert_always(mWorkFlags & WCF_DELETE_REQUESTED);
+	llassert_always(!mMutex.isLocked());
 	if (mRequestHandle != LLWorkerThread::nullHandle())
 	{
 		LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index a12bd52a648775f4532606848442873e6e89148d..a1e85d2ecc871143ea38c60e68ff32c9ec3def85 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -52,6 +52,7 @@ class LLWorkerClass;
 
 class LL_COMMON_API LLWorkerThread : public LLQueuedThread
 {
+	friend class LLWorkerClass;
 public:
 	class WorkRequest : public LLQueuedThread::QueuedRequest
 	{
@@ -92,8 +93,11 @@ class LL_COMMON_API LLWorkerThread : public LLQueuedThread
 	
 	handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
 	
-	void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
 	S32 getNumDeletes() { return (S32)mDeleteList.size(); } // debug
+
+private:
+	void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
+	
 };
 
 //============================================================================
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
index 0635ddd5f5c2ed6da1e3f96b41ffa857b7cfdf7b..22be4078a1b034280a4ae36b07ee86eb396d9e8c 100644
--- a/indra/llimage/CMakeLists.txt
+++ b/indra/llimage/CMakeLists.txt
@@ -3,6 +3,7 @@
 project(llimage)
 
 include(00-Common)
+include(LLAddBuildTest)
 include(LLCommon)
 include(LLImage)
 include(LLMath)
@@ -59,3 +60,6 @@ target_link_libraries(llimage
     ${PNG_LIBRARIES}
     ${ZLIB_LIBRARIES}
     )
+
+# Add tests
+#ADD_BUILD_TEST(llimageworker llimage)
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 9bbc55509dd8f48809426d69cbfbe0d0c9bf5d0d..575ad5363d81f9de61d3a41d9fc3c1cf1950ea6a 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -55,13 +55,9 @@ std::string LLImage::sLastErrorMessage;
 LLMutex* LLImage::sMutex = NULL;
 
 //static
-void LLImage::initClass(LLWorkerThread* workerthread)
+void LLImage::initClass()
 {
 	sMutex = new LLMutex(NULL);
-	if (workerthread)
-	{
-		LLImageWorker::initImageWorker(workerthread);
-	}
 	LLImageJ2C::openDSO();
 }
 
@@ -69,7 +65,6 @@ void LLImage::initClass(LLWorkerThread* workerthread)
 void LLImage::cleanupClass()
 {
 	LLImageJ2C::closeDSO();
-	LLImageWorker::cleanupImageWorker();
 	delete sMutex;
 	sMutex = NULL;
 }
@@ -316,6 +311,21 @@ void LLImageRaw::deleteData()
 	LLImageBase::deleteData();
 }
 
+void LLImageRaw::setDataAndSize(U8 *data, S32 width, S32 height, S8 components) 
+{ 
+	if(data == getData())
+	{
+		return ;
+	}
+
+	deleteData();
+
+	LLImageBase::setSize(width, height, components) ;
+	LLImageBase::setDataAndSize(data, width * height * components) ;
+	
+	sGlobalRawMemory += getDataSize();
+}
+
 BOOL LLImageRaw::resize(U16 width, U16 height, S8 components)
 {
 	if ((getWidth() == width) && (getHeight() == height) && (getComponents() == components))
@@ -816,6 +826,51 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
 	}
 }
 
+//scale down image by not blending a pixel with its neighbors.
+BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height)
+{
+	LLMemType mt1(mMemType);
+
+	S8 c = getComponents() ;
+	llassert((1 == c) || (3 == c) || (4 == c) );
+
+	S32 old_width = getWidth();
+	S32 old_height = getHeight();
+	
+	S32 new_data_size = old_width * new_height * c ;
+	llassert_always(new_data_size > 0);
+
+	F32 ratio_x = (F32)old_width / new_width ;
+	F32 ratio_y = (F32)old_height / new_height ;
+	if( ratio_x < 1.0f || ratio_y < 1.0f )
+	{
+		return TRUE;  // Nothing to do.
+	}
+	ratio_x -= 1.0f ;
+	ratio_y -= 1.0f ;
+
+	U8* new_data = new U8[new_data_size] ;
+	llassert_always(new_data != NULL) ;
+
+	U8* old_data = getData() ;
+	S32 i, j, k, s, t;
+	for(i = 0, s = 0, t = 0 ; i < new_height ; i++)
+	{
+		for(j = 0 ; j < new_width ; j++)
+		{
+			for(k = 0 ; k < c ; k++)
+			{
+				new_data[s++] = old_data[t++] ;
+			}
+			t += (S32)(ratio_x * c + 0.1f) ;
+		}
+		t += (S32)(ratio_y * old_width * c + 0.1f) ;
+	}
+
+	setDataAndSize(new_data, new_width, new_height, c) ;
+	
+	return TRUE ;
+}
 
 BOOL LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data )
 {
@@ -1223,25 +1278,28 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
 	ifs.read ((char*)buffer, length);
 	ifs.close();
 	
-	image->updateData();
-	
-	if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
+	BOOL success;
+
+	success = image->updateData();
+	if (success)
 	{
-		S32 width = image->getWidth();
-		S32 height = image->getHeight();
-		S32 discard_level = 0;
-		while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+		if (j2c_lowest_mip_only && codec == IMG_CODEC_J2C)
 		{
-			width >>= 1;
-			height >>= 1;
-			discard_level++;
+			S32 width = image->getWidth();
+			S32 height = image->getHeight();
+			S32 discard_level = 0;
+			while (width > 1 && height > 1 && discard_level < MAX_DISCARD_LEVEL)
+			{
+				width >>= 1;
+				height >>= 1;
+				discard_level++;
+			}
+			((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
 		}
-		((LLImageJ2C *)((LLImageFormatted*)image))->setDiscardLevel(discard_level);
+		success = image->decode(this, 100000.0f);
 	}
-	
-	BOOL success = image->decode(this, 100000.0f);
-	image = NULL; // deletes image
 
+	image = NULL; // deletes image
 	if (!success)
 	{
 		deleteData();
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index 81085531072dc7eda16fac65930999971f96063e..686f58388653fa1f5ff2e9814ea96ef46e889a0e 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -50,7 +50,8 @@ const S32 MAX_IMAGE_AREA = MAX_IMAGE_SIZE * MAX_IMAGE_SIZE;
 const S32 MAX_IMAGE_COMPONENTS = 8;
 const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS;
 
-// Note!  These CANNOT be changed without invalidating the viewer VFS files, I think?
+// Note!  These CANNOT be changed without modifying simulator code
+// *TODO: change both to 1024 when SIM texture fetching is deprecated
 const S32 FIRST_PACKET_SIZE = 600;
 const S32 MAX_IMG_PACKET_SIZE = 1000;
 
@@ -61,7 +62,6 @@ const S32 MAX_IMG_PACKET_SIZE = 1000;
 class LLImageFormatted;
 class LLImageRaw;
 class LLColor4U;
-class LLWorkerThread;
 
 typedef enum e_image_codec
 {
@@ -82,7 +82,7 @@ typedef enum e_image_codec
 class LLImage
 {
 public:
-	static void initClass(LLWorkerThread* workerthread);
+	static void initClass();
 	static void cleanupClass();
 
 	static const std::string& getLastError();
@@ -131,7 +131,7 @@ class LLImageBase : public LLThreadSafeRefCount
 
 protected:
 	// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted
-	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; };
+	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }
 	
 public:
 	static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels);
@@ -192,6 +192,7 @@ class LLImageRaw : public LLImageBase
 	void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
 	void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE);
 	BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE );
+	BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
 
 	// Fill the buffer with a constant color
 	void fill( const LLColor4U& color );
@@ -240,6 +241,8 @@ class LLImageRaw : public LLImageBase
 
 	U8	fastFractionalMult(U8 a,U8 b);
 
+	void setDataAndSize(U8 *data, S32 width, S32 height, S8 components) ;
+
 public:
 	static S32 sGlobalRawMemory;
 	static S32 sRawImageCount;
@@ -310,7 +313,7 @@ class LLImageFormatted : public LLImageBase
 protected:
 	S8 mCodec;
 	S8 mDecoding;
-	S8 mDecoded;
+	S8 mDecoded;  // unused, but changing LLImage layout requires recompiling static Mac/Linux libs. 2009-01-30 JC
 	S8 mDiscardLevel;
 	
 public:
diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp
index 1ce4517a0d152b11fcb0ccba3a1ea9506dd58a41..0aa6840ff6aa99068e46d32e061ced5e3652aa18 100644
--- a/indra/llimage/llimagedxt.cpp
+++ b/indra/llimage/llimagedxt.cpp
@@ -264,6 +264,8 @@ void LLImageDXT::setFormat()
 // virtual
 BOOL LLImageDXT::decode(LLImageRaw* raw_image, F32 time)
 {
+	// *TODO: Test! This has been tweaked since its intial inception,
+	//  but we don't use it any more!
 	llassert_always(raw_image);
 	
 	if (mFileFormat >= FORMAT_DXT1 && mFileFormat <= FORMAT_DXR5)
@@ -274,8 +276,17 @@ BOOL LLImageDXT::decode(LLImageRaw* raw_image, F32 time)
 	
 	S32 width = getWidth(), height = getHeight();
 	S32 ncomponents = getComponents();
+	U8* data = NULL;
+	if (mDiscardLevel >= 0)
+	{
+		data = getData() + getMipOffset(mDiscardLevel);
+		calcDiscardWidthHeight(mDiscardLevel, mFileFormat, width, height);
+	}
+	else
+	{
+		data = getData() + getMipOffset(0);
+	}
 	S32 image_size = formatBytes(mFileFormat, width, height);
-	U8* data = getData() + getMipOffset(0);
 	
 	if ((!getData()) || (data + image_size > getData() + getDataSize()))
 	{
@@ -300,10 +311,8 @@ BOOL LLImageDXT::getMipData(LLPointer<LLImageRaw>& raw, S32 discard)
 		llerrs << "Request for invalid discard level" << llendl;
 	}
 	U8* data = getData() + getMipOffset(discard);
-	// I'm not sure these are the correct initial values for height and width,
-	// but previously they were being used uninitialized. JC
-	S32 width = raw->getWidth();
-	S32 height = raw->getHeight();
+	S32 width = 0;
+	S32 height = 0;
 	calcDiscardWidthHeight(discard, mFileFormat, width, height);
 	raw = new LLImageRaw(data, width, height, getComponents());
 	return TRUE;
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index 2352c8edd725112b80c12cd7937d9ed538ef4dd6..74f08b2d0b976b89a0833b49fd978a2fa9299483 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -283,6 +283,7 @@ BOOL LLImageJ2C::decode(LLImageRaw *raw_imagep, F32 decode_time)
 }
 
 
+// Returns TRUE to mean done, whether successful or not.
 BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 first_channel, S32 max_channel_count )
 {
 	LLMemType mt1(mMemType);
@@ -295,7 +296,7 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir
 	if (!getData() || (getDataSize() < 16))
 	{
 		setLastError("LLImageJ2C uninitialized");
-		res = FALSE;
+		res = TRUE; // done
 	}
 	else
 	{
@@ -348,7 +349,7 @@ BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, const char* comment_text,
 //static
 S32 LLImageJ2C::calcHeaderSizeJ2C()
 {
-	return 600; //2048; // ??? hack... just needs to be >= actual header size...
+	return FIRST_PACKET_SIZE; // Hack. just needs to be >= actual header size...
 }
 
 //static
diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp
index fa0dd3ff050f3d32afe911147da47985ec7c90a7..79ea79cc070f52cbb29f92223c4661ffb622bdd0 100644
--- a/indra/llimage/llimagejpeg.cpp
+++ b/indra/llimage/llimagejpeg.cpp
@@ -188,6 +188,7 @@ void LLImageJPEG::decodeTermSource (j_decompress_ptr cinfo)
 }
 
 
+// Returns true when done, whether or not decode was successful.
 BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 {
 	llassert_always(raw_image);
@@ -198,7 +199,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	if (!getData() || (0 == getDataSize()))
 	{
 		setLastError("LLImageJPEG trying to decode an image with no data!");
-		return FALSE;
+		return TRUE;  // done
 	}
 	
 	S32 row_stride = 0;
@@ -226,7 +227,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	if(setjmp(sSetjmpBuffer))
 	{
 		jpeg_destroy_decompress(&cinfo);
-		return FALSE;
+		return TRUE; // done
 	}
 	try
 	{
@@ -320,7 +321,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	catch (int)
 	{
 		jpeg_destroy_decompress(&cinfo);
-		return FALSE;
+		return TRUE; // done
 	}
 
 	// Check to see whether any corrupt-data warnings occurred
@@ -328,7 +329,7 @@ BOOL LLImageJPEG::decode(LLImageRaw* raw_image, F32 decode_time)
 	{
 		// TODO: extract the warning to find out what went wrong.
 		setLastError( "Unable to decode JPEG image.");
-		return FALSE;
+		return TRUE; // done
 	}
 
 	return TRUE;
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 532e996188d5f5d2c1a577a217eef24858a96c11..86d41515e7ce85912925dc878d946a367033ac79 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -37,152 +37,138 @@
 
 //----------------------------------------------------------------------------
 
-//static
-LLWorkerThread* LLImageWorker::sWorkerThread = NULL;
-S32 LLImageWorker::sCount = 0;
+// MAIN THREAD
+LLImageDecodeThread::LLImageDecodeThread(bool threaded)
+	: LLQueuedThread("imagedecode", threaded)
+{
+	mCreationMutex = new LLMutex(getAPRPool());
+}
 
-//static
-void LLImageWorker::initImageWorker(LLWorkerThread* workerthread)
+// MAIN THREAD
+// virtual
+S32 LLImageDecodeThread::update(U32 max_time_ms)
 {
-	sWorkerThread = workerthread;
+	LLMutexLock lock(mCreationMutex);
+	for (creation_list_t::iterator iter = mCreationList.begin();
+		 iter != mCreationList.end(); ++iter)
+	{
+		creation_info& info = *iter;
+		ImageRequest* req = new ImageRequest(info.handle, info.image,
+											 info.priority, info.discard, info.needs_aux,
+											 info.responder);
+		addRequest(req);
+	}
+	mCreationList.clear();
+	S32 res = LLQueuedThread::update(max_time_ms);
+	return res;
 }
 
-//static
-void LLImageWorker::cleanupImageWorker()
+LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* image, 
+	U32 priority, S32 discard, BOOL needs_aux, Responder* responder)
+{
+	LLMutexLock lock(mCreationMutex);
+	handle_t handle = generateHandle();
+	mCreationList.push_back(creation_info(handle, image, priority, discard, needs_aux, responder));
+	return handle;
+}
+
+// Used by unit test only
+// Returns the size of the mutex guarded list as an indication of sanity
+S32 LLImageDecodeThread::tut_size()
+{
+	LLMutexLock lock(mCreationMutex);
+	S32 res = mCreationList.size();
+	return res;
+}
+
+LLImageDecodeThread::Responder::~Responder()
 {
 }
 
 //----------------------------------------------------------------------------
 
-LLImageWorker::LLImageWorker(LLImageFormatted* image, U32 priority,
-							 S32 discard,
-							 LLPointer<LLResponder> responder)
-	: LLWorkerClass(sWorkerThread, "Image"),
+LLImageDecodeThread::ImageRequest::ImageRequest(handle_t handle, LLImageFormatted* image, 
+												U32 priority, S32 discard, BOOL needs_aux,
+												LLImageDecodeThread::Responder* responder)
+	: LLQueuedThread::QueuedRequest(handle, priority, FLAG_AUTO_COMPLETE),
 	  mFormattedImage(image),
-	  mDecodedType(-1),
 	  mDiscardLevel(discard),
-	  mPriority(priority),
+	  mNeedsAux(needs_aux),
+	  mDecodedRaw(FALSE),
+	  mDecodedAux(FALSE),
 	  mResponder(responder)
 {
-	++sCount;
 }
 
-LLImageWorker::~LLImageWorker()
+LLImageDecodeThread::ImageRequest::~ImageRequest()
 {
-	mDecodedImage = NULL;
+	mDecodedImageRaw = NULL;
+	mDecodedImageAux = NULL;
 	mFormattedImage = NULL;
-	--sCount;
 }
 
 //----------------------------------------------------------------------------
 
-//virtual, main thread
-void LLImageWorker::startWork(S32 param)
-{
-	llassert_always(mDecodedImage.isNull());
-	mDecodedType = -1;
-}
 
-bool LLImageWorker::doWork(S32 param)
+// Returns true when done, whether or not decode was successful.
+bool LLImageDecodeThread::ImageRequest::processRequest()
 {
-	bool decoded = false;
-	if(mDecodedImage.isNull())
+	const F32 decode_time_slice = .1f;
+	bool done = true;
+	if (!mDecodedRaw && mFormattedImage.notNull())
 	{
-		if (!mFormattedImage->updateData())
-		{
-			mDecodedType = -2; // failed
-			return true;
-		}
-		if (mDiscardLevel >= 0)
+		// Decode primary channels
+		if (mDecodedImageRaw.isNull())
 		{
-			mFormattedImage->setDiscardLevel(mDiscardLevel);
-		}
-		if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
-		{
-			decoded = true; // failed
-		}
-		else
-		{
-			mDecodedImage = new LLImageRaw(); // allow possibly smaller size set during decoding
+			// parse formatted header
+			if (!mFormattedImage->updateData())
+			{
+				return true; // done (failed)
+			}
+			if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
+			{
+				return true; // done (failed)
+			}
+			if (mDiscardLevel >= 0)
+			{
+				mFormattedImage->setDiscardLevel(mDiscardLevel);
+			}
+			mDecodedImageRaw = new LLImageRaw(mFormattedImage->getWidth(),
+											  mFormattedImage->getHeight(),
+											  mFormattedImage->getComponents());
 		}
+		done = mFormattedImage->decode(mDecodedImageRaw, decode_time_slice); // 1ms
+		mDecodedRaw = done;
 	}
-	if (!decoded)
+	if (done && mNeedsAux && !mDecodedAux && mFormattedImage.notNull())
 	{
-		if (param == 0)
-		{
-			// Decode primary channels
-			decoded = mFormattedImage->decode(mDecodedImage, .1f); // 1ms
-		}
-		else
+		// Decode aux channel
+		if (!mDecodedImageAux)
 		{
-			// Decode aux channel
-			decoded = mFormattedImage->decodeChannels(mDecodedImage, .1f, param, param); // 1ms
+			mDecodedImageAux = new LLImageRaw(mFormattedImage->getWidth(),
+											  mFormattedImage->getHeight(),
+											  1);
 		}
+		done = mFormattedImage->decodeChannels(mDecodedImageAux, decode_time_slice, 4, 4); // 1ms
+		mDecodedAux = done;
 	}
-	if (decoded)
-	{
-		// Call the callback immediately; endWork doesn't get called until ckeckWork
-		if (mResponder.notNull())
-		{
-			bool success = (!wasAborted() && mDecodedImage.notNull() && mDecodedImage->getDataSize() != 0);
-			mResponder->completed(success);
-		}
-	}
-	return decoded;
-}
 
-void LLImageWorker::endWork(S32 param, bool aborted)
-{
-	if (mDecodedType != -2)
-	{
-		mDecodedType = aborted ? -2 : param;
-	}
+	return done;
 }
 
-//----------------------------------------------------------------------------
-
-
-BOOL LLImageWorker::requestDecodedAuxData(LLPointer<LLImageRaw>& raw, S32 channel, S32 discard)
+void LLImageDecodeThread::ImageRequest::finishRequest(bool completed)
 {
-	// For most codecs, only mDiscardLevel data is available.
-	//  (see LLImageDXT for exception)
-	if (discard >= 0 && discard != mFormattedImage->getDiscardLevel())
-	{
-		llerrs << "Request for invalid discard level" << llendl;
-	}
-	checkWork();
-	if (mDecodedType == -2)
+	if (mResponder.notNull())
 	{
-		return TRUE; // aborted, done
-	}
-	if (mDecodedType != channel)
-	{
-		if (!haveWork())
-		{
-			addWork(channel, mPriority);
-		}
-		return FALSE;
-	}
-	else
-	{
-		llassert_always(!haveWork());
-		llassert_always(mDecodedType == channel);
-		raw = mDecodedImage; // smart pointer acquires ownership of data
-		mDecodedImage = NULL;
-		return TRUE;
+		bool success = completed && mDecodedRaw && (!mNeedsAux || mDecodedAux);
+		mResponder->completed(success, mDecodedImageRaw, mDecodedImageAux);
 	}
+	// Will automatically be deleted
 }
 
-BOOL LLImageWorker::requestDecodedData(LLPointer<LLImageRaw>& raw, S32 discard)
+// Used by unit test only
+// Checks that a responder exists for this instance so that something can happen when completion is reached
+bool LLImageDecodeThread::ImageRequest::tut_isOK()
 {
-	if (mFormattedImage->getCodec() == IMG_CODEC_DXT)
-	{
-		// special case
-		LLImageDXT* imagedxt = (LLImageDXT*)((LLImageFormatted*)mFormattedImage);
-		return imagedxt->getMipData(raw, discard);
-	}
-	else
-	{
-		return requestDecodedAuxData(raw, 0, discard);
-	}
+	return mResponder.notNull();
 }
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index 0d66695d6ecfc7e09c7a25a37875fd1bed295fc2..6a5b86a277940cf2bf28d2358d9c480cf122d142 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -37,49 +37,72 @@
 #include "llpointer.h"
 #include "llworkerthread.h"
 
-class LLImageWorker : public LLWorkerClass
+class LLImageDecodeThread : public LLQueuedThread
 {
 public:
-	static void initImageWorker(LLWorkerThread* workerthread);
-	static void cleanupImageWorker();
-	
-public:
-	static LLWorkerThread* getWorkerThread() { return sWorkerThread; }
-
-	// LLWorkerThread
-public:
-	LLImageWorker(LLImageFormatted* image, U32 priority, S32 discard,
-				  LLPointer<LLResponder> responder);
-	~LLImageWorker();
-
-	// called from WORKER THREAD, returns TRUE if done
-	/*virtual*/ bool doWork(S32 param);
-	
-	BOOL requestDecodedData(LLPointer<LLImageRaw>& raw, S32 discard = -1);
-	BOOL requestDecodedAuxData(LLPointer<LLImageRaw>& raw, S32 channel, S32 discard = -1);
-	void releaseDecodedData();
-	void cancelDecode();
+	class Responder : public LLThreadSafeRefCount
+	{
+	protected:
+		virtual ~Responder();
+	public:
+		virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux) = 0;
+	};
 
-private:
-	// called from MAIN THREAD
-	/*virtual*/ void startWork(S32 param); // called from addWork()
-	/*virtual*/ void endWork(S32 param, bool aborted); // called from doWork()
+	class ImageRequest : public LLQueuedThread::QueuedRequest
+	{
+	protected:
+		virtual ~ImageRequest(); // use deleteRequest()
+		
+	public:
+		ImageRequest(handle_t handle, LLImageFormatted* image,
+					 U32 priority, S32 discard, BOOL needs_aux,
+					 LLImageDecodeThread::Responder* responder);
 
-protected:
-	LLPointer<LLImageFormatted> mFormattedImage;
-	LLPointer<LLImageRaw> mDecodedImage;
-	S32 mDecodedType;
-	S32 mDiscardLevel;
+		/*virtual*/ bool processRequest();
+		/*virtual*/ void finishRequest(bool completed);
 
-private:
-	U32 mPriority;
-	LLPointer<LLResponder> mResponder;
+		// Used by unit tests to check the consitency of the request instance
+		bool tut_isOK();
+		
+	private:
+		// input
+		LLPointer<LLImageFormatted> mFormattedImage;
+		S32 mDiscardLevel;
+		BOOL mNeedsAux;
+		// output
+		LLPointer<LLImageRaw> mDecodedImageRaw;
+		LLPointer<LLImageRaw> mDecodedImageAux;
+		BOOL mDecodedRaw;
+		BOOL mDecodedAux;
+		LLPointer<LLImageDecodeThread::Responder> mResponder;
+	};
 	
-protected:
-	static LLWorkerThread* sWorkerThread;
-
 public:
-	static S32 sCount;
+	LLImageDecodeThread(bool threaded = true);
+	handle_t decodeImage(LLImageFormatted* image,
+						 U32 priority, S32 discard, BOOL needs_aux,
+						 Responder* responder);
+	S32 update(U32 max_time_ms);
+
+	// Used by unit tests to check the consistency of the thread instance
+	S32 tut_size();
+	
+private:
+	struct creation_info
+	{
+		handle_t handle;
+		LLPointer<LLImageFormatted> image;
+		U32 priority;
+		S32 discard;
+		BOOL needs_aux;
+		LLPointer<Responder> responder;
+		creation_info(handle_t h, LLImageFormatted* i, U32 p, S32 d, BOOL aux, Responder* r)
+			: handle(h), image(i), priority(p), discard(d), needs_aux(aux), responder(r)
+		{}
+	};
+	typedef std::list<creation_info> creation_list_t;
+	creation_list_t mCreationList;
+	LLMutex* mCreationMutex;
 };
 
 #endif
diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cc44696a453b9f3cfaabee57867f26f510c86593
--- /dev/null
+++ b/indra/llimage/tests/llimageworker_test.cpp
@@ -0,0 +1,260 @@
+/** 
+ * @file llimageworker_test.cpp
+ * @author Merov Linden
+ * @date 2009-04-28
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include <list>
+#include <map>
+#include <algorithm>
+// Class to test
+#include "../llimageworker.h"
+// For timer class
+#include "../llcommon/lltimer.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+LLImageBase::LLImageBase() {}
+LLImageBase::~LLImageBase() {}
+void LLImageBase::dump() { }
+void LLImageBase::sanityCheck() { }
+void LLImageBase::deleteData() { }
+U8* LLImageBase::allocateData(S32 size) { return NULL; }
+U8* LLImageBase::reallocateData(S32 size) { return NULL; }
+
+LLImageRaw::LLImageRaw(U16 width, U16 height, S8 components) { }
+LLImageRaw::~LLImageRaw() { }
+void LLImageRaw::deleteData() { }
+U8* LLImageRaw::allocateData(S32 size) { return NULL; }
+U8* LLImageRaw::reallocateData(S32 size) { return NULL; }
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+
+	// Note: We derive the responder class for 2 reasons:
+	// 1. It's a pure virtual class and we can't compile without completed() being implemented
+	// 2. We actually need a responder to test that the thread work test completed
+	// We implement this making no assumption on what's done in the thread or worker
+	// though, just that the responder's completed() method is called in the end.
+	// Note on responders: responders are ref counted and *will* be deleted by the request they are 
+	// attached to when the queued request is deleted. The recommended way of using them is to 
+	// create them when creating a request, put a callback method in completed() and not rely on 
+	// anything to survive in the responder object once completed() has been called. Let the request
+	// do the deletion and clean up itself.
+	class responder_test : public LLImageDecodeThread::Responder
+	{
+		public:
+			responder_test(bool* res)
+			{ 
+				done = res;
+				*done = false;
+			}
+			virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)
+			{
+				*done = true;
+			}
+		private:
+			// This is what can be thought of as the minimal implementation of a responder
+			// Done will be switched to true when completed() is called and can be tested
+			// outside the responder. A better way of doing this is to store a callback here.
+			bool* done;
+	};
+
+	// Test wrapper declaration : decode thread
+	struct imagedecodethread_test
+	{
+		// Instance to be tested
+		LLImageDecodeThread* mThread;
+
+		// Constructor and destructor of the test wrapper
+		imagedecodethread_test()
+		{
+			mThread = NULL;
+		}
+		~imagedecodethread_test()
+		{
+			delete mThread;
+		}
+	};
+
+	// Test wrapper declaration : image worker
+	// Note: this class is not meant to be instantiated outside an LLImageDecodeThread instance
+	// but it's not a bad idea to get its public API a good shake as part of a thorough unit test set.
+	// Some gotcha with the destructor though (see below).
+	struct imagerequest_test
+	{
+		// Instance to be tested
+		LLImageDecodeThread::ImageRequest* mRequest;
+		bool done;
+
+		// Constructor and destructor of the test wrapper
+		imagerequest_test()
+		{
+			done = false;
+			mRequest = new LLImageDecodeThread::ImageRequest(0, 0,
+											 LLQueuedThread::PRIORITY_NORMAL, 0, FALSE,
+											 new responder_test(&done));
+		}
+		~imagerequest_test()
+		{
+			// We should delete the object *but*, because its destructor is protected, that cannot be
+			// done from outside an LLImageDecodeThread instance... So we leak memory here... It's fine...
+			//delete mRequest;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<imagedecodethread_test> imagedecodethread_t;
+	typedef imagedecodethread_t::object imagedecodethread_object_t;
+	tut::imagedecodethread_t tut_imagedecodethread("imagedecodethread");
+
+	typedef test_group<imagerequest_test> imagerequest_t;
+	typedef imagerequest_t::object imagerequest_object_t;
+	tut::imagerequest_t tut_imagerequest("imagerequest");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLImageDecodeThread interface
+	// ---------------------------------------------------------------------------------------
+	//
+	// Note on Unit Testing Queued Thread Classes
+	//
+	// Since methods on such a class are called on a separate loop and that we can't insert tut
+	// ensure() calls in there, we exercise the class with 2 sets of tests:
+	// - 1: Test as a single threaded instance: We declare the class but ask for no thread
+	//   to be spawned (easy with LLThreads since there's a boolean argument on the constructor
+	//   just for that). We can then unit test each public method like we do on a normal class.
+	// - 2: Test as a threaded instance: We let the thread launch and check that its external 
+	//   behavior is as expected (i.e. it runs, can accept a work order and processes
+	//   it). Typically though there's no guarantee that this exercises all the methods of the
+	//   class which is why we also need the previous "non threaded" set of unit tests for
+	//   complete coverage.
+	//
+	// ---------------------------------------------------------------------------------------
+
+	template<> template<>
+	void imagedecodethread_object_t::test<1>()
+	{
+		// Test a *non threaded* instance of the class
+		mThread = new LLImageDecodeThread(false);
+		ensure("LLImageDecodeThread: non threaded constructor failed", mThread != NULL);
+		// Test that we start with an empty list right at creation
+		ensure("LLImageDecodeThread: non threaded init state incorrect", mThread->tut_size() == 0);
+		// Insert something in the queue
+		bool done = false;
+		LLImageDecodeThread::handle_t decodeHandle = mThread->decodeImage(NULL, LLQueuedThread::PRIORITY_NORMAL, 0, FALSE, new responder_test(&done));
+		// Verifies we got a valid handle
+		ensure("LLImageDecodeThread: non threaded decodeImage(), returned handle is null", decodeHandle != 0);
+		// Verifies that we do now have something in the queued list
+		ensure("LLImageDecodeThread: non threaded decodeImage() insertion in threaded list failed", mThread->tut_size() == 1);
+		// Trigger queue handling "manually" (on a threaded instance, this is done on the thread loop)
+		S32 res = mThread->update(0);
+		// Verifies that we successfully handled the list
+		ensure("LLImageDecodeThread: non threaded update() list handling test failed", res == 0);
+		// Verifies that the list is now empty
+		ensure("LLImageDecodeThread: non threaded update() list emptying test failed", mThread->tut_size() == 0);
+	}
+
+	template<> template<>
+	void imagedecodethread_object_t::test<2>()
+	{
+		// Test a *threaded* instance of the class
+		mThread = new LLImageDecodeThread(true);
+		ensure("LLImageDecodeThread: threaded constructor failed", mThread != NULL);
+		// Test that we start with an empty list right at creation
+		ensure("LLImageDecodeThread: threaded init state incorrect", mThread->tut_size() == 0);
+		// Insert something in the queue
+		bool done = false;
+		LLImageDecodeThread::handle_t decodeHandle = mThread->decodeImage(NULL, LLQueuedThread::PRIORITY_NORMAL, 0, FALSE, new responder_test(&done));
+		// Verifies we get back a valid handle
+		ensure("LLImageDecodeThread:  threaded decodeImage(), returned handle is null", decodeHandle != 0);
+		// Wait a little so to simulate the main thread doing something on its main loop...
+		ms_sleep(500);		// 500 milliseconds
+		// Verifies that the responder has *not* been called yet in the meantime
+		ensure("LLImageDecodeThread: responder creation failed", done == false);
+		// Ask the thread to update: that means tells the queue to check itself and creates work requests
+		mThread->update(1);
+		// Wait till the thread has time to handle the work order (though it doesn't do much per work order...)
+		const U32 INCREMENT_TIME = 500;				// 500 milliseconds
+		const U32 MAX_TIME = 20 * INCREMENT_TIME;	// Do the loop 20 times max, i.e. wait 10 seconds but no more
+		U32 total_time = 0;
+		while ((done == false) && (total_time < MAX_TIME))
+		{
+			ms_sleep(INCREMENT_TIME);
+			total_time += INCREMENT_TIME;
+		}
+		// Verifies that the responder has now been called
+		ensure("LLImageDecodeThread: threaded work unit not processed", done == true);
+	}
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLImageDecodeThread::ImageRequest interface
+	// ---------------------------------------------------------------------------------------
+	
+	template<> template<>
+	void imagerequest_object_t::test<1>()
+	{
+		// Test that we start with a correct request at creation
+		ensure("LLImageDecodeThread::ImageRequest::ImageRequest() constructor test failed", mRequest->tut_isOK());
+		bool res = mRequest->processRequest();
+		// Verifies that we processed the request successfully
+		ensure("LLImageDecodeThread::ImageRequest::processRequest() processing request test failed", res == true);
+		// Check that we can call the finishing call safely
+		try {
+			mRequest->finishRequest(false);
+		} catch (...) {
+			fail("LLImageDecodeThread::ImageRequest::finishRequest() test failed");
+		}
+	}
+}
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
index ec6264dcf55cf7199b65e81d0a1607bfe530999e..e71429b18d3eb4861e7a1f71a48f0fcfd70b622c 100644
--- a/indra/llimagej2coj/llimagej2coj.cpp
+++ b/indra/llimagej2coj/llimagej2coj.cpp
@@ -168,7 +168,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
 	// dereference the array.
 	if(!image || !image->numcomps)
 	{
-		llwarns << "ERROR -> decodeImpl: failed to decode image!" << llendl;
+		LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL;
 		if (image)
 		{
 			opj_image_destroy(image);
@@ -241,7 +241,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
 		}
 		else // Some rare OpenJPEG versions have this bug.
 		{
-			llwarns << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << llendl;
+			LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << LL_ENDL;
 			opj_image_destroy(image);
 
 			return TRUE; // done
@@ -375,7 +375,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
 	if (!bSuccess)
 	{
 		opj_cio_close(cio);
-		llinfos << "Failed to encode image." << llendl;
+		LL_DEBUGS("Texture") << "Failed to encode image." << LL_ENDL;
 		return FALSE;
 	}
 	codestream_length = cio_tell(cio);
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index 5d3fbe51289192d1c33db39247376434fa9df1be..d665deb60507c2d6d3f6b9ed1a3365e1af1615a4 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -1324,7 +1324,7 @@ BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b )
 LLInventoryCategory::LLInventoryCategory(
 	const LLUUID& uuid,
 	const LLUUID& parent_uuid,
-	LLAssetType::EType preferred_type,
+	LLFolderType::EType preferred_type,
 	const std::string& name) :
 	LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name),
 	mPreferredType(preferred_type)
@@ -1332,7 +1332,7 @@ LLInventoryCategory::LLInventoryCategory(
 }
 
 LLInventoryCategory::LLInventoryCategory() :
-	mPreferredType(LLAssetType::AT_NONE)
+	mPreferredType(LLFolderType::FT_NONE)
 {
 	mType = LLAssetType::AT_CATEGORY;
 }
@@ -1354,12 +1354,12 @@ void LLInventoryCategory::copyCategory(const LLInventoryCategory* other)
 	mPreferredType = other->mPreferredType;
 }
 
-LLAssetType::EType LLInventoryCategory::getPreferredType() const
+LLFolderType::EType LLInventoryCategory::getPreferredType() const
 {
 	return mPreferredType;
 }
 
-void LLInventoryCategory::setPreferredType(LLAssetType::EType type)
+void LLInventoryCategory::setPreferredType(LLFolderType::EType type)
 {
 	mPreferredType = type;
 }
@@ -1405,13 +1405,13 @@ bool LLInventoryCategory::fromLLSD(const LLSD& sd)
     if (sd.has(w))
     {
         S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
     }
 	w = INV_ASSET_TYPE_LABEL_WS;
 	if (sd.has(w))
 	{
 		S8 type = (U8)sd[w].asInteger();
-        mPreferredType = static_cast<LLAssetType::EType>(type);
+        mPreferredType = static_cast<LLFolderType::EType>(type);
 	}
 
     w = INV_NAME_LABEL;
@@ -1433,7 +1433,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg,
 	msg->getUUIDFast(block, _PREHASH_ParentID, mParentUUID, block_num);
 	S8 type;
 	msg->getS8Fast(block, _PREHASH_Type, type, block_num);
-	mPreferredType = static_cast<LLAssetType::EType>(type);
+	mPreferredType = static_cast<LLFolderType::EType>(type);
 	msg->getStringFast(block, _PREHASH_Name, mName, block_num);
 	LLStringUtil::replaceNonstandardASCII(mName, ' ');
 }
@@ -1482,7 +1482,7 @@ BOOL LLInventoryCategory::importFile(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1514,7 +1514,7 @@ BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	fprintf(fp,"\t}\n");
 	return TRUE;
@@ -1561,7 +1561,7 @@ BOOL LLInventoryCategory::importLegacyStream(std::istream& input_stream)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -1593,7 +1593,7 @@ BOOL LLInventoryCategory::exportLegacyStream(std::ostream& output_stream, BOOL)
 	mParentUUID.toString(uuid_str);
 	output_stream << "\t\tparent_id\t" << uuid_str << "\n";
 	output_stream << "\t\ttype\t" << LLAssetType::lookup(mType) << "\n";
-	output_stream << "\t\tpref_type\t" << LLAssetType::lookup(mPreferredType) << "\n";
+	output_stream << "\t\tpref_type\t" << LLFolderType::lookup(mPreferredType) << "\n";
 	output_stream << "\t\tname\t" << mName.c_str() << "|\n";
 	output_stream << "\t}\n";
 	return TRUE;
@@ -1629,38 +1629,6 @@ LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item)
 	return rv;
 }
 
-/* deprecated, use LLInventoryItem::fromLLSD() instead
-LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item)
-{
-	LLPointer<LLInventoryItem> rv = new LLInventoryItem;
-	rv->setUUID(sd_item[INV_ITEM_ID_LABEL].asUUID());
-	rv->setParent(sd_item[INV_PARENT_ID_LABEL].asUUID());
-	rv->rename(sd_item[INV_NAME_LABEL].asString());
-	rv->setType(
-		LLAssetType::lookup(sd_item[INV_ASSET_TYPE_LABEL].asString()));
-	if (sd_item.has("shadow_id"))
-	{
-		LLUUID asset_id = sd_item["shadow_id"];
-		LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
-		cipher.decrypt(asset_id.mData, UUID_BYTES);
-		rv->setAssetUUID(asset_id);
-	}
-	if (sd_item.has(INV_ASSET_ID_LABEL))
-	{
-		rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID());
-	}
-	rv->setDescription(sd_item[INV_DESC_LABEL].asString());
-	rv->setSaleInfo(ll_sale_info_from_sd(sd_item[INV_SALE_INFO_LABEL]));
-	rv->setPermissions(ll_permissions_from_sd(sd_item[INV_PERMISSIONS_LABEL]));
-	rv->setInventoryType(
-		LLInventoryType::lookup(
-			sd_item[INV_INVENTORY_TYPE_LABEL].asString()));
-	rv->setFlags((U32)(sd_item[INV_FLAGS_LABEL].asInteger()));
-	rv->setCreationDate(sd_item[INV_CREATION_DATE_LABEL].asInteger());
-	return rv;
-}
-*/
-
 LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 {
 	LLSD rv;
@@ -1675,10 +1643,10 @@ LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat)
 	rv[INV_PARENT_ID_LABEL] = cat->getParentUUID();
 	rv[INV_NAME_LABEL] = cat->getName();
 	rv[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(cat->getType());
-	if(LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 	{
 		rv[INV_PREFERRED_TYPE_LABEL] =
-			LLAssetType::lookup(cat->getPreferredType());
+			LLFolderType::lookup(cat->getPreferredType()).c_str();
 	}
 	return rv;
 }
@@ -1692,7 +1660,7 @@ LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat)
 	rv->setType(
 		LLAssetType::lookup(sd_cat[INV_ASSET_TYPE_LABEL].asString()));
 	rv->setPreferredType(
-		LLAssetType::lookup(
-			sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
+			LLFolderType::lookup(
+				sd_cat[INV_PREFERRED_TYPE_LABEL].asString()));
 	return rv;
 }
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
index bd581e860f3a230dd919f9836e3d402c3c8aaf0b..3de9d14f5424303cda07f3615b8d7ce1f46a6a0c 100644
--- a/indra/llinventory/llinventory.h
+++ b/indra/llinventory/llinventory.h
@@ -37,6 +37,7 @@
 
 #include "llassetstorage.h"
 #include "lldarray.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 #include "llmemtype.h"
 #include "llpermissions.h"
@@ -321,15 +322,15 @@ class LLInventoryCategory : public LLInventoryObject
 public:
 	MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY);
 	LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-						LLAssetType::EType preferred_type,
+						LLFolderType::EType preferred_type,
 						const std::string& name);
 	LLInventoryCategory();
 	LLInventoryCategory(const LLInventoryCategory* other);
 	void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy
 
 	// accessors and mutators
-	LLAssetType::EType getPreferredType() const;
-	void setPreferredType(LLAssetType::EType type);
+	LLFolderType::EType getPreferredType() const;
+	void setPreferredType(LLFolderType::EType type);
 	// For messaging system support
 	virtual void packMessage(LLMessageSystem* msg) const;
 	virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
@@ -345,10 +346,8 @@ class LLInventoryCategory : public LLInventoryObject
 	virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const;
 
 protected:
-	// The type of asset that this category was "meant" to hold
-	// (although it may in fact hold any type).
-	LLAssetType::EType	mPreferredType;		
-
+	// May be the type that this category was "meant" to hold (although it may hold any type).	
+	LLFolderType::EType	mPreferredType;		
 };
 
 
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
index ae3cb2697b73cb931d4776136a50a98f677dee8f..2460a2777a81c1b66c359c2969f6b5d9f3acbf7d 100644
--- a/indra/llinventory/llinventorytype.cpp
+++ b/indra/llinventory/llinventorytype.cpp
@@ -79,24 +79,16 @@ LLInventoryDictionary::LLInventoryDictionary()
 	addEntry(LLInventoryType::IT_SOUND,               new InventoryEntry("sound",     "sound",         1, LLAssetType::AT_SOUND));
 	addEntry(LLInventoryType::IT_CALLINGCARD,         new InventoryEntry("callcard",  "calling card",  1, LLAssetType::AT_CALLINGCARD));
 	addEntry(LLInventoryType::IT_LANDMARK,            new InventoryEntry("landmark",  "landmark",      1, LLAssetType::AT_LANDMARK));
-	//addEntry(LLInventoryType::IT_SCRIPT,            new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_CLOTHING,          new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_OBJECT,              new InventoryEntry("object",    "object",        1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_NOTECARD,            new InventoryEntry("notecard",  "note card",     1, LLAssetType::AT_NOTECARD));
 	addEntry(LLInventoryType::IT_CATEGORY,            new InventoryEntry("category",  "folder"         ));
 	addEntry(LLInventoryType::IT_ROOT_CATEGORY,       new InventoryEntry("root",      "root"           ));
 	addEntry(LLInventoryType::IT_LSL,                 new InventoryEntry("script",    "script",        2, LLAssetType::AT_LSL_TEXT, LLAssetType::AT_LSL_BYTECODE));
-	//addEntry(LLInventoryType::IT_LSL_BYTECODE,      new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TEXTURE_TGA,       new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_BODYPART,          new InventoryEntry(NULL,NULL));
-	//addEntry(LLInventoryType::IT_TRASH,             new InventoryEntry(NULL,NULL));
 	addEntry(LLInventoryType::IT_SNAPSHOT,            new InventoryEntry("snapshot",  "snapshot",      1, LLAssetType::AT_TEXTURE));
-	//addEntry(LLInventoryType::IT_LOST_AND_FOUND,    new InventoryEntry(NULL,NULL, ));
 	addEntry(LLInventoryType::IT_ATTACHMENT,          new InventoryEntry("attach",    "attachment",    1, LLAssetType::AT_OBJECT));
 	addEntry(LLInventoryType::IT_WEARABLE,            new InventoryEntry("wearable",  "wearable",      2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART));
 	addEntry(LLInventoryType::IT_ANIMATION,           new InventoryEntry("animation", "animation",     1, LLAssetType::AT_ANIMATION));  
 	addEntry(LLInventoryType::IT_GESTURE,             new InventoryEntry("gesture",   "gesture",       1, LLAssetType::AT_GESTURE)); 
-	addEntry(LLInventoryType::IT_FAVORITE,            new InventoryEntry("favorite",  "favorite",      1, LLAssetType::AT_FAVORITE));
 	addEntry(LLInventoryType::IT_MESH,                new InventoryEntry("mesh",      "mesh",          1, LLAssetType::AT_MESH));
 
 }
@@ -130,35 +122,9 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] =
 	LLInventoryType::IT_ANIMATION,		// AT_ANIMATION
 	LLInventoryType::IT_GESTURE,		// AT_GESTURE
 	LLInventoryType::IT_NONE,			// AT_SIMSTATE
-	LLInventoryType::IT_FAVORITE,		// AT_FAVORITE
 
 	LLInventoryType::IT_NONE,			// AT_LINK
 	LLInventoryType::IT_NONE,			// AT_LINK_FOLDER
-	
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-	LLInventoryType::IT_CATEGORY,		// AT_ENSEMBLE
-
-	LLInventoryType::IT_CATEGORY,		// AT_CURRENT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_OUTFIT
-	LLInventoryType::IT_CATEGORY,		// AT_MY_OUTFITS
 	LLInventoryType::IT_MESH,           // AT_MESH
 };
 
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
index 0d580d300054742211977449a4ecf98002139cb6..af426b9007d098cf2ec5a16fa3400ce026e16378 100644
--- a/indra/llinventory/llinventorytype.h
+++ b/indra/llinventory/llinventorytype.h
@@ -67,7 +67,7 @@ class LLInventoryType
 		IT_WEARABLE = 18,
 		IT_ANIMATION = 19,
 		IT_GESTURE = 20,
-		IT_FAVORITE = 21,
+
 		IT_MESH = 22,
 		IT_COUNT = 23,
 
diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp
index 770594dc9df62a6f2dd5b41233bd724c29fc9250..c797a70c50662ad96176c23a5dde14695c455dc8 100644
--- a/indra/llinventory/tests/inventorymisc_test.cpp
+++ b/indra/llinventory/tests/inventorymisc_test.cpp
@@ -94,7 +94,7 @@ LLPointer<LLInventoryCategory> create_random_inventory_cat()
 	LLPointer<LLInventoryCategory> cat = new LLInventoryCategory(
 		item_id,
 		parent_id,
-		LLAssetType::AT_NONE,
+		LLFolderType::FT_NONE,
 		std::string("Sample category"));
 	return cat;
 }
@@ -452,7 +452,7 @@ namespace tut
 		ensure_equals("4.type::getType() failed", dst->getType(), src->getType());
 		ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
 
-		src->setPreferredType( LLAssetType::AT_TEXTURE);
+		src->setPreferredType( LLFolderType::FT_TEXTURE);
 		sd = ll_create_sd_from_inventory_category(src);
 		dst = ll_create_category_from_sd(sd);
 		ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index c8ef911cc1d54ebbe1680808b715570d24da4588..6286d1bcea22b673b7bd085b7e91f8c3cf416426 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -3901,7 +3901,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
 	if (face == -1) // ALL_SIDES
 	{
 		start_face = 0;
-		end_face = getNumFaces() - 1;
+		end_face = getNumVolumeFaces() - 1;
 	}
 	else
 	{
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index eeb903de6aec79d302ae93d0a9b0356dc8424bb8..047b99c86178b7bebdf93758a2dec1a3d4d23504 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -64,6 +64,9 @@ const LLUUID CATEGORIZE_LOST_AND_FOUND_ID(std::string("00000000-0000-0000-0000-0
 
 const U64 TOXIC_ASSET_LIFETIME = (120 * 1000000);		// microseconds
 
+LLTempAssetStorage::~LLTempAssetStorage()
+{
+}
 
 ///----------------------------------------------------------------------------
 /// LLAssetInfo
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index 56adbd5ccfe84f0f1f34428ad2c8481947dd1176..83cfdf6110f990c2fe75fe6d491c2f683be5fbad 100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
@@ -204,7 +204,16 @@ typedef std::map<LLUUID,U64,lluuid_less> toxic_asset_map_t;
 typedef void (*LLGetAssetCallback)(LLVFS *vfs, const LLUUID &asset_id,
 										 LLAssetType::EType asset_type, void *user_data, S32 status, LLExtStat ext_status);
 
-class LLAssetStorage
+class LLTempAssetStorage
+{
+public:
+	virtual ~LLTempAssetStorage() =0;
+	virtual void addTempAssetData(const LLUUID& asset_id,
+								  const LLUUID& agent_id,
+								  const std::string& host_name) = 0;
+};
+
+class LLAssetStorage : public LLTempAssetStorage
 {
 public:
 	// VFS member is public because static child methods need it :(
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index 5ff41322b7b65ca2168245ca8ab7c5f12737ce62..dc02367a6222f939ffac6ec8131a151fa1e9223c 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -229,7 +229,7 @@ class LLCurl::Easy
 	U32 report(CURLcode);
 	void getTransferInfo(LLCurl::TransferInfo* info);
 
-	void prepRequest(const std::string& url, ResponderPtr, bool post = false);
+	void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, bool post = false);
 	
 	const char* getErrorBuffer();
 
@@ -441,7 +441,9 @@ size_t curlHeaderCallback(void* data, size_t size, size_t nmemb, void* user_data
 	return n;
 }
 
-void LLCurl::Easy::prepRequest(const std::string& url, ResponderPtr responder, bool post)
+void LLCurl::Easy::prepRequest(const std::string& url,
+							   const std::vector<std::string>& headers,
+							   ResponderPtr responder, bool post)
 {
 	resetState();
 	
@@ -474,8 +476,13 @@ void LLCurl::Easy::prepRequest(const std::string& url, ResponderPtr responder, b
 	{
 		slist_append("Connection: keep-alive");
 		slist_append("Keep-alive: 300");
+		// Accept and other headers
+		for (std::vector<std::string>::const_iterator iter = headers.begin();
+			 iter != headers.end(); ++iter)
+		{
+			slist_append((*iter).c_str());
+		}
 	}
-	// *FIX: should have ACCEPT headers
 }
 
 ////////////////////////////////////////////////////////////////////////////
@@ -685,15 +692,18 @@ LLCurlRequest::LLCurlRequest() :
 	mActiveMulti(NULL),
 	mActiveRequestCount(0)
 {
+	mThreadID = LLThread::currentID();
 }
 
 LLCurlRequest::~LLCurlRequest()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer());
 }
 
 void LLCurlRequest::addMulti()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	LLCurl::Multi* multi = new LLCurl::Multi();
 	mMultiSet.insert(multi);
 	mActiveMulti = multi;
@@ -723,17 +733,20 @@ bool LLCurlRequest::addEasy(LLCurl::Easy* easy)
 
 void LLCurlRequest::get(const std::string& url, LLCurl::ResponderPtr responder)
 {
-	getByteRange(url, 0, -1, responder);
+	getByteRange(url, headers_t(), 0, -1, responder);
 }
 	
-bool LLCurlRequest::getByteRange(const std::string& url, S32 offset, S32 length, LLCurl::ResponderPtr responder)
+bool LLCurlRequest::getByteRange(const std::string& url,
+								 const headers_t& headers,
+								 S32 offset, S32 length,
+								 LLCurl::ResponderPtr responder)
 {
 	LLCurl::Easy* easy = allocEasy();
 	if (!easy)
 	{
 		return false;
 	}
-	easy->prepRequest(url, responder);
+	easy->prepRequest(url, headers, responder);
 	easy->setopt(CURLOPT_HTTPGET, 1);
 	if (length > 0)
 	{
@@ -745,14 +758,17 @@ bool LLCurlRequest::getByteRange(const std::string& url, S32 offset, S32 length,
 	return res;
 }
 
-bool LLCurlRequest::post(const std::string& url, const LLSD& data, LLCurl::ResponderPtr responder)
+bool LLCurlRequest::post(const std::string& url,
+						 const headers_t& headers,
+						 const LLSD& data,
+						 LLCurl::ResponderPtr responder)
 {
 	LLCurl::Easy* easy = allocEasy();
 	if (!easy)
 	{
 		return false;
 	}
-	easy->prepRequest(url, responder);
+	easy->prepRequest(url, headers, responder);
 
 	LLSDSerialize::toXML(data, easy->getInput());
 	S32 bytes = easy->getInput().str().length();
@@ -772,6 +788,7 @@ bool LLCurlRequest::post(const std::string& url, const LLSD& data, LLCurl::Respo
 // Note: call once per frame
 S32 LLCurlRequest::process()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	S32 res = 0;
 	for (curlmulti_set_t::iterator iter = mMultiSet.begin();
 		 iter != mMultiSet.end(); )
@@ -791,6 +808,7 @@ S32 LLCurlRequest::process()
 
 S32 LLCurlRequest::getQueued()
 {
+	llassert_always(mThreadID == LLThread::currentID());
 	S32 queued = 0;
 	for (curlmulti_set_t::iterator iter = mMultiSet.begin();
 		 iter != mMultiSet.end(); )
@@ -1011,7 +1029,7 @@ void LLCurl::initClass()
 	S32 mutex_count = CRYPTO_num_locks();
 	for (S32 i=0; i<mutex_count; i++)
 	{
-		sSSLMutex.push_back(new LLMutex(gAPRPoolp));
+		sSSLMutex.push_back(new LLMutex(NULL));
 	}
 	CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);
 	CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index 0b58e7c4a59fa82538b2fa31b4fc93dbcf3a81d2..1bc17679669bb137037d7477b04635c1f8f05d93 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -194,12 +194,14 @@ namespace boost
 class LLCurlRequest
 {
 public:
+	typedef std::vector<std::string> headers_t;
+	
 	LLCurlRequest();
 	~LLCurlRequest();
 
 	void get(const std::string& url, LLCurl::ResponderPtr responder);
-	bool getByteRange(const std::string& url, S32 offset, S32 length, LLCurl::ResponderPtr responder);
-	bool post(const std::string& url, const LLSD& data, LLCurl::ResponderPtr responder);
+	bool getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, LLCurl::ResponderPtr responder);
+	bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder);
 	S32  process();
 	S32  getQueued();
 
@@ -213,6 +215,7 @@ class LLCurlRequest
 	curlmulti_set_t mMultiSet;
 	LLCurl::Multi* mActiveMulti;
 	S32 mActiveRequestCount;
+	U32 mThreadID; // debug
 };
 
 class LLCurlEasyRequest
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 57d0201fab12a203779e48ed95d96aadb471629f..a8d25e3b03c26b97d52527bee96361b5880703fd 100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
@@ -293,7 +293,6 @@ bool is_asset_id_knowable(LLAssetType::EType type)
 		case LLAssetType::AT_BODYPART:
 		case LLAssetType::AT_ANIMATION:
 		case LLAssetType::AT_GESTURE:
-		case LLAssetType::AT_FAVORITE:
 		case LLAssetType::AT_LINK:
 		case LLAssetType::AT_LINK_FOLDER:
 	    case LLAssetType::AT_MESH:
diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp
index e6a5ad9946d8347ded67f231bc0e0e88c5121ddb..ffbe7bd202e13894d850355b50967d4aa8f2e239 100644
--- a/indra/llmessage/tests/llcurl_stub.cpp
+++ b/indra/llmessage/tests/llcurl_stub.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "linden_common.h"
+#include "llcurl.h"
 
 LLCurl::Responder::Responder()
 	: mReferenceCount(0)
diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp
index 250fa100b67b7a5e7fb1e838502ea34846fda2cc..7065c9d7e4afb2986677c346ca511432261f7c4a 100644
--- a/indra/llmessage/tests/llhttpclientadapter_test.cpp
+++ b/indra/llmessage/tests/llhttpclientadapter_test.cpp
@@ -50,7 +50,7 @@ std::vector<std::string> put_urls;
 std::vector<LLSD> put_body;
 std::vector<boost::intrusive_ptr<LLCurl::Responder> > put_responders;
 
-void LLHTTPClient::put(std::string const &url, LLSD const &body, boost::intrusive_ptr<LLCurl::Responder> responder,float) 
+void LLHTTPClient::put(const std::string& url, const LLSD& body, boost::intrusive_ptr<LLCurl::Responder> responder, const LLSD& headers, const F32 timeout)
 {
 	put_urls.push_back(url);
 	put_responders.push_back(responder);
diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp
index e7412a1d8f880285a0ee5fa8a82cf70805eb5a55..32601b47dbbc63035e09255f18c04ae9f84593c5 100644
--- a/indra/llplugin/llpluginmessage.cpp
+++ b/indra/llplugin/llpluginmessage.cpp
@@ -39,6 +39,11 @@ LLPluginMessage::LLPluginMessage()
 {
 }
 
+LLPluginMessage::LLPluginMessage(const LLPluginMessage &p)
+{
+	mMessage = p.mMessage;
+}
+
 LLPluginMessage::LLPluginMessage(const std::string &message_class, const std::string &message_name)
 {
 	setMessage(message_class, message_name);
diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h
index f1a0e7c62436f9e8629439da8d58d7d998bf08ca..5e93d8b7a1cf485b1cac97fded668fd85165a413 100644
--- a/indra/llplugin/llpluginmessage.h
+++ b/indra/llplugin/llpluginmessage.h
@@ -40,6 +40,7 @@ class LLPluginMessage
 	LOG_CLASS(LLPluginMessage);
 public:
 	LLPluginMessage();
+	LLPluginMessage(const LLPluginMessage &p);
 	LLPluginMessage(const std::string &message_class, const std::string &message_name);
 	~LLPluginMessage();
 	
diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp
index fa04bf80e7a2544817cb1dcd38c17db934f019d4..701300163a3eae1528f2c62052a1d415a199160b 100644
--- a/indra/llprimitive/llmediaentry.cpp
+++ b/indra/llprimitive/llmediaentry.cpp
@@ -164,6 +164,7 @@ void LLMediaEntry::asLLSD(LLSD& sd) const
 
     // "security" fields
     sd[WHITELIST_ENABLE_KEY] = mWhiteListEnable;
+	sd.erase(WHITELIST_KEY);
     for (U32 i=0; i<mWhiteList.size(); i++) 
 	{
         sd[WHITELIST_KEY].append(mWhiteList[i]);
diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp
index 9ce65609237884ed5c888e6b172043b02c61ee51..cd9608d56b74a4b7270a08de1e8fcee0004dfdb3 100644
--- a/indra/llprimitive/tests/llmediaentry_test.cpp
+++ b/indra/llprimitive/tests/llmediaentry_test.cpp
@@ -223,8 +223,7 @@ namespace tut
 	{
 		set_test_name("Test LLMediaEntry Instantiation");
 		LLMediaEntry entry;
-        ensure_llsd_equals(get_test_name(), defaultMediaEntryLLSD, entry.asLLSD());
-
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry.asLLSD());
 	}
 
 	template<> template<>
@@ -251,12 +250,27 @@ namespace tut
         ensure_llsd_equals(get_test_name() + " failed", golden, entry.asLLSD());
     }
 
+    template<> template<>
+    void object::test<4>()
+    {
+        set_test_name("Test LLMediaEntry::asLLSD()");
+        LLMediaEntry entry;
+        LLSD sd;
+		// Put some cruft in the LLSD
+        sd[LLMediaEntry::CURRENT_URL_KEY] = "http://www.example.com";
+		LLSD whitelist;
+		whitelist.append("*.example.com");
+        sd[LLMediaEntry::WHITELIST_KEY] = whitelist;
+        entry.asLLSD(sd);
+        ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd);
+    }
+
     // limit tests
     const char *URL_OK = "http://www.example.com";
     const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
 
     template<> template<>
-    void object::test<4>()
+    void object::test<5>()
     {
         set_test_name("Test Limits on setting current URL");
         LLMediaEntry entry;
@@ -267,7 +281,7 @@ namespace tut
     }    
 
     template<> template<>
-    void object::test<5>()
+    void object::test<6>()
     {
         set_test_name("Test Limits on setting home URL");
         LLMediaEntry entry;
@@ -278,7 +292,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<6>()
+    void object::test<7>()
     {
         set_test_name("Test Limits on setting whitelist");
         
@@ -292,7 +306,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<7>()
+    void object::test<8>()
     {
         set_test_name("Test Limits on setting whitelist too big");
         
@@ -307,7 +321,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<8>()
+    void object::test<9>()
     {
         set_test_name("Test Limits on setting whitelist too many");
         
@@ -323,7 +337,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<9>()
+    void object::test<10>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
         
@@ -341,7 +355,7 @@ namespace tut
     }
     
     template<> template<>
-    void object::test<10>()
+    void object::test<11>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -362,7 +376,7 @@ namespace tut
     }
 
     template<> template<>
-    void object::test<11>()
+    void object::test<12>()
     {
         set_test_name("Test to make sure both setWhiteList() functions behave the same");
 
@@ -386,99 +400,99 @@ namespace tut
     
     // Check the "empty whitelist" case
     template<> template<>
-    void object::test<12>() { whitelist_test("", "http://www.example.com", true); }
+    void object::test<13>() { whitelist_test("", "http://www.example.com", true); }
 
     // Check the "missing scheme" case
     template<> template<>
-    void object::test<13>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); }
 
     // Check the "exactly the same" case
     template<> template<>
-    void object::test<14>() { whitelist_test("http://example.com", "http://example.com", true); }
+    void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); }
 
     // Check the enable flag
     template<> template<>
-    void object::test<15>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
+    void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); }
     template<> template<>
-    void object::test<16>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
+    void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); }
 
     // Check permutations of trailing slash:
     template<> template<>
-    void object::test<17>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
+    void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<18>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
+    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); }
     template<> template<>
-    void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
+    void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<20>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
+    void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); }
     template<> template<>
-    void object::test<21>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
+    void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); }
 
     
     // More cases...
     template<> template<>
-    void object::test<22>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
+    void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); }
     template<> template<>
-    void object::test<23>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
+    void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); }
     template<> template<>
-    void object::test<24>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
+    void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<25>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
+    void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); }
     template<> template<>
-    void object::test<26>() { whitelist_test("example.com", "http://wwwexample.com", false); }
+    void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); }
     template<> template<>
-    void object::test<27>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
+    void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); }
     template<> template<>
-    void object::test<28>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
+    void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); }
 
     // regexp cases
     template<> template<>
-    void object::test<29>() { whitelist_test("*.example.com", "http://www.example.com", true); }
+    void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<30>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
+    void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); }
     template<> template<>
-    void object::test<31>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
+    void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); }
     template<> template<>
-    void object::test<32>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
+    void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); }
     template<> template<>
-    void object::test<33>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
+    void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); }
     template<> template<>
-    void object::test<34>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<35>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
+    void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); }
     template<> template<>
-    void object::test<36>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
+    void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); }
     template<> template<>
-    void object::test<37>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
+    void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<38>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
+    void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<39>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
+    void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); }
     template<> template<>
-    void object::test<40>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
+    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); }
     template<> template<>
-    void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
+    void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); }
     template<> template<>
-    void object::test<42>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
+    void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); }
     template<> template<>
-    void object::test<43>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
+    void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); }
     template<> template<>
-    void object::test<44>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
+    void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); }
     template<> template<>
-    void object::test<45>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
+    void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); }
     template<> template<>
-    void object::test<46>() { whitelist_test("example.com", "http://www.example.com", false); }
+    void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); }
     template<> template<>
-    void object::test<47>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
+    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); }
     template<> template<>
-    void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com", true); }
+    void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); }
     template<> template<>
-    void object::test<49>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
+    void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); }
     template<> template<>
-    void object::test<50>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); }
     // Path only
     template<> template<>
-    void object::test<51>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
+    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); }
     template<> template<>
-    void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
+    void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); }
 }
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index e5fea5b995ee192a80d413ba3731b530e0cb9fd0..f8d7ea00e0cf1ac473ad6ee63b5c835676498ce2 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -43,7 +43,6 @@
 #include "llmath.h"
 #include "llgl.h"
 #include "llrender.h"
-
 //----------------------------------------------------------------------------
 const F32 MIN_TEXTURE_LIFETIME = 10.f;
 
@@ -60,21 +59,34 @@ std::list<U32> LLImageGL::sDeadTextureList;
 
 BOOL LLImageGL::sGlobalUseAnisotropic	= FALSE;
 F32 LLImageGL::sLastFrameTime			= 0.f;
+BOOL LLImageGL::sAllowReadBackRaw       = FALSE ;
 LLImageGL* LLImageGL::sDefaultGLTexture = NULL ;
+
 std::set<LLImageGL*> LLImageGL::sImageList;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
+//****************************************************************************************************
+//The below for texture auditing use only
+//****************************************************************************************************
 //-----------------------
 //debug use
+BOOL gAuditTexture = FALSE ;
 #define MAX_TEXTURE_LOG_SIZE 22 //2048 * 2048
 std::vector<S32> LLImageGL::sTextureLoadedCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 std::vector<S32> LLImageGL::sTextureBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 std::vector<S32> LLImageGL::sTextureCurBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ;
 S32 LLImageGL::sCurTexSizeBar = -1 ;
 S32 LLImageGL::sCurTexPickSize = -1 ;
-LLPointer<LLImageGL> LLImageGL::sDefaultTexturep = NULL;
+LLPointer<LLImageGL> LLImageGL::sHighlightTexturep = NULL;
+S32 LLImageGL::sMaxCatagories = 1 ;
+
+std::vector<S32> LLImageGL::sTextureMemByCategory;
+std::vector<S32> LLImageGL::sTextureMemByCategoryBound ;
+std::vector<S32> LLImageGL::sTextureCurMemByCategoryBound ;
 //------------------------
-#endif
+//****************************************************************************************************
+//End for texture auditing use only
+//****************************************************************************************************
+
 //**************************************************************************************
 //below are functions for debug use
 //do not delete them even though they are not currently being used.
@@ -144,6 +156,60 @@ void LLImageGL::checkTexSize() const
 //**************************************************************************************
 
 //----------------------------------------------------------------------------
+BOOL is_little_endian()
+{
+	S32 a = 0x12345678;
+    U8 *c = (U8*)(&a);
+    
+	return (*c == 0x78) ;
+}
+//static 
+void LLImageGL::initClass(S32 num_catagories) 
+{
+	sMaxCatagories = num_catagories ;
+
+	sTextureMemByCategory.resize(sMaxCatagories);
+	sTextureMemByCategoryBound.resize(sMaxCatagories) ;
+	sTextureCurMemByCategoryBound.resize(sMaxCatagories) ;
+}
+
+//static 
+void LLImageGL::cleanupClass() 
+{	
+	sTextureMemByCategory.clear() ;
+	sTextureMemByCategoryBound.clear() ;
+	sTextureCurMemByCategoryBound.clear() ;
+}
+
+//static 
+void LLImageGL::setHighlightTexture(S32 category) 
+{
+	const S32 dim = 128;
+	sHighlightTexturep = new LLImageGL() ;
+	LLPointer<LLImageRaw> image_raw = new LLImageRaw(dim,dim,3);
+	U8* data = image_raw->getData();
+	for (S32 i = 0; i<dim; i++)
+	{
+		for (S32 j = 0; j<dim; j++)
+		{
+			const S32 border = 2;
+			if (i<border || j<border || i>=(dim-border) || j>=(dim-border))
+			{
+				*data++ = 0xff;
+				*data++ = 0xff;
+				*data++ = 0xff;
+			}
+			else
+			{
+				*data++ = 0xff;
+				*data++ = 0xff;
+				*data++ = 0x00;
+			}
+		}
+	}
+	sHighlightTexturep->createGLTexture(0, image_raw, 0, TRUE, category);
+	image_raw = NULL;
+}
 
 //static
 S32 LLImageGL::dataFormatBits(S32 dataformat)
@@ -211,19 +277,31 @@ void LLImageGL::updateStats(F32 current_time)
 	sBoundTextureMemoryInBytes = sCurBoundTextureMemory;
 	sCurBoundTextureMemory = 0;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
-	for(U32 i = 0 ; i < sTextureCurBoundCounter.size() ; i++)
+	if(gAuditTexture)
 	{
-		sTextureBoundCounter[i] = sTextureCurBoundCounter[i] ;
-		sTextureCurBoundCounter[i] = 0 ;
+		for(U32 i = 0 ; i < sTextureCurBoundCounter.size() ; i++)
+		{
+			sTextureBoundCounter[i] = sTextureCurBoundCounter[i] ;
+			sTextureCurBoundCounter[i] = 0 ;
+		}
+		for(U32 i = 0 ; i < sTextureCurMemByCategoryBound.size() ; i++)
+		{
+			sTextureMemByCategoryBound[i] = sTextureCurMemByCategoryBound[i] ;
+			sTextureCurMemByCategoryBound[i] = 0 ;
+		}
 	}
-#endif
 }
 
 //static
-S32 LLImageGL::updateBoundTexMem(const S32 delta)
+S32 LLImageGL::updateBoundTexMem(const S32 mem, const S32 ncomponents, S32 category)
 {
-	LLImageGL::sCurBoundTextureMemory += delta;
+	if(gAuditTexture && ncomponents > 0 && category > -1)
+	{
+		sTextureCurBoundCounter[getTextureCounterIndex(mem / ncomponents)]++ ;
+		sTextureCurMemByCategoryBound[category] += mem ;
+	}
+	
+	LLImageGL::sCurBoundTextureMemory += mem ;
 	return LLImageGL::sCurBoundTextureMemory;
 }
 
@@ -237,6 +315,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 		gGL.getTexUnit(stage)->unbind(LLTexUnit::TT_TEXTURE);
 	}
 	
+	sAllowReadBackRaw = true ;
 	for (std::set<LLImageGL*>::iterator iter = sImageList.begin();
 		 iter != sImageList.end(); iter++)
 	{
@@ -246,7 +325,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 			if (save_state && glimage->isGLTextureCreated() && glimage->mComponents)
 			{
 				glimage->mSaveData = new LLImageRaw;
-				if(!glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false))
+				if(!glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false)) //necessary, keep it.
 				{
 					glimage->mSaveData = NULL ;
 				}
@@ -256,6 +335,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 			stop_glerror();
 		}
 	}
+	sAllowReadBackRaw = false ;
 }
 
 //static 
@@ -273,7 +353,7 @@ void LLImageGL::restoreGL()
 		{
 			if (glimage->getComponents() && glimage->mSaveData->getComponents())
 			{
-				glimage->createGLTexture(glimage->mCurrentDiscardLevel, glimage->mSaveData);
+				glimage->createGLTexture(glimage->mCurrentDiscardLevel, glimage->mSaveData, 0, TRUE, glimage->getCategory());
 				stop_glerror();
 			}
 			glimage->mSaveData = NULL; // deletes data
@@ -355,7 +435,7 @@ void LLImageGL::init(BOOL usemipmaps)
 	mPickMask		  = NULL;
 	mTextureMemory    = 0;
 	mLastBindTime     = 0.f;
-
+	
 	mTarget			  = GL_TEXTURE_2D;
 	mBindTarget		  = LLTexUnit::TT_TEXTURE;
 	mUseMipMaps		  = usemipmaps;
@@ -381,7 +461,11 @@ void LLImageGL::init(BOOL usemipmaps)
 	mHasExplicitFormat = FALSE;
 
 	mGLTextureCreated = FALSE ;
+
 	mIsMask = FALSE;
+	mCategory = -1 ;
+	mAlphaStride = 0 ;
+	mAlphaOffset = 0 ;
 	mNeedsAlphaAndPickMask = TRUE ;
 
 	mDiscardLevelInAtlas = -1 ;
@@ -486,6 +570,10 @@ void LLImageGL::dump()
 }
 
 //----------------------------------------------------------------------------
+void LLImageGL::forceUpdateBindStats(void) const
+{
+	mLastBindTime = sLastFrameTime;
+}
 
 BOOL LLImageGL::updateBindStats(S32 tex_mem) const
 {	
@@ -499,7 +587,7 @@ BOOL LLImageGL::updateBindStats(S32 tex_mem) const
 		{
 			// we haven't accounted for this texture yet this frame
 			sUniqueCount++;
-			updateBoundTexMem(tex_mem);
+			updateBoundTexMem(tex_mem, mComponents, mCategory);
 			mLastBindTime = sLastFrameTime;
 
 			return TRUE ;
@@ -525,6 +613,8 @@ void LLImageGL::setExplicitFormat( LLGLint internal_format, LLGLenum primary_for
 	else
 		mFormatType = type_format;
 	mFormatSwapBytes = swap_bytes;
+
+	calcAlphaChannelOffsetAndStride() ;
 }
 
 //----------------------------------------------------------------------------
@@ -540,7 +630,6 @@ void LLImageGL::setImage(const LLImageRaw* imageraw)
 
 void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 {
-	llpushcallstacks ;
 	bool is_compressed = false;
 	if (mFormatPrimary >= GL_COMPRESSED_RGBA_S3TC_DXT1_EXT && mFormatPrimary <= GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
 	{
@@ -749,7 +838,6 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 	}
 	stop_glerror();
 	mGLTextureCreated = true;
-	llpushcallstacks ;
 }
 
 BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)
@@ -840,7 +928,6 @@ void LLImageGL::postAddToAtlas()
 
 BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update)
 {
-	llpushcallstacks ;
 	if (!width || !height)
 	{
 		return TRUE;
@@ -930,7 +1017,6 @@ BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S3
 		stop_glerror();
 		mGLTextureCreated = true;
 	}
-	llpushcallstacks ;
 	return TRUE;
 }
 
@@ -942,8 +1028,9 @@ BOOL LLImageGL::setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S3
 // Copy sub image from frame buffer
 BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height)
 {
-	if (gGL.getTexUnit(0)->bind(this))
+	if (gGL.getTexUnit(0)->bind(this, false, true))
 	{
+		//checkTexSize() ;
 		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height);
 		mGLTextureCreated = true;
 		stop_glerror();
@@ -1007,7 +1094,7 @@ BOOL LLImageGL::createGLTexture()
 	return TRUE ;
 }
 
-BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/)
+BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/, BOOL to_create, S32 category)
 {
 	if (gGLManager.mIsDisabled)
 	{
@@ -1027,8 +1114,10 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
 	discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);
 
 	// Actual image width/height = raw image width/height * 2^discard_level
-	S32 w = imageraw->getWidth() << discard_level;
-	S32 h = imageraw->getHeight() << discard_level;
+	S32 raw_w = imageraw->getWidth() ;
+	S32 raw_h = imageraw->getHeight() ;
+	S32 w = raw_w << discard_level;
+	S32 h = raw_h << discard_level;
 
 	// setSize may call destroyGLTexture if the size does not match
 	setSize(w, h, imageraw->getComponents());
@@ -1062,15 +1151,25 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S
 		  default:
 			llerrs << "Bad number of components for texture: " << (U32)getComponents() << llendl;
 		}
+
+		calcAlphaChannelOffsetAndStride() ;
 	}
 
+	if(!to_create) //not create a gl texture
+	{
+		destroyGLTexture();
+		mCurrentDiscardLevel = discard_level;	
+		mLastBindTime = sLastFrameTime;
+		return TRUE ;
+	}
+
+	setCategory(category) ;
  	const U8* rawdata = imageraw->getData();
 	return createGLTexture(discard_level, rawdata, FALSE, usename);
 }
 
 BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_hasmips, S32 usename)
 {
-	llpushcallstacks ;
 	llassert(data_in);
 
 	if (discard_level < 0)
@@ -1137,11 +1236,14 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
 	if (old_name != 0)
 	{
 		sGlobalTextureMemoryInBytes -= mTextureMemory;
-#if !LL_RELEASE_FOR_DOWNLOAD
-		decTextureCounter(mTextureMemory / mComponents) ;
-#endif
+
+		if(gAuditTexture)
+		{
+			decTextureCounter(mTextureMemory, mComponents, mCategory) ;
+		}
 
 		LLImageGL::deleteTextures(1, &old_name);
+
 		stop_glerror();
 	}
 
@@ -1149,82 +1251,20 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
 	sGlobalTextureMemoryInBytes += mTextureMemory;
 	mTexelsInGLTexture = getWidth() * getHeight() ;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
-	incTextureCounter(mTextureMemory / mComponents) ;
-#endif
-
+	if(gAuditTexture)
+	{
+		incTextureCounter(mTextureMemory, mComponents, mCategory) ;
+	}
 	// mark this as bound at this point, so we don't throw it out immediately
 	mLastBindTime = sLastFrameTime;
-
-	llpushcallstacks ;
 	return TRUE;
 }
 
-BOOL LLImageGL::setDiscardLevel(S32 discard_level)
-{
-	llassert(discard_level >= 0);
-	llassert(mCurrentDiscardLevel >= 0);
-
-	discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel);	
-
-	if (discard_level == mCurrentDiscardLevel)
-	{
-		// nothing to do
-		return FALSE;
-	}
-	else if (discard_level < mCurrentDiscardLevel)
-	{
-		// larger image
-		dump();
-		llerrs << "LLImageGL::setDiscardLevel() called with larger discard level; use createGLTexture()" << llendl;
-		return FALSE;
-	}
-	else if (mUseMipMaps)
-	{
-		LLPointer<LLImageRaw> imageraw = new LLImageRaw;
-		while(discard_level > mCurrentDiscardLevel)
-		{
-			if (readBackRaw(discard_level, imageraw, false))
-			{
-				break;
-			}
-			discard_level--;
-		}
-		if (discard_level == mCurrentDiscardLevel)
-		{
-			// unable to increase the discard level
-			return FALSE;
-		}
-		return createGLTexture(discard_level, imageraw);
-	}
-	else
-	{
-#if !LL_LINUX && !LL_SOLARIS
-		 // *FIX: This should not be skipped for the linux client.
-		llerrs << "LLImageGL::setDiscardLevel() called on image without mipmaps" << llendl;
-#endif
-		return FALSE;
-	}
-}
-
-BOOL LLImageGL::isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents)
-{
-	assert_glerror();
-	S32 gl_discard = discard_level - mCurrentDiscardLevel;
-	LLGLint glwidth = 0;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth);
-	LLGLint glheight = 0;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_HEIGHT, (GLint*)&glheight);
-	LLGLint glcomponents = 0 ;
-	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_INTERNAL_FORMAT, (GLint*)&glcomponents);
-	assert_glerror();
-
-	return glwidth >= image_width && glheight >= image_height && (GL_RGB8 == glcomponents || GL_RGBA8 == glcomponents) ;
-}
-
 BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const
 {
-	llpushcallstacks ;
+	llassert_always(sAllowReadBackRaw) ;
+	//llerrs << "should not call this function!" << llendl ;
+	
 	if (discard_level < 0)
 	{
 		discard_level = mCurrentDiscardLevel;
@@ -1327,7 +1367,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
 		return FALSE ;
 	}
 	//-----------------------------------------------------------------------------------------------
-	llpushcallstacks ;
+
 	return TRUE ;
 }
 
@@ -1345,25 +1385,26 @@ void LLImageGL::deleteDeadTextures()
 				stop_glerror();
 			}
 		}
-
+		
 		glDeleteTextures(1, &tex);
 		stop_glerror();
 	}
 }
-
+		
 void LLImageGL::destroyGLTexture()
 {
 	if (mTexName != 0)
 	{
 		if(mTextureMemory)
 		{
-#if !LL_RELEASE_FOR_DOWNLOAD
-			decTextureCounter(mTextureMemory / mComponents) ;
-#endif
+			if(gAuditTexture)
+			{
+				decTextureCounter(mTextureMemory, mComponents, mCategory) ;
+			}
 			sGlobalTextureMemoryInBytes -= mTextureMemory;
 			mTextureMemory = 0;
 		}
-
+		
 		LLImageGL::deleteTextures(1, &mTexName);			
 		mTexName = 0;
 		mCurrentDiscardLevel = -1 ; //invalidate mCurrentDiscardLevel.
@@ -1479,6 +1520,11 @@ S32 LLImageGL::getMipBytes(S32 discard_level) const
 	return res;
 }
 
+BOOL LLImageGL::isJustBound() const
+{
+	return (BOOL)(sLastFrameTime - mLastBindTime < 0.5f);
+}
+
 BOOL LLImageGL::getBoundRecently() const
 {
 	return (BOOL)(sLastFrameTime - mLastBindTime < MIN_TEXTURE_LIFETIME);
@@ -1490,44 +1536,104 @@ void LLImageGL::setTarget(const LLGLenum target, const LLTexUnit::eTextureType b
 	mBindTarget = bind_target;
 }
 
-void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
+const S8 INVALID_OFFSET = -99 ;
+void LLImageGL::setNeedsAlphaAndPickMask(BOOL need_mask) 
 {
-	if(!mNeedsAlphaAndPickMask)
+	if(mNeedsAlphaAndPickMask != need_mask)
 	{
-		return ;
+		mNeedsAlphaAndPickMask = need_mask;
+
+		if(mNeedsAlphaAndPickMask)
+		{
+			mAlphaOffset = 0 ;
+		}
+		else //do not need alpha mask
+		{
+			mAlphaOffset = INVALID_OFFSET ;
+			mIsMask = FALSE;
+		}
 	}
+}
 
-	if (mFormatType != GL_UNSIGNED_BYTE)
+void LLImageGL::calcAlphaChannelOffsetAndStride()
+{
+	if(mAlphaOffset == INVALID_OFFSET)//do not need alpha mask
 	{
-		llwarns << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << llendl;
+		return ;
 	}
 
-	U32 stride = 0;
+	mAlphaStride = -1 ;
 	switch (mFormatPrimary)
 	{
 	case GL_LUMINANCE:
 	case GL_ALPHA:
-		stride = 1;
+		mAlphaStride = 1;
 		break;
 	case GL_LUMINANCE_ALPHA:
-		stride = 2;
+		mAlphaStride = 2;
 		break;
 	case GL_RGB:
-		//no alpha
+		mNeedsAlphaAndPickMask = FALSE ;
 		mIsMask = FALSE;
-		return;
+		return ; //no alpha channel.
 	case GL_RGBA:
-		stride = 4;
+		mAlphaStride = 4;
 		break;
 	case GL_BGRA_EXT:
-		stride = 4;
+		mAlphaStride = 4;
 		break;
 	default:
-		return;
+		break;
+	}
+
+	mAlphaOffset = -1 ;
+	if (mFormatType == GL_UNSIGNED_BYTE)
+	{
+		mAlphaOffset = mAlphaStride - 1 ;
+	}
+	else if(is_little_endian())
+	{
+		if (mFormatType == GL_UNSIGNED_INT_8_8_8_8)
+		{
+			mAlphaOffset = 0 ;
+		}
+		else if (mFormatType == GL_UNSIGNED_INT_8_8_8_8_REV)
+		{
+			mAlphaOffset = 3 ;
+		}
+	}
+	else //big endian
+	{
+		if (mFormatType == GL_UNSIGNED_INT_8_8_8_8)
+		{
+			mAlphaOffset = 3 ;
+		}
+		else if (mFormatType == GL_UNSIGNED_INT_8_8_8_8_REV)
+		{
+			mAlphaOffset = 0 ;
+		}
+	}
+
+	if( mAlphaStride < 1 || //unsupported format
+		mAlphaOffset < 0 || //unsupported type
+		(mFormatPrimary == GL_BGRA_EXT && mFormatType != GL_UNSIGNED_BYTE)) //unknown situation
+	{
+		llwarns << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << llendl;
+
+		mNeedsAlphaAndPickMask = FALSE ;
+		mIsMask = FALSE;
+	}
+}
+
+void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
+{
+	if(!mNeedsAlphaAndPickMask)
+	{
+		return ;
 	}
 
 	U32 length = w * h;
-	const GLubyte* current = ((const GLubyte*) data_in)+stride-1;
+	const GLubyte* current = ((const GLubyte*) data_in) + mAlphaOffset ;
 	
 	S32 sample[16];
 	memset(sample, 0, sizeof(S32)*16);
@@ -1535,7 +1641,7 @@ void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
 	for (U32 i = 0; i < length; i++)
 	{
 		++sample[*current/16];
-		current += stride;
+		current += mAlphaStride ;
 	}
 
 	U32 total = 0;
@@ -1638,8 +1744,30 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
 	return res;
 }
 
-//----------------------------------------------------------------------------
-#if !LL_RELEASE_FOR_DOWNLOAD
+void LLImageGL::setCategory(S32 category) 
+{
+	if(!gAuditTexture)
+	{
+		return ;
+	}
+	if(mCategory != category)
+	{		
+		if(mCategory > -1)
+		{
+			sTextureMemByCategory[mCategory] -= mTextureMemory ;
+		}
+		if(category > -1 && category < sMaxCatagories)
+		{
+			sTextureMemByCategory[category] += mTextureMemory ;		
+			mCategory = category;
+		}
+		else
+		{
+			mCategory = -1 ;
+		}
+	}
+}
+
 //for debug use 
 //val is a "power of two" number
 S32 LLImageGL::getTextureCounterIndex(U32 val) 
@@ -1663,18 +1791,33 @@ S32 LLImageGL::getTextureCounterIndex(U32 val)
 		return ret ;
 	}
 }
-void LLImageGL::incTextureCounter(U32 val) 
+
+//static
+void LLImageGL::incTextureCounter(U32 val, S32 ncomponents, S32 category) 
 {
 	sTextureLoadedCounter[getTextureCounterIndex(val)]++ ;
+	sTextureMemByCategory[category] += (S32)val * ncomponents ;
 }
-void LLImageGL::decTextureCounter(U32 val) 
+
+//static
+void LLImageGL::decTextureCounter(U32 val, S32 ncomponents, S32 category) 
 {
 	sTextureLoadedCounter[getTextureCounterIndex(val)]-- ;
+	sTextureMemByCategory[category] += (S32)val * ncomponents ;
 }
-void LLImageGL::setCurTexSizebar(S32 index)
+
+void LLImageGL::setCurTexSizebar(S32 index, BOOL set_pick_size)
 {
 	sCurTexSizeBar = index ;
-	sCurTexPickSize = (1 << index) ;
+
+	if(set_pick_size)
+	{
+		sCurTexPickSize = (1 << index) ;
+	}
+	else
+	{
+		sCurTexPickSize = -1 ;
+	}
 }
 void LLImageGL::resetCurTexSizebar()
 {
@@ -1682,7 +1825,9 @@ void LLImageGL::resetCurTexSizebar()
 	sCurTexPickSize = -1 ;
 }
 //----------------------------------------------------------------------------
-#endif
+
+//----------------------------------------------------------------------------
+
 
 // Manual Mip Generation
 /*
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index a094605607cef83ccaca0985cc3debe40ce9d5b9..937065043c1d5480a3bba1800d66587f912883d8 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -47,7 +47,6 @@ class LLTextureAtlas ;
 #define MEGA_BYTES_TO_BYTES(x) ((x) << 20)
 
 //============================================================================
-
 class LLImageGL : public LLRefCount
 {
 	friend class LLTexUnit;
@@ -63,6 +62,7 @@ class LLImageGL : public LLRefCount
 
 	BOOL updateBindStats(S32 tex_mem) const ;
 	F32 getTimePassedSinceLastBound();
+	void forceUpdateBindStats(void) const;
 
 	// needs to be called every frame
 	static void updateStats(F32 current_time);
@@ -71,8 +71,9 @@ class LLImageGL : public LLRefCount
 	static void destroyGL(BOOL save_state = TRUE);
 	static void restoreGL();
 
-	// Sometimes called externally for textures not using LLImageGL (should go away...)
-	static S32 updateBoundTexMem(const S32 delta);
+	// Sometimes called externally for textures not using LLImageGL (should go away...)	
+	static S32 updateBoundTexMem(const S32 mem, const S32 ncomponents, S32 category) ;
+	
 	static bool checkSize(S32 width, S32 height);
 
 	//for server side use only.
@@ -91,6 +92,7 @@ class LLImageGL : public LLRefCount
 	virtual ~LLImageGL();
 
 	void analyzeAlpha(const void* data_in, S32 w, S32 h);
+	void calcAlphaChannelOffsetAndStride();
 
 public:
 	virtual void dump();	// debugging info to llinfos
@@ -105,14 +107,15 @@ class LLImageGL : public LLRefCount
 	static void setManualImage(U32 target, S32 miplevel, S32 intformat, S32 width, S32 height, U32 pixformat, U32 pixtype, const void *pixels);
 
 	BOOL createGLTexture() ;
-	BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0);
+	BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0, BOOL to_create = TRUE, 
+		S32 category = sMaxCatagories - 1);
 	BOOL createGLTexture(S32 discard_level, const U8* data, BOOL data_hasmips = FALSE, S32 usename = 0);
 	void setImage(const LLImageRaw* imageraw);
 	void setImage(const U8* data_in, BOOL data_hasmips = FALSE);
 	BOOL setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update = FALSE);
 	BOOL setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update = FALSE);
 	BOOL setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height);
-	BOOL setDiscardLevel(S32 discard_level);
+	
 	// Read back a raw image for this discard level, if it exists
 	BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const;
 	void destroyGLTexture();
@@ -131,6 +134,7 @@ class LLImageGL : public LLRefCount
 	S32  getBytes(S32 discard_level = -1) const;
 	S32  getMipBytes(S32 discard_level = -1) const;
 	BOOL getBoundRecently() const;
+	BOOL isJustBound() const;
 	LLGLenum getPrimaryFormat() const { return mFormatPrimary; }
 	LLGLenum getFormatType() const { return mFormatType; }
 
@@ -150,8 +154,6 @@ class LLImageGL : public LLRefCount
 	BOOL getUseMipMaps() const { return mUseMipMaps; }
 	void setUseMipMaps(BOOL usemips) { mUseMipMaps = usemips; }	
 
-	BOOL isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ;
-
 	void updatePickMask(S32 width, S32 height, const U8* data_in);
 	BOOL getMask(const LLVector2 &tc);
 
@@ -178,7 +180,7 @@ class LLImageGL : public LLRefCount
 	void init(BOOL usemipmaps);
 	virtual void cleanup(); // Clean up the LLImageGL so it can be reinitialized.  Be careful when using this in derived class destructors
 
-	void setNeedsAlphaAndPickMask(BOOL need_mask) {mNeedsAlphaAndPickMask = need_mask;}
+	void setNeedsAlphaAndPickMask(BOOL need_mask);
 
 	BOOL preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image);
 	void postAddToAtlas() ;	
@@ -187,7 +189,7 @@ class LLImageGL : public LLRefCount
 	// Various GL/Rendering options
 	S32 mTextureMemory;
 	mutable F32  mLastBindTime;	// last time this was bound, by discard level
-
+	
 private:
 	LLPointer<LLImageRaw> mSaveData; // used for destroyGL/restoreGL
 	U8* mPickMask;  //downsampled bitmap approximation of alpha channel.  NULL if no alpha channel
@@ -197,13 +199,15 @@ class LLImageGL : public LLRefCount
 
 	BOOL mIsMask;
 	BOOL mNeedsAlphaAndPickMask;
-	
+	S8   mAlphaStride ;
+	S8   mAlphaOffset ;
+
 	bool     mGLTextureCreated ;
 	LLGLuint mTexName;
 	U16      mWidth;
 	U16      mHeight;	
 	S8       mCurrentDiscardLevel;
-
+	
 	S8       mDiscardLevelInAtlas;
 	U32      mTexelsInAtlas ;
 	U32      mTexelsInGLTexture;
@@ -233,7 +237,7 @@ class LLImageGL : public LLRefCount
 	static S32 sCount;
 	
 	static F32 sLastFrameTime;
-
+	
 	static LLGLuint sCurrentBoundTextures[MAX_GL_TEXTURE_UNITS]; // Currently bound texture ID
 
 	// Global memory statistics
@@ -246,30 +250,61 @@ class LLImageGL : public LLRefCount
 	static LLImageGL* sDefaultGLTexture ;	
 	static BOOL sAutomatedTest;
 
-#if !LL_RELEASE_FOR_DOWNLOAD
+#if DEBUG_MISS
+	BOOL mMissed; // Missed on last bind?
+	BOOL getMissed() const { return mMissed; };
+#else
+	BOOL getMissed() const { return FALSE; };
+#endif
+
+public:
+	static void initClass(S32 num_catagories) ;
+	static void cleanupClass() ;
+private:
+	static S32 sMaxCatagories ;
+
+	//the flag to allow to call readBackRaw(...).
+	//can be removed if we do not use that function at all.
+	static BOOL sAllowReadBackRaw ;
+//
+//****************************************************************************************************
+//The below for texture auditing use only
+//****************************************************************************************************
+private:
+	S32 mCategory ;
+public:		
+	void setCategory(S32 category) ;
+	S32  getCategory()const {return mCategory ;}
+
 	//for debug use: show texture size distribution 
 	//----------------------------------------
-	static LLPointer<LLImageGL> sDefaultTexturep; //default texture to replace normal textures
+	static LLPointer<LLImageGL> sHighlightTexturep; //default texture to replace normal textures
 	static std::vector<S32> sTextureLoadedCounter ;
 	static std::vector<S32> sTextureBoundCounter ;
 	static std::vector<S32> sTextureCurBoundCounter ;
 	static S32 sCurTexSizeBar ;
 	static S32 sCurTexPickSize ;
-	
+
+	static void setHighlightTexture(S32 category) ;
 	static S32 getTextureCounterIndex(U32 val) ;
-	static void incTextureCounter(U32 val) ;
-	static void decTextureCounter(U32 val) ;
-	static void setCurTexSizebar(S32 index) ;
+	static void incTextureCounter(U32 val, S32 ncomponents, S32 category) ;
+	static void decTextureCounter(U32 val, S32 ncomponents, S32 category) ;
+	static void setCurTexSizebar(S32 index, BOOL set_pick_size = TRUE) ;
 	static void resetCurTexSizebar();
 	//----------------------------------------
-#endif
 
-#if DEBUG_MISS
-	BOOL mMissed; // Missed on last bind?
-	BOOL getMissed() const { return mMissed; };
-#else
-	BOOL getMissed() const { return FALSE; };
-#endif
+	//for debug use: show texture category distribution 
+	//----------------------------------------		
+	
+	static std::vector<S32> sTextureMemByCategory;
+	static std::vector<S32> sTextureMemByCategoryBound ;
+	static std::vector<S32> sTextureCurMemByCategoryBound ;
+	//----------------------------------------	
+//****************************************************************************************************
+//End of definitions for texture auditing use only
+//****************************************************************************************************
+
 };
 
+extern BOOL gAuditTexture;
 #endif // LL_LLIMAGEGL_H
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index b74d824c9e4ba83e2a4f5ae0602adf95416775d1..fc45df8153908e2fbe0c273d20d06541818b1138 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -179,7 +179,7 @@ void LLTexUnit::disable(void)
 	}
 }
 
-bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
+bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)
 {
 	stop_glerror();
 	if (mIndex < 0) return false;
@@ -198,9 +198,19 @@ bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
 		//if deleted, will re-generate it immediately
 		texture->forceImmediateUpdate() ;
 
+		gl_tex->forceUpdateBindStats() ;
 		return texture->bindDefaultImage(mIndex);
 	}
 
+	//in audit, replace the selected texture by the default one.
+	if(gAuditTexture && for_rendering && LLImageGL::sCurTexPickSize > 0)
+	{
+		if(texture->getWidth() * texture->getHeight() == LLImageGL::sCurTexPickSize)
+		{
+			gl_tex->updateBindStats(gl_tex->mTextureMemory);
+			return bind(LLImageGL::sHighlightTexturep.get());
+		}
+	}
 	if ((mCurrTexture != gl_tex->getTexName()) || forceBind)
 	{
 		activate();
@@ -223,7 +233,7 @@ bool LLTexUnit::bind(LLTexture* texture, bool forceBind)
 	return true;
 }
 
-bool LLTexUnit::bind(LLImageGL* texture, bool forceBind)
+bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
 {
 	stop_glerror();
 	if (mIndex < 0) return false;
@@ -260,6 +270,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool forceBind)
 			setTextureFilteringOption(texture->mFilterOption);
 		}
 	}
+
 	return true;
 }
 
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index cb2a4d445076c72ef746af12d682b68f9379c5c5..0121a190ee5d052b5ae3d6fe2d412c75eb56a15d 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -149,8 +149,8 @@ class LLTexUnit
 	
 	// Binds the LLImageGL to this texture unit 
 	// (automatically enables the unit for the LLImageGL's texture type)
-	bool bind(LLImageGL* texture, bool forceBind = false);
-	bool bind(LLTexture* texture, bool forceBind = false);
+	bool bind(LLImageGL* texture, bool for_rendering = false, bool forceBind = false);
+	bool bind(LLTexture* texture, bool for_rendering = false, bool forceBind = false);
 
 	// Binds a cubemap to this texture unit 
 	// (automatically enables the texture unit for cubemaps)
diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h
index 0cd96676444b18222b33cc4bacb766b951c62367..7034e9199d701b4b18312d4ca71d0feaf8ddf2c2 100644
--- a/indra/llrender/lltexture.h
+++ b/indra/llrender/lltexture.h
@@ -63,7 +63,7 @@ class LLTexture : public LLRefCount
 	//
 	virtual S8         getType() const = 0 ;
 	virtual void       setKnownDrawSize(S32 width, S32 height) = 0 ;
-	virtual bool       bindDefaultImage(const S32 stage = 0) const = 0 ;
+	virtual bool       bindDefaultImage(const S32 stage = 0) = 0 ;
 	virtual void       forceImmediateUpdate() = 0 ;
 	virtual void       setActive() = 0 ;
 	virtual S32	       getWidth(S32 discard_level = -1) const = 0 ;
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index a7946cacf54a06c285dd80ca05fa147a554ed9cb..bbaf908d2e50c13cdc5fcf50a913d6cd775ae45c 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -95,8 +95,7 @@ LLButton::Params::Params()
 	is_toggle("is_toggle", false),
 	scale_image("scale_image", true),
 	hover_glow_amount("hover_glow_amount"),
-	commit_on_return("commit_on_return", true),
-	picture_style("picture_style", false)
+	commit_on_return("commit_on_return", true)
 {
 	addSynonym(is_toggle, "toggle");
 	held_down_delay.seconds = 0.5f;
@@ -153,17 +152,9 @@ LLButton::LLButton(const LLButton::Params& p)
 	static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
 	static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
 
-	//if we aren't a picture_style button set label as name if not provided
-	if (!p.picture_style.isProvided() || !p.picture_style)
+	if (!p.label_selected.isProvided())
 	{
-		if (!p.label.isProvided()) 
-		{
-			mUnselectedLabel = p.name();
-		}
-		if (!p.label_selected.isProvided())	
-		{
-			mSelectedLabel = mUnselectedLabel.getString();
-		}
+		mSelectedLabel = mUnselectedLabel;
 	}
 
 	// Hack to make sure there is space for at least one character
@@ -1100,18 +1091,3 @@ void LLButton::resetMouseDownTimer()
 	mMouseDownTimer.stop();
 	mMouseDownTimer.reset();
 }
-
-
-// *TODO: Remove this function after the initial XUI XML re-export pass.
-// static
-void LLButton::setupParamsForExport(Params& p, LLView* parent)
-{
-	std::string label = p.label;
-	if (label.empty())
-	{
-		//if our label is empty this is a picture style button
-		p.picture_style = true;
-	}
-
-	LLUICtrl::setupParamsForExport(p, parent);
-}
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 85580a98bf25f3c781c66a718a4ff0438e181550..08f289092f2d75b1bc2487034e30243f5826be6f 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -115,8 +115,7 @@ class LLButton
 		// misc
 		Optional<bool>			is_toggle,
 								scale_image,
-								commit_on_return,
-								picture_style;      //if true, don't display label
+								commit_on_return;
 		
 		Optional<F32>				hover_glow_amount;
 		Optional<TimeIntervalParam>	held_down_delay;
@@ -247,8 +246,6 @@ class LLButton
 
 	LLFrameTimer	mMouseDownTimer;
 
-	// If the label is empty, set the picture_style attribute
-	static void setupParamsForExport(Params& p, LLView* parent);
 private:
 	void			drawBorder(LLUIImage* imagep, const LLColor4& color, S32 size);
 	void			resetMouseDownTimer();
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index e0053b4cc70ce0a5a64ec4d4eb057c759e1c5ec3..48c76cf105ca61d2d57fbad25589e38a9301858b 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -60,6 +60,8 @@ LLConsole* gConsole = NULL;  // Created and destroyed in LLViewerWindow.
 const F32 FADE_DURATION = 2.f;
 const S32 MIN_CONSOLE_WIDTH = 200;
  
+static LLDefaultChildRegistry::Register<LLConsole> r("console");
+
 LLConsole::LLConsole(const LLConsole::Params& p) 
 :	LLUICtrl(p),
 	LLFixedBuffer(p.max_lines),
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8c72b079eee4dc71222705579a9824dc972fcfec..f2cdad8854a431a6a888054cb0911fa4f785f9a7 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -772,6 +772,12 @@ LLMultiFloater* LLFloater::getHost()
 	return (LLMultiFloater*)mHostHandle.get(); 
 }
 
+void    LLFloater::applySavedVariables()
+{
+	applyRectControl();
+	applyDockState();
+}
+
 void LLFloater::applyRectControl()
 {
 	if (mRectControl.size() > 1)
@@ -1826,7 +1832,6 @@ void LLFloater::buildButtons()
 		LLButton::Params p;
 		p.name(sButtonNames[i]);
 		p.rect(btn_rect);
-		p.label("");
 		p.image_unselected.name(sButtonActiveImageNames[i]);
 		// Selected, no matter if hovered or not, is "pressed"
 		p.image_selected.name(sButtonPressedImageNames[i]);
@@ -1839,6 +1844,7 @@ void LLFloater::buildButtons()
 		p.follows.flags(FOLLOWS_TOP|FOLLOWS_RIGHT);
 		p.tool_tip(sButtonToolTips[i]);
 		p.scale_image(true);
+		p.chrome(true);
 
 		LLButton* buttonp = LLUICtrlFactory::create<LLButton>(p);
 		addChild(buttonp);
@@ -1851,6 +1857,8 @@ void LLFloater::buildButtons()
 /////////////////////////////////////////////////////
 // LLFloaterView
 
+static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view");
+
 LLFloaterView::LLFloaterView (const Params& p)
 :	LLUICtrl (p),
 	mFocusCycleMode(FALSE),
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index ef0d06a58eaa347b3d9705ecbcf690b55771720a..95c8dd84f65e0dab667345516f772d77acf13879 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -280,6 +280,9 @@ friend class LLMultiFloater;
 protected:
 
 	void			setRectControl(const std::string& rectname) { mRectControl = rectname; };
+
+	virtual void    applySavedVariables();
+
 	void			applyRectControl();
 	void			applyDockState();
 	void			storeRectControl();
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index aca4dc56eed59bc9f53da99dd3b6e1a5ac23ec89..03925f922c1182024deb2a1826f03579a5f8d6e9 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -134,8 +134,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
 				// Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe
 				res->mKey = key;
 				res->setInstanceName(name);
-				res->applyRectControl(); // Can't apply rect control until setting instance name
-				res->applyDockState();//same...
+				res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
 				if (res->mAutoTile && !res->getHost() && index > 0)
 				{
 					const LLRect& cur_rect = res->getRect();
@@ -368,7 +367,7 @@ std::string LLFloaterReg::declareVisibilityControl(const std::string& name)
 std::string LLFloaterReg::declareDockStateControl(const std::string& name)
 {
 	std::string controlname = getDockStateControlName(name);
-	LLUI::sSettingGroups["floater"]->declareBOOL(controlname, FALSE,
+	LLUI::sSettingGroups["floater"]->declareBOOL(controlname, TRUE,
 												 llformat("Window Docking state for %s", name.c_str()),
 												 TRUE);
 	return controlname;
diff --git a/indra/llui/llflyoutbutton.cpp b/indra/llui/llflyoutbutton.cpp
index 3483bac782005d279c90995ee919cddba7220327..abb0b869eb8c8eff6303df25a183b87f676da942 100644
--- a/indra/llui/llflyoutbutton.cpp
+++ b/indra/llui/llflyoutbutton.cpp
@@ -48,6 +48,7 @@ LLFlyoutButton::LLFlyoutButton(const Params& p)
 	// Text label button
 	LLButton::Params bp(p.action_button);
 	bp.name(p.label);
+	bp.label(p.label);
 	bp.rect.left(0).bottom(0).width(getRect().getWidth() - FLYOUT_BUTTON_ARROW_WIDTH).height(getRect().getHeight());
 	bp.click_callback.function(boost::bind(&LLFlyoutButton::onActionButtonClick, this, _2));
 	bp.follows.flags(FOLLOWS_ALL);
diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp
index 1e2353b488d88e8cfca241a08ddd5b640ec04f85..b1bd2b89a95c4c57a22861e387c60f5132c692d3 100644
--- a/indra/llui/lliconctrl.cpp
+++ b/indra/llui/lliconctrl.cpp
@@ -125,4 +125,3 @@ void LLIconCtrl::setIconImageDrawSize()
 	}
 }
 
-
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index bac54919432a83f44339977e72615f78a907a67e..9399ace1f79f7c25ac23bd54108a462df2226f1c 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -137,6 +137,7 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
 	mPanelSpacing(p.border_size),
 	mOrientation((p.orientation() == "vertical") ? VERTICAL : HORIZONTAL),
 	mAnimate(p.animate),
+	mAnimatedThisFrame(false),
 	mClip(p.clip)
 {}
 
@@ -172,6 +173,7 @@ void LLLayoutStack::draw()
 		// only force drawing invisible children if visible amount is non-zero
 		drawChild(panelp, 0, 0, !clip_rect.isEmpty());
 	}
+	mAnimatedThisFrame = false;
 }
 
 void LLLayoutStack::removeChild(LLView* view)
@@ -411,8 +413,10 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
 void LLLayoutStack::updateLayout(BOOL force_resize)
 {
+	LLFastTimer ft(FTM_UPDATE_LAYOUT);
 	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
 	calcMinExtents();
 
@@ -431,10 +435,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
-				if ((*panel_it)->mVisibleAmt > 0.99f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 1.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
+					if ((*panel_it)->mVisibleAmt > 0.99f)
+					{
+						(*panel_it)->mVisibleAmt = 1.f;
+					}
 				}
 			}
 			else
@@ -446,10 +453,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mAnimate)
 			{
-				(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
-				if ((*panel_it)->mVisibleAmt < 0.001f)
+				if (!mAnimatedThisFrame)
 				{
-					(*panel_it)->mVisibleAmt = 0.f;
+					(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
+					if ((*panel_it)->mVisibleAmt < 0.001f)
+					{
+						(*panel_it)->mVisibleAmt = 0.f;
+					}
 				}
 			}
 			else
@@ -631,10 +641,10 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		// adjust running headroom count based on new sizes
 		shrink_headroom_total += delta_size;
 
-		panelp->reshape(new_width, new_height);
-		panelp->setOrigin(cur_x, cur_y - new_height);
+		LLRect panel_rect;
+		panel_rect.setLeftTopAndSize(cur_x, cur_y, new_width, new_height);
+		panelp->setShape(panel_rect);
 
-		LLRect panel_rect = panelp->getRect();
 		LLRect resize_bar_rect = panel_rect;
 		if (mOrientation == HORIZONTAL)
 		{
@@ -705,6 +715,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		llassert_always(force_resize == FALSE);
 		updateLayout(TRUE);
 	}
+
+	 mAnimatedThisFrame = true;
 } // end LLLayoutStack::updateLayout
 
 
@@ -772,3 +784,16 @@ void LLLayoutStack::calcMinExtents()
 		}
 	}
 }
+
+// update layout stack animations, etc. once per frame
+// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
+// we might still need to call updateLayout during UI draw phase, in case UI elements
+// are resizing themselves dynamically
+//static 
+void LLLayoutStack::updateClass()
+{
+	for (LLInstanceTracker<LLLayoutStack>::instance_iter it = beginInstances(); it != endInstances(); ++it)
+	{
+		(*it)->updateLayout();
+	}
+}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 9ded48ef6a19c0629aded4bd1878a144a6efe4f8..3a073fa1b28b08209346c6f834d3e78ab90cd37e 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -38,7 +38,7 @@
 
 class LLPanel;
 
-class LLLayoutStack : public LLView
+class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
@@ -81,6 +81,10 @@ class LLLayoutStack : public LLView
 	S32 getNumPanels() { return mPanels.size(); }
 
 	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
+
+
+	static void updateClass();
+
 protected:
 	LLLayoutStack(const Params&);
 	friend class LLUICtrlFactory;
@@ -105,6 +109,8 @@ class LLLayoutStack : public LLView
 	S32 mMinHeight;  // calculated by calcMinExtents
 	S32 mPanelSpacing;
 
+	// true if we already applied animation this frame
+	bool mAnimatedThisFrame;
 	bool mAnimate;
 	bool mClip;
 }; // end class LLLayoutStack
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 3d7bbdff8936102a22a2cefcc7a4a009996e5ef4..d3daa941cfe929d09ff6bbd228d17b17fb8089e4 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -172,6 +172,8 @@ class LLLineEditor
 	virtual BOOL	setLabelArg( const std::string& key, const LLStringExplicit& text );
 
 	void			setLabel(const LLStringExplicit &new_label) { mLabel = new_label; }
+	const std::string& 	getLabel()	{ return mLabel.getString(); }
+
 	void			setText(const LLStringExplicit &new_text);
 
 	const std::string& getText() const		{ return mText.getString(); }
diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp
index 058b6ae1784e0521ce96d9f25f40c9a9ddadb09c..43c21e250ce2550780702f2735417102c7df2233 100644
--- a/indra/llui/lllocalcliprect.cpp
+++ b/indra/llui/lllocalcliprect.cpp
@@ -113,6 +113,9 @@ void LLScreenClipRect::updateScissorRegion()
 {
 	if (sClipRectStack.empty()) return;
 
+	// finish any deferred calls in the old clipping region
+	gGL.flush();
+
 	LLRect rect = sClipRectStack.top();
 	stop_glerror();
 	S32 x,y,w,h;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 91e7e46195d5da1a2e6398b75ab230192faae97a..de9a854f63702872920e2fbfdadeea1e4c23dbca 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -118,6 +118,7 @@ const F32 PIE_SHRINK_TIME = 0.2f; // time of transition between unbounded and bo
 
 const F32 ACTIVATE_HIGHLIGHT_TIME = 0.3f;
 
+static MenuRegistry::Register<LLMenuItemGL> register_menu_item("menu_item");
 static MenuRegistry::Register<LLMenuItemSeparatorGL> register_separator("menu_item_separator");
 static MenuRegistry::Register<LLMenuItemCallGL> register_menu_item_call("menu_item_call");
 static MenuRegistry::Register<LLMenuItemCheckGL> register_menu_item_check("menu_item_check");
@@ -132,6 +133,28 @@ static LLDefaultChildRegistry::Register<LLMenuGL> register_menu_default("menu");
 ///============================================================================
 /// Class LLMenuItemGL
 ///============================================================================
+
+LLMenuItemGL::Params::Params()
+:	shortcut("shortcut"),
+	jump_key("jump_key", KEY_NONE),
+	use_mac_ctrl("use_mac_ctrl", false),
+	rect("rect"),
+	left("left"),
+	top("top"),
+	right("right"),
+	bottom("bottom"),
+	width("width"),
+	height("height"),
+	bottom_delta("bottom_delta"),
+	left_delta("left_delta"),
+	enabled_color("enabled_color"),
+	disabled_color("disabled_color"),
+	highlight_bg_color("highlight_bg_color"),
+	highlight_fg_color("highlight_fg_color")
+{	
+	mouse_opaque = true;
+}
+
 // Default constructor
 LLMenuItemGL::LLMenuItemGL(const LLMenuItemGL::Params& p)
 :	LLUICtrl(p),
@@ -459,12 +482,6 @@ void LLMenuItemGL::draw( void )
 
 	LLColor4 color;
 
-	LLFontGL::ShadowType shadow_style = LLFontGL::NO_SHADOW;
-	if (getEnabled() && !mDrawTextDisabled )
-	{
-		shadow_style = LLFontGL::DROP_SHADOW_SOFT;
-	}
-
 	if ( getEnabled() && getHighlight() )
 	{
 		color = mHighlightForeground.get();
@@ -482,26 +499,26 @@ void LLMenuItemGL::draw( void )
 	if (mBriefItem)
 	{
 		mFont->render( mLabel, 0, BRIEF_PAD_PIXELS / 2, 0, color,
-					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style );
+					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL);
 	}
 	else
 	{
 		if( !mDrawBoolLabel.empty() )
 		{
 			mFont->render( mDrawBoolLabel.getWString(), 0, (F32)LEFT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 		mFont->render( mLabel.getWString(), 0, (F32)LEFT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+					   LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		if( !mDrawAccelLabel.empty() )
 		{
 			mFont->render( mDrawAccelLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 		if( !mDrawBranchLabel.empty() )
 		{
 			mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
-						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style, S32_MAX, S32_MAX, NULL, FALSE );
+						   LLFontGL::RIGHT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
 		}
 	}
 
@@ -1460,12 +1477,6 @@ void LLMenuItemBranchDownGL::draw( void )
 		gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
 	}
 
-	LLFontGL::ShadowType shadow_style = LLFontGL::NO_SHADOW;
-	if (getEnabled() && !getDrawTextDisabled() )
-	{
-		shadow_style = LLFontGL::DROP_SHADOW_SOFT;
-	}
-
 	LLColor4 color;
 	if (getHighlight())
 	{
@@ -1480,7 +1491,7 @@ void LLMenuItemBranchDownGL::draw( void )
 		color = mDisabledColor.get();
 	}
 	getFont()->render( mLabel.getWString(), 0, (F32)getRect().getWidth() / 2.f, (F32)LABEL_BOTTOM_PAD_PIXELS, color,
-				   LLFontGL::HCENTER, LLFontGL::BOTTOM, LLFontGL::NORMAL, shadow_style );
+				   LLFontGL::HCENTER, LLFontGL::BOTTOM, LLFontGL::NORMAL);
 
 
 	// underline navigation key only when keyboard navigation has been initiated
@@ -1555,8 +1566,6 @@ LLMenuScrollItem::LLMenuScrollItem(const Params& p)
 	}
 
 	LLButton::Params bparams;
-	bparams.label("");
-	bparams.label_selected("");
 	bparams.mouse_opaque(true);
 	bparams.scale_image(false);
 	bparams.click_callback(p.scroll_callback);
@@ -3261,11 +3270,9 @@ BOOL LLMenuBarGL::handleHover( S32 x, S32 y, MASK mask )
 ///============================================================================
 LLCoordGL LLMenuHolderGL::sContextMenuSpawnPos(S32_MAX, S32_MAX);
 
-LLMenuHolderGL::LLMenuHolderGL()
-	: LLPanel()
+LLMenuHolderGL::LLMenuHolderGL(const LLMenuHolderGL::Params& p)
+	: LLPanel(p)
 {
-	setName("Menu Holder");
-	setMouseOpaque(FALSE);
 	sItemActivationTimer.stop();
 	mCanHide = TRUE;
 }
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 09d9e407c7bea43e03860ae2a82fdfadc5697563..cbb9b4d3448a105d588af9fdf3de3924507a814f 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -79,26 +79,7 @@ class LLMenuItemGL : public LLUICtrl
 								highlight_fg_color;
 
 
-		Params()
-		:	shortcut("shortcut"),
-			jump_key("jump_key", KEY_NONE),
-			use_mac_ctrl("use_mac_ctrl", false),
-			rect("rect"),
-			left("left"),
-			top("top"),
-			right("right"),
-			bottom("bottom"),
-			width("width"),
-			height("height"),
-			bottom_delta("bottom_delta"),
-			left_delta("left_delta"),
-			enabled_color("enabled_color"),
-			disabled_color("disabled_color"),
-			highlight_bg_color("highlight_bg_color"),
-			highlight_fg_color("highlight_fg_color")
-		{	
-			mouse_opaque = true;
-		}
+		Params();
 	};
 
 protected:
@@ -765,7 +746,9 @@ class LLMenuBarGL : public LLMenuGL
 class LLMenuHolderGL : public LLPanel
 {
 public:
-	LLMenuHolderGL();
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{};
+	LLMenuHolderGL(const Params& p);
 	virtual ~LLMenuHolderGL() {}
 
 	virtual BOOL hideMenus();
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index ef222bad608cad3379b25c5c964964acb4a4312a..eb8cc3e2c5007f697f07d2d9a09924f56f000071 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -81,6 +81,11 @@ class LLNotificationHistoryChannel : public LLNotificationChannel
 
 	void savePersistentNotifications()
 	{
+		/* NOTE: As of 2009-11-09 the reload of notifications on startup does not
+		work, and has not worked for months.  Skip saving notifications until the
+		read can be fixed, because this hits the disk once per notification and
+		causes log spam.  James
+
 		llinfos << "Saving open notifications to " << mFileName << llendl;
 
 		llofstream notify_file(mFileName.c_str());
@@ -107,6 +112,7 @@ class LLNotificationHistoryChannel : public LLNotificationChannel
 
 		LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
 		formatter->format(output, notify_file, LLSDFormatter::OPTIONS_PRETTY);
+		*/
 	}
 
 	void loadPersistentNotifications()
diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp
index ba53f84877478e48cf5dc783e9e56e42a3e79065..d28134120221ce17cf8377655d1b20e198ed238f 100644
--- a/indra/llui/llscrolllistcolumn.cpp
+++ b/indra/llui/llscrolllistcolumn.cpp
@@ -44,6 +44,9 @@
 
 const S32 MIN_COLUMN_WIDTH = 20;
 
+// defaults for LLScrollColumnHeader param block pulled from widgets/scroll_column_header.xml
+static LLWidgetNameRegistry::StaticRegistrar sRegisterColumnHeaderParams(&typeid(LLScrollColumnHeader::Params), "scroll_column_header");
+
 //---------------------------------------------------------------------------
 // LLScrollColumnHeader
 //---------------------------------------------------------------------------
@@ -51,15 +54,7 @@ LLScrollColumnHeader::Params::Params()
 :	column("column")
 {
 	name  = "column_header";
-	image_unselected.name("square_btn_32x128.tga");
-	image_selected.name("square_btn_selected_32x128.tga");
-	image_disabled.name("square_btn_32x128.tga");
-	image_disabled_selected.name("square_btn_selected_32x128.tga");
-	image_overlay.name("combobox_arrow.tga");
-	image_overlay_alignment("right");
-	font_halign = LLFontGL::LEFT;
 	tab_stop(false);
-	scale_image(true);
 }
 
 
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index a6cd6412e5024fe7d44126c22224787c44e160ef..1c2c02e1cc1f840dce411fae12cd4b713e9129f5 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -2624,7 +2624,7 @@ void LLScrollListCtrl::addColumn(const LLScrollListColumn::Params& column_params
 
 			LLRect temp_rect = LLRect(left,top+mHeadingHeight,right,top);
 
-			LLScrollColumnHeader::Params params;
+			LLScrollColumnHeader::Params params(LLUICtrlFactory::getDefaultParams<LLScrollColumnHeader>());
 			params.name = "btn_" + name;
 			params.rect = temp_rect;
 			params.column = new_column;
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index cde4c755184d899c97053e8c069235f0a17c25ad..b67f753d39431e09fe47143bf2f7b3bf7121c3fe 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -155,7 +155,7 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)
 	mTotalTabWidth(0),
 	mTabPosition(p.tab_position),
 	mFontHalign(p.font_halign),
-	mFont(p.font.isProvided() ? p.font() : (mIsVertical ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifSmall())),
+	mFont(p.font),
 	mFirstTabParams(p.first_tab),
 	mMiddleTabParams(p.middle_tab),
 	mLastTabParams(p.last_tab)
@@ -927,7 +927,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 		textbox = LLUICtrlFactory::create<LLTextBox> (params);
 		
 		LLButton::Params p;
-		p.name("");
+		p.name("placeholder");
 		btn = LLUICtrlFactory::create<LLButton>(p);
 	}
 	else
@@ -946,6 +946,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 			p.scale_image(true);
 			p.font_halign = mFontHalign;
 			p.tab_stop(false);
+			p.label_shadow(false);
 			if (indent)
 			{
 				p.pad_left(indent);
@@ -965,6 +966,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 			p.image_unselected(tab_img);
 			p.image_selected(tab_selected_img);
 			p.tab_stop(false);
+			p.label_shadow(false);
 			// Try to squeeze in a bit more text
 			p.pad_left(4);
 			p.pad_right(2);
@@ -986,7 +988,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
 				p.follows.flags = p.follows.flags() | FOLLOWS_BOTTOM;
 			}
 
-			btn = LLUICtrlFactory::create<LLButton>(p);
+++			btn = LLUICtrlFactory::create<LLButton>(p);
 		}
 	}
 	
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 9a26f0b4726be0e54ebf089ac5ffd58b40bc9479..97ba69134184142c9e5cecc5020104ac47256ea7 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1108,7 +1108,7 @@ void LLTextBase::reflow(S32 start_index)
 														S32_MAX);
 
 			S32 segment_width, segment_height;
-			segment->getDimensions(seg_offset, character_count, segment_width, segment_height);
+			bool force_newline = segment->getDimensions(seg_offset, character_count, segment_width, segment_height);
 			// grow line height as necessary based on reported height of this segment
 			line_height = llmax(line_height, segment_height);
 			remaining_pixels -= segment_width;
@@ -1153,6 +1153,18 @@ void LLTextBase::reflow(S32 start_index)
 			else
 			{
 				// subtract pixels used and increment segment
+				if (force_newline)
+				{
+					mLineInfoList.push_back(line_info(
+												line_start_index, 
+												last_segment_char_on_line, 
+												line_rect, 
+												line_count));
+					line_start_index = segment->getStart() + seg_offset;
+					cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
+					line_height = 0;
+					remaining_pixels = text_width;
+				}
 				++seg_iter;
 				seg_offset = 0;
 			}
@@ -1419,6 +1431,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
 	registrar.add("Url.OpenExternal", boost::bind(&LLUrlAction::openURLExternal, url));
 	registrar.add("Url.Execute", boost::bind(&LLUrlAction::executeSLURL, url));
 	registrar.add("Url.Teleport", boost::bind(&LLUrlAction::teleportToLocation, url));
+	registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
 	registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
 	registrar.add("Url.CopyUrl", boost::bind(&LLUrlAction::copyURLToClipboard, url));
 
@@ -1450,9 +1463,7 @@ void LLTextBase::setText(const LLStringExplicit &utf8str)
 
 	appendText(text, false);
 
-	//resetDirty();
 	onValueChange(0, getLength());
-	needsReflow();
 }
 
 //virtual
@@ -1630,8 +1641,6 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen
 		insertStringNoUndo(getLength(), wide_text, &segments);
 	}
 
-	needsReflow();
-	
 	// Set the cursor and scroll position
 	if( selection_start != selection_end )
 	{
@@ -2115,7 +2124,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 		LLRect doc_rect = mDocumentView->getLocalRect();
 		doc_rect.mLeft -= mDocumentView->getRect().mLeft;
 		// adjust for height of text above widget baseline
-		doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mTextRect.getHeight());
+		doc_rect.mBottom = doc_rect.getHeight() - mTextRect.getHeight();
 		return doc_rect;
 	}
 }
@@ -2127,7 +2136,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 LLTextSegment::~LLTextSegment()
 {}
 
-void LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; }
+bool LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; return false;}
 S32	LLTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { return 0; }
 S32	LLTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const { return 0; }
 void LLTextSegment::updateLayout(const LLTextBase& editor) {}
@@ -2355,12 +2364,13 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)
 	mTooltip = tooltip;
 }
 
-void LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 {
 	LLWString text = mEditor.getWText();
 
 	height = mFontHeight;
 	width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
+	return num_chars >= 1 && text[mStart + num_chars - 1] == '\n';
 }
 
 S32	LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
@@ -2407,8 +2417,9 @@ S32	LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 lin
 	// but not both
 	S32 last_char_in_run = mStart + segment_offset + num_chars;
 	// check length first to avoid indexing off end of string
-	if (last_char_in_run >= mEditor.getLength() 
-		|| text[last_char_in_run] == '\n')
+	if (last_char_in_run < mEnd 
+		&& (last_char_in_run >= mEditor.getLength() 
+			|| text[last_char_in_run] == '\n'))
 	{
 		num_chars++;
 	}
@@ -2447,7 +2458,7 @@ LLInlineViewSegment::~LLInlineViewSegment()
 	mView->die();
 }
 
-void	LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+bool LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 {
 	if (first_char == 0 && num_chars == 0) 
 	{
@@ -2461,6 +2472,8 @@ void	LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt
 		width = mLeftPad + mRightPad + mView->getRect().getWidth();
 		height = mBottomPad + mTopPad + mView->getRect().getHeight();
 	}
+
+	return false;
 }
 
 S32	LLInlineViewSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 4cca522a23501ec3893e4144e0d49c3f911b0c3f..8cae8fde220ebb960af7a9d24a5081c3952f2570 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -370,7 +370,7 @@ class LLTextSegment : public LLRefCount, public LLMouseHandler
 	LLTextSegment(S32 start, S32 end) : mStart(start), mEnd(end){};
 	virtual ~LLTextSegment();
 
-	virtual void				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	virtual bool				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	virtual S32					getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
 	virtual S32					getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	virtual void				updateLayout(const class LLTextBase& editor);
@@ -421,7 +421,7 @@ class LLNormalTextSegment : public LLTextSegment
 	LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor );
 	LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE);
 
-	/*virtual*/ void				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	/*virtual*/ bool				getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	/*virtual*/ S32					getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
 	/*virtual*/ S32					getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	/*virtual*/ F32					draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
@@ -474,7 +474,7 @@ class LLInlineViewSegment : public LLTextSegment
 
 	LLInlineViewSegment(const Params& p, S32 start, S32 end);
 	~LLInlineViewSegment();
-	/*virtual*/ void		getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
+	/*virtual*/ bool		getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
 	/*virtual*/ S32			getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
 	/*virtual*/ void		updateLayout(const class LLTextBase& editor);
 	/*virtual*/ F32			draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 20bceb46756833225780bdb12bd35629d3d2ab8d..00f1d833a30a4c264ca8f21269214cd3d462b69e 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -45,6 +45,9 @@ LLTextBox::LLTextBox(const LLTextBox::Params& p)
 	mClickedCallback(NULL)
 {}
 
+LLTextBox::~LLTextBox()
+{}
+
 BOOL LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 	BOOL	handled = LLTextBase::handleMouseDown(x, y, mask);
@@ -97,6 +100,18 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
 	return handled;
 }
 
+BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = LLTextBase::handleHover(x, y, mask);
+	if (!handled && mClickedCallback)
+	{
+		// Clickable text boxes change the cursor to a hand
+		LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
+		return TRUE;
+	}
+	return handled;
+}
+
 void LLTextBox::setText(const LLStringExplicit& text)
 {
 	// does string argument insertion
@@ -105,6 +120,11 @@ void LLTextBox::setText(const LLStringExplicit& text)
 	LLTextBase::setText(mText.getString());
 }
 
+void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
+{
+	mClickedCallback = boost::bind(cb, userdata);
+}
+
 S32 LLTextBox::getTextPixelWidth()
 {
 	return getContentsRect().getWidth();
@@ -115,6 +135,12 @@ S32 LLTextBox::getTextPixelHeight()
 	return getContentsRect().getHeight();
 }
 
+
+LLSD LLTextBox::getValue() const
+{
+	return LLSD(getText());
+}
+
 BOOL LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
 {
 	mText.setArg(key, text);
diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h
index da0bcbe972d9abac8f4f41d2c6dfa1199e7cbd5f..73f8a7c299ed7cdbb3662923505a2adb79deacd3 100644
--- a/indra/llui/lltextbox.h
+++ b/indra/llui/lltextbox.h
@@ -33,8 +33,6 @@
 #ifndef LL_LLTEXTBOX_H
 #define LL_LLTEXTBOX_H
 
-#include "v4color.h"
-#include "llstring.h"
 #include "lluistring.h"
 #include "lltextbase.h"
 
@@ -54,28 +52,25 @@ class LLTextBox :
 	friend class LLUICtrlFactory;
 
 public:
-	virtual ~LLTextBox() {}
+	virtual ~LLTextBox();
 
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
 
-	/*virtual*/ void			setText( const LLStringExplicit& text );
+	/*virtual*/ void setText( const LLStringExplicit& text );
 	
 	void			setRightAlign()							{ mHAlign = LLFontGL::RIGHT; }
 	void			setHAlign( LLFontGL::HAlign align )		{ mHAlign = align; }
-	void			setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL ){ mClickedCallback = boost::bind(cb, userdata); }		// mouse down and up within button
-
-	//const LLFontGL* getFont() const							{ return mDefaultFont; }
-	//void			setFont(const LLFontGL* font)			{ mDefaultFont = font; }
+	void			setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL );
 
 	void			reshapeToFitText();
 
-	//const std::string&	getText() const							{ return mText.getString(); }
 	S32				getTextPixelWidth();
 	S32				getTextPixelHeight();
 
-	virtual LLSD	getValue() const						{ return LLSD(getText()); }
-	virtual BOOL	setTextArg( const std::string& key, const LLStringExplicit& text );
+	/*virtual*/ LLSD	getValue() const;
+	/*virtual*/ BOOL	setTextArg( const std::string& key, const LLStringExplicit& text );
 
 protected:
 	void            onUrlLabelUpdated(const std::string &url, const std::string &label);
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 23c87c7522cca89063c1fb3187d6dcb3065506fa..fe1c2ba67c0b0388e576d7685da1e1c1ee487fdc 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -57,6 +57,8 @@ LLToolTipView *gToolTipView = NULL;
 // Member functions
 //
 
+static LLDefaultChildRegistry::Register<LLToolTipView> register_tooltip_view("tooltip_view");
+
 LLToolTipView::Params::Params()
 {
 	mouse_opaque = false;
@@ -142,7 +144,7 @@ void LLToolTipView::drawStickyRect()
 //
 
 
-static LLDefaultChildRegistry::Register<LLToolTip> r("tool_tip");
+static LLDefaultChildRegistry::Register<LLToolTip> register_tooltip("tool_tip");
 
 
 LLToolTip::Params::Params()
@@ -198,6 +200,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params icon_params;
 		icon_params.name = "tooltip_info";
+		icon_params.label(""); // provid label but set to empty so name does not overwrite it -angela
 		LLRect icon_rect;
 		LLUIImage* imagep = p.image;
 		TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16);
@@ -206,6 +209,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 		//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM;
 		icon_params.image_unselected(imagep);
 		icon_params.image_selected(imagep);
+
 		icon_params.scale_image(true);
 		icon_params.flash_color(icon_params.highlight_color());
 		mInfoButton  = LLUICtrlFactory::create<LLButton>(icon_params);
@@ -223,6 +227,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params p_button;
 		p_button.name(std::string("play_media"));
+		p_button.label(""); // provid label but set to empty so name does not overwrite it -angela
 		TOOLTIP_PLAYBUTTON_SIZE = 16;
 		LLRect button_rect;
 		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);
@@ -247,6 +252,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	{
 		LLButton::Params p_w_button;
 		p_w_button.name(std::string("home_page"));
+		p_w_button.label(""); // provid label but set to empty so name does not overwrite it -angela
 		TOOLTIP_PLAYBUTTON_SIZE = 16;
 		LLRect button_rect;
 		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index a82e6eb372a9f12f3e8f2a87a70803893bd55ee1..4cf503b413c49dae9535b13a357e975a0b1fdb6d 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -43,7 +43,6 @@
 #include "llrender.h"
 #include "llrect.h"
 #include "lldir.h"
-#include "llfontgl.h"
 #include "llgl.h"
 
 // Project includes
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index c3c0daed0f4017cd770331d638e655c5246faad1..8ab015f2bb85c5e5db6a69fde8eb5a25025f0087 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -449,3 +449,9 @@ const std::string* LLUICtrlFactory::getWidgetTag(const std::type_info* widget_ty
 {
 	return LLWidgetNameRegistry::instance().getValue(widget_type);
 }
+
+// static
+void LLUICtrlFactory::connect(LLView* parent, LLView* child)
+{
+	parent->addChild(child);
+}
\ No newline at end of file
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 17e32dc7a99ba5be6d937c48ba59735bd090f789..8a9c9e23c1d76a43d00a764894417b84d395d477 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -188,10 +188,15 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		T* widget = new T(params);
 		widget->initFromParams(params);
 		if (parent)
-			widget->setParent(parent);
+		{
+			connect(parent, widget);
+		}
 		return widget;
 	}
 
+	// fix for gcc template instantiation annoyance
+	static void connect(LLView* parent, LLView* child);
+	
 	LLView* createFromXML(LLXMLNodePtr node, LLView* parent, const std::string& filename, const widget_registry_t&, LLXMLNodePtr output_node );
 
 	template<typename T>
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index f3401f91f7a5435ba518c4c6b79d3499cfa5e51f..679db5e39ba9a636c09c6a0b68b68b6bd3cf9ee8 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -121,6 +121,18 @@ void LLUrlAction::teleportToLocation(std::string url)
 	}	
 }
 
+void LLUrlAction::showLocationOnMap(std::string url)
+{
+	LLUrlMatch match;
+	if (LLUrlRegistry::instance().findUrl(url, match))
+	{
+		if (! match.getLocation().empty())
+		{
+			executeSLURL("secondlife:///app/worldmap/" + match.getLocation());
+		}
+	}	
+}
+
 void LLUrlAction::copyURLToClipboard(std::string url)
 {
 	LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(url));
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 6b9d565b44ca97e9aebd599576375fe9c77224a1..4830cf27ef9494cce412be39c39e6262dfcf6351 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -67,6 +67,9 @@ class LLUrlAction
 	/// if the Url specifies an SL location, teleport there
 	static void teleportToLocation(std::string url);
 
+	/// if the Url specifies an SL location, show it on a map
+	static void showLocationOnMap(std::string url);
+
 	/// perform the appropriate action for left-clicking on a Url
 	static void clickAction(std::string url);
 
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 52e4229fb4da308f7aea904936b1da5bfa40c7c0..dae4b512d15ed2ed8f55d7a515c3a282d03169ea 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -145,6 +145,18 @@ void LLUrlEntryBase::callObservers(const std::string &id, const std::string &lab
 	}
 }
 
+static std::string getStringAfterToken(const std::string str, const std::string token)
+{
+	size_t pos = str.find(token);
+	if (pos == std::string::npos)
+	{
+		return "";
+	}
+
+	pos += token.size();
+	return str.substr(pos, str.size() - pos);
+}
+
 //
 // LLUrlEntryHTTP Describes generic http: and https: Urls
 //
@@ -154,7 +166,6 @@ LLUrlEntryHTTP::LLUrlEntryHTTP()
 							boost::regex::perl|boost::regex::icase);
 	mMenuName = "menu_url_http.xml";
 	mTooltip = LLTrans::getString("TooltipHttpUrl");
-	//mIcon = "gear.tga";
 }
 
 std::string LLUrlEntryHTTP::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
@@ -390,7 +401,7 @@ std::string LLUrlEntryParcel::getLabel(const std::string &url, const LLUrlLabelC
 }
 
 //
-// LLUrlEntryPlace Describes secondlife:///<location> URLs
+// LLUrlEntryPlace Describes secondlife://<location> URLs
 //
 LLUrlEntryPlace::LLUrlEntryPlace()
 {
@@ -433,15 +444,7 @@ std::string LLUrlEntryPlace::getLabel(const std::string &url, const LLUrlLabelCa
 std::string LLUrlEntryPlace::getLocation(const std::string &url) const
 {
 	// return the part of the Url after secondlife:// part
-	const std::string search_string = "://";
-	size_t pos = url.find(search_string);
-	if (pos == std::string::npos)
-	{
-		return "";
-	}
-
-	pos += search_string.size();
-	return url.substr(pos, url.size() - pos);
+	return ::getStringAfterToken(url, "://");
 }
 
 //
@@ -468,6 +471,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 	LLURI uri(url);
 	LLSD path_array = uri.pathArray();
 	S32 path_parts = path_array.size();
+	const std::string label = LLTrans::getString("SLurlLabelTeleport");
 	if (path_parts == 6)
 	{
 		// handle teleport url with (X,Y,Z) coordinates
@@ -475,7 +479,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 		std::string x = path_array[path_parts-3];
 		std::string y = path_array[path_parts-2];
 		std::string z = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + "," + y + "," + z + ")";
+		return label + " " + location + " (" + x + "," + y + "," + z + ")";
 	}
 	else if (path_parts == 5)
 	{
@@ -483,20 +487,20 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 		std::string location = unescapeUrl(path_array[path_parts-3]);
 		std::string x = path_array[path_parts-2];
 		std::string y = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + "," + y + ")";
+		return label + " " + location + " (" + x + "," + y + ")";
 	}
 	else if (path_parts == 4)
 	{
 		// handle teleport url with (X) coordinate only
 		std::string location = unescapeUrl(path_array[path_parts-2]);
 		std::string x = path_array[path_parts-1];
-		return "Teleport to " + location + " (" + x + ")";
+		return label + " " + location + " (" + x + ")";
 	}
 	else if (path_parts == 3)
 	{
 		// handle teleport url with no coordinates
 		std::string location = unescapeUrl(path_array[path_parts-1]);
-		return "Teleport to " + location;
+		return label + " " + location;
 	}
 
 	return url;
@@ -505,15 +509,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
 std::string LLUrlEntryTeleport::getLocation(const std::string &url) const
 {
 	// return the part of the Url after ///app/teleport
-	const std::string search_string = "teleport";
-	size_t pos = url.find(search_string);
-	if (pos == std::string::npos)
-	{
-		return "";
-	}
-
-	pos += search_string.size() + 1;
-	return url.substr(pos, url.size() - pos);
+	return ::getStringAfterToken(url, "app/teleport/");
 }
 
 ///
@@ -599,3 +595,43 @@ std::string LLUrlEntrySLLabel::getUrl(const std::string &string)
 	return getUrlFromWikiLink(string);
 }
 
+//
+// LLUrlEntryWorldMap Describes secondlife:///<location> URLs
+//
+LLUrlEntryWorldMap::LLUrlEntryWorldMap()
+{
+	mPattern = boost::regex("secondlife:///app/worldmap/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
+							boost::regex::perl|boost::regex::icase);
+	mMenuName = "menu_url_map.xml";
+	mTooltip = LLTrans::getString("TooltipMapUrl");
+}
+
+std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+	//
+	// we handle SLURLs in the following formats:
+	//   - secondlife:///app/worldmap/PLACE/X/Y/Z
+	//   - secondlife:///app/worldmap/PLACE/X/Y
+	//   - secondlife:///app/worldmap/PLACE/X
+	//
+	LLURI uri(url);
+	LLSD path_array = uri.pathArray();
+	S32 path_parts = path_array.size();
+	if (path_parts < 3)
+	{
+		return url;
+	}
+
+	const std::string label = LLTrans::getString("SLurlLabelShowOnMap");
+	std::string location = path_array[2];
+	std::string x = (path_parts > 3) ? path_array[3] : "128";
+	std::string y = (path_parts > 4) ? path_array[4] : "128";
+	std::string z = (path_parts > 5) ? path_array[5] : "0";
+	return label + " " + location + " (" + x + "," + y + "," + z + ")";
+}
+
+std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
+{
+	// return the part of the Url after secondlife:///app/worldmap/ part
+	return ::getStringAfterToken(url, "app/worldmap/");
+}
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index afb2fdcde9fe88c8ea17e011b539b9eae49bd619..4507572b1e1939d722eb6dbfd574d30534d9a08c 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -186,7 +186,7 @@ class LLUrlEntryParcel : public LLUrlEntryBase
 
 ///
 /// LLUrlEntryPlace Describes a Second Life location Url, e.g.,
-/// secondlife:///Ahern/50/50/50
+/// secondlife://Ahern/50/50/50
 ///
 class LLUrlEntryPlace : public LLUrlEntryBase
 {
@@ -243,4 +243,16 @@ class LLUrlEntrySLLabel : public LLUrlEntryBase
 	/*virtual*/ std::string getUrl(const std::string &string);
 };
 
+///
+/// LLUrlEntryWorldMap Describes a Second Life worldmap Url, e.g.,
+/// secondlife:///app/worldmap/Ahern/50/50/50
+///
+class LLUrlEntryWorldMap : public LLUrlEntryBase
+{
+public:
+	LLUrlEntryWorldMap();
+	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+	/*virtual*/ std::string getLocation(const std::string &url) const;
+};
+
 #endif
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 249c7320d698988de818771e03849c37a116a38c..60275b60bc23d86a7cb6aac7625b898074adb210 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -51,6 +51,7 @@ LLUrlRegistry::LLUrlRegistry()
 	registerUrl(new LLUrlEntryGroup());
 	registerUrl(new LLUrlEntryParcel());
 	registerUrl(new LLUrlEntryTeleport());
+	registerUrl(new LLUrlEntryWorldMap());
 	registerUrl(new LLUrlEntryObjectIM());
 	registerUrl(new LLUrlEntryPlace());
 	registerUrl(new LLUrlEntrySL());
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fe7fd59de80e3a4c32288bfc022bf5ae84d22484..dba24ee165fbb2a1aa19423c59b407f74fa8a97d 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -40,7 +40,6 @@
 
 #include "llrender.h"
 #include "llevent.h"
-#include "llfontgl.h"
 #include "llfocusmgr.h"
 #include "llrect.h"
 #include "llstl.h"
@@ -1698,8 +1697,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
 	return child;
 }
 
+static LLFastTimer::DeclareTimer FTM_FIND_VIEWS("Find Widgets");
+
 LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
 {
+	LLFastTimer ft(FTM_FIND_VIEWS);
 	//richard: should we allow empty names?
 	//if(name.empty())
 	//	return NULL;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c3b442e0224383803325c76ab3658da33d70892e..2607120e17cbd54ea9d1390694936849e3377625 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -267,9 +267,6 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	// remove the specified child from the view, and set it's parent to NULL.
 	virtual void	removeChild(LLView* view);
 
-	// helper function for lluictrlfactory.h create<> template
-	void setParent(LLView* parent) { if (parent) parent->addChild(this); }
-
 	virtual BOOL	postBuild() { return TRUE; }
 
 	child_tab_order_t getCtrlOrder() const		{ return mCtrlOrder; }
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index 781321e5e4027b9a9961c2684ac4fa967a9f6666..c0c6e592d584318a72d73059c7336509c2a0846c 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -580,7 +580,7 @@ void LLDir::setLindenUserDir(const std::string &first, const std::string &last)
 	}
 	else
 	{
-		llerrs << "Invalid name for LLDir::setLindenUserDir" << llendl;
+		llerrs << "Invalid name for LLDir::setLindenUserDir(first='" << first << "', last='" << last << "')" << llendl;
 	}
 
 	dumpCurrentDirectories();	
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
index 704e1ab14274d0c51af38e375e3f59a9d404d863..e85cc437f40c83e6d1b494fcf5ce09a6f724bc86 100644
--- a/indra/llvfs/lllfsthread.cpp
+++ b/indra/llvfs/lllfsthread.cpp
@@ -189,7 +189,7 @@ bool LLLFSThread::Request::processRequest()
 	{
 		llassert(mOffset >= 0);
 		LLAPRFile infile ;
-		infile.open(mThread->getLocalAPRFilePool(), mFileName, LL_APR_RB);
+		infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
 		if (!infile.getFileHandle())
 		{
 			llwarns << "LLLFS: Unable to read file: " << mFileName << llendl;
@@ -213,7 +213,7 @@ bool LLLFSThread::Request::processRequest()
 		if (mOffset < 0)
 			flags |= APR_APPEND;
 		LLAPRFile outfile ;
-		outfile.open(mThread->getLocalAPRFilePool(), mFileName, flags);
+		outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
 		if (!outfile.getFileHandle())
 		{
 			llwarns << "LLLFS: Unable to write file: " << mFileName << llendl;
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 9f03c8f695605b67925da31a1b68ea5036c16aaa..e671fc8a83cdfe0bd9138fc2f0193f68d17eccf9 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -418,7 +418,6 @@ static int x11_detect_VRAM_kb()
 BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync)
 {
 	//bool			glneedsinit = false;
-//    const char *gllibname = null;
 
 	llinfos << "createContext, fullscreen=" << fullscreen <<
 	    " size=" << width << "x" << height << llendl;
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index fb6d5b29054ce58dd61177322d236c9add308e69..de927de1cd6ef6c44f1805fa9a02c5bf9967ce65 100644
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -1,1098 +1,1098 @@
-/**
- * @file media_plugin_quicktime.cpp
- * @brief QuickTime plugin for LLMedia API plugin system
- *
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "llgl.h"
-
-#include "llplugininstance.h"
-#include "llpluginmessage.h"
-#include "llpluginmessageclasses.h"
-#include "media_plugin_base.h"
-
-#if LL_QUICKTIME_ENABLED
-
-#if defined(LL_DARWIN)
-	#include <QuickTime/QuickTime.h>
-#elif defined(LL_WINDOWS)
-	#include "MacTypes.h"
-	#include "QTML.h"
-	#include "Movies.h"
-	#include "QDoffscreen.h"
-	#include "FixMath.h"
-	#include "QTLoadLibraryUtils.h"
-#endif
-
-// TODO: Make sure that the only symbol exported from this library is LLPluginInitEntryPoint
-////////////////////////////////////////////////////////////////////////////////
-//
-class MediaPluginQuickTime : public MediaPluginBase
-{
-public:
-	MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
-	~MediaPluginQuickTime();
-
-	/* virtual */ void receiveMessage(const char *message_string);
-
-private:
-
-	int mNaturalWidth;
-	int mNaturalHeight;
-	Movie mMovieHandle;
-	GWorldPtr mGWorldHandle;
-	ComponentInstance mMovieController;
-	int mCurVolume;
-	bool mMediaSizeChanging;
-	bool mIsLooping;
-	std::string mMovieTitle;
-	bool mReceivedTitle;
-	const int mMinWidth;
-	const int mMaxWidth;
-	const int mMinHeight;
-	const int mMaxHeight;
-	F64 mPlayRate;
-	std::string mNavigateURL;
-
-	enum ECommand {
-		COMMAND_NONE,
-		COMMAND_STOP,
-		COMMAND_PLAY,
-		COMMAND_FAST_FORWARD,
-		COMMAND_FAST_REWIND,
-		COMMAND_PAUSE,
-		COMMAND_SEEK,
-	};
-	ECommand mCommand;
-
-	// Override this to add current time and duration to the message
-	/*virtual*/ void setDirty(int left, int top, int right, int bottom)
-	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "updated");
-
-		message.setValueS32("left", left);
-		message.setValueS32("top", top);
-		message.setValueS32("right", right);
-		message.setValueS32("bottom", bottom);
-
-		if(mMovieHandle)
-		{
-			message.setValueReal("current_time", getCurrentTime());
-			message.setValueReal("duration", getDuration());
-			message.setValueReal("current_rate", Fix2X(GetMovieRate(mMovieHandle)));
-		}
-
-		sendMessage(message);
-	}
-
-
-	static Rect rectFromSize(int width, int height)
-	{
-		Rect result;
-
-
-		result.left = 0;
-		result.top = 0;
-		result.right = width;
-		result.bottom = height;
-
-		return result;
-	}
-
-	Fixed getPlayRate(void)
-	{
-		Fixed result;
-		if(mPlayRate == 0.0f)
-		{
-			// Default to the movie's preferred rate
-			result = GetMoviePreferredRate(mMovieHandle);
-			if(result == 0)
-			{
-				// Don't return a 0 play rate, ever.
-				std::cerr << "Movie's preferred rate is 0, forcing to 1.0." << std::endl;
-				result = X2Fix(1.0f);
-			}
-		}
-		else
-		{
-			result = X2Fix(mPlayRate);
-		}
-
-		return result;
-	}
-
-	void load( const std::string url )
-	{
-
-		if ( url.empty() )
-			return;
-
-		// Stop and unload any existing movie before starting another one.
-		unload();
-
-		setStatus(STATUS_LOADING);
-
-		//In case std::string::c_str() makes a copy of the url data,
-		//make sure there is memory to hold it before allocating memory for handle.
-		//if fails, NewHandleClear(...) should return NULL.
-		const char* url_string = url.c_str() ;
-		Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) );
-
-		if ( NULL == handle || noErr != MemError() || NULL == *handle )
-		{
-			setStatus(STATUS_ERROR);
-			return;
-		}
-
-		BlockMove( url_string, *handle, ( Size )( url.length() + 1 ) );
-
-		OSErr err = NewMovieFromDataRef( &mMovieHandle, newMovieActive | newMovieDontInteractWithUser | newMovieAsyncOK | newMovieIdleImportOK, nil, handle, URLDataHandlerSubType );
-		DisposeHandle( handle );
-		if ( noErr != err )
-		{
-			setStatus(STATUS_ERROR);
-			return;
-		};
-		
-		mNavigateURL = url;
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
-		message.setValue("uri", mNavigateURL);
-		sendMessage(message);
-
-		// do pre-roll actions (typically fired for streaming movies but not always)
-		PrePrerollMovie( mMovieHandle, 0, getPlayRate(), moviePrePrerollCompleteCallback, ( void * )this );
-
-		Rect movie_rect = rectFromSize(mWidth, mHeight);
-
-		// make a new movie controller
-		mMovieController = NewMovieController( mMovieHandle, &movie_rect, mcNotVisible | mcTopLeftMovie );
-
-		// movie controller
-		MCSetActionFilterWithRefCon( mMovieController, mcActionFilterCallBack, ( long )this );
-
-		SetMoviePlayHints( mMovieHandle, hintsAllowDynamicResize, hintsAllowDynamicResize );
-
-		// function that gets called when a frame is drawn
-		SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, movieDrawingCompleteCallback, ( long )this );
-
-		setStatus(STATUS_LOADED);
-
-		sizeChanged();
-	};
-
-	bool unload()
-	{
-		// new movie and have to get title again
-		mReceivedTitle = false;
-
-		if ( mMovieHandle )
-		{
-			StopMovie( mMovieHandle );
-			if ( mMovieController )
-			{
-				MCMovieChanged( mMovieController, mMovieHandle );
-			};
-		};
-
-		if ( mMovieController )
-		{
-			MCSetActionFilterWithRefCon( mMovieController, NULL, (long)this );
-			DisposeMovieController( mMovieController );
-			mMovieController = NULL;
-		};
-
-		if ( mMovieHandle )
-		{
-			SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, nil, ( long )this );
-			DisposeMovie( mMovieHandle );
-			mMovieHandle = NULL;
-		};
-
-		if ( mGWorldHandle )
-		{
-			DisposeGWorld( mGWorldHandle );
-			mGWorldHandle = NULL;
-		};
-
-		setStatus(STATUS_NONE);
-
-		return true;
-	}
-
-	bool navigateTo( const std::string url )
-	{
-		unload();
-		load( url );
-
-		return true;
-	};
-
-	bool sizeChanged()
-	{
-		if ( ! mMovieHandle )
-			return false;
-
-		// Check to see whether the movie's natural size has updated
-		{
-			int width, height;
-			getMovieNaturalSize(&width, &height);
-			if((width != 0) && (height != 0) && ((width != mNaturalWidth) || (height != mNaturalHeight)))
-			{
-				mNaturalWidth = width;
-				mNaturalHeight = height;
-
-				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_request");
-				message.setValue("name", mTextureSegmentName);
-				message.setValueS32("width", width);
-				message.setValueS32("height", height);
-				sendMessage(message);
-				//std::cerr << "<--- Sending size change request to application with name: " << mTextureSegmentName << " - size is " << width << " x " << height << std::endl;
-			}
-		}
-
-		// sanitize destination size
-		Rect dest_rect = rectFromSize(mWidth, mHeight);
-
-		// media depth won't change
-		int depth_bits = mDepth * 8;
-		long rowbytes = mDepth * mTextureWidth;
-
-		GWorldPtr old_gworld_handle = mGWorldHandle;
-
-		if(mPixels != NULL)
-		{
-			// We have pixels.  Set up a GWorld pointing at the texture.
-			OSErr result = NewGWorldFromPtr( &mGWorldHandle, depth_bits, &dest_rect, NULL, NULL, 0, (Ptr)mPixels, rowbytes);
-			if ( noErr != result )
-			{
-				// TODO: unrecoverable??  throw exception?  return something?
-				return false;
-			}
-		}
-		else
-		{
-			// We don't have pixels. Create a fake GWorld we can point the movie at when it's not safe to render normally.
-			Rect tempRect = rectFromSize(1, 1);
-			OSErr result = NewGWorld( &mGWorldHandle, depth_bits, &tempRect, NULL, NULL, 0);
-			if ( noErr != result )
-			{
-				// TODO: unrecoverable??  throw exception?  return something?
-				return false;
-			}
-		}
-
-		SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice( mGWorldHandle ) );
-
-		// If the GWorld was already set up, delete it.
-		if(old_gworld_handle != NULL)
-		{
-			DisposeGWorld( old_gworld_handle );
-		}
-
-		// Set up the movie display matrix
-		{
-			// scale movie to fit rect and invert vertically to match opengl image format
-			MatrixRecord transform;
-			SetIdentityMatrix( &transform );	// transforms are additive so start from identify matrix
-			double scaleX = (double) mWidth / mNaturalWidth;
-			double scaleY = -1.0 * (double) mHeight / mNaturalHeight;
-			double centerX = mWidth / 2.0;
-			double centerY = mHeight / 2.0;
-			ScaleMatrix( &transform, X2Fix( scaleX ), X2Fix( scaleY ), X2Fix( centerX ), X2Fix( centerY ) );
-			SetMovieMatrix( mMovieHandle, &transform );
-		}
-
-		// update movie controller
-		if ( mMovieController )
-		{
-			MCSetControllerPort( mMovieController, mGWorldHandle );
-			MCPositionController( mMovieController, &dest_rect, &dest_rect,
-								  mcTopLeftMovie | mcPositionDontInvalidate );
-			MCMovieChanged( mMovieController, mMovieHandle );
-		}
-
-
-		// Emit event with size change so the calling app knows about it too
-		// TODO:
-		//LLMediaEvent event( this );
-		//mEventEmitter.update( &LLMediaObserver::onMediaSizeChange, event );
-
-		return true;
-	}
-	static Boolean mcActionFilterCallBack( MovieController mc, short action, void *params, long ref )
-	{
-		Boolean result = false;
-
-		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
-
-		switch( action )
-		{
-			// handle window resizing
-			case mcActionControllerSizeChanged:
-				// Ensure that the movie draws correctly at the new size
-				self->sizeChanged();
-				break;
-
-			// Block any movie controller actions that open URLs.
-			case mcActionLinkToURL:
-			case mcActionGetNextURL:
-			case mcActionLinkToURLExtended:
-				// Prevent the movie controller from handling the message
-				result = true;
-				break;
-
-			default:
-				break;
-		};
-
-		return result;
-	};
-
-	static OSErr movieDrawingCompleteCallback( Movie call_back_movie, long ref )
-	{
-		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
-
-		// IMPORTANT: typically, a consumer who is observing this event will set a flag
-		// when this event is fired then render later. Be aware that the media stream
-		// can change during this period - dimensions, depth, format etc.
-		//LLMediaEvent event( self );
-//		self->updateQuickTime();
-		// TODO ^^^
-
-
-		if ( self->mWidth > 0 && self->mHeight > 0 )
-			self->setDirty( 0, 0, self->mWidth, self->mHeight );
-
-		return noErr;
-	};
-
-	static void moviePrePrerollCompleteCallback( Movie movie, OSErr preroll_err, void *ref )
-	{
-		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
-
-		// TODO:
-		//LLMediaEvent event( self );
-		//self->mEventEmitter.update( &LLMediaObserver::onMediaPreroll, event );
-		
-		// Send a "navigate complete" event.
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
-		message.setValue("uri", self->mNavigateURL);
-		message.setValueS32("result_code", 200);
-		message.setValue("result_string", "OK");
-		self->sendMessage(message);
-	};
-
-
-	void rewind()
-	{
-		GoToBeginningOfMovie( mMovieHandle );
-		MCMovieChanged( mMovieController, mMovieHandle );
-	};
-
-	bool processState()
-	{
-		if ( mCommand == COMMAND_PLAY )
-		{
-			if ( mStatus == STATUS_LOADED || mStatus == STATUS_PAUSED || mStatus == STATUS_PLAYING || mStatus == STATUS_DONE )
-			{
-				long state = GetMovieLoadState( mMovieHandle );
-
-				if ( state >= kMovieLoadStatePlaythroughOK )
-				{
-					// if the movie is at the end (generally because it reached it naturally)
-					// and we play is requested, jump back to the start of the movie.
-					// note: this is different from having loop flag set.
-					if ( IsMovieDone( mMovieHandle ) )
-					{
-						Fixed rate = X2Fix( 0.0 );
-						MCDoAction( mMovieController, mcActionPlay, (void*)rate );
-						rewind();
-					};
-
-					MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() );
-					MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
-					setStatus(STATUS_PLAYING);
-					mCommand = COMMAND_NONE;
-				};
-			};
-		}
-		else
-		if ( mCommand == COMMAND_STOP )
-		{
-			if ( mStatus == STATUS_PLAYING || mStatus == STATUS_PAUSED || mStatus == STATUS_DONE )
-			{
-				if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK )
-				{
-					Fixed rate = X2Fix( 0.0 );
-					MCDoAction( mMovieController, mcActionPlay, (void*)rate );
-					rewind();
-
-					setStatus(STATUS_LOADED);
-					mCommand = COMMAND_NONE;
-				};
-			};
-		}
-		else
-		if ( mCommand == COMMAND_PAUSE )
-		{
-			if ( mStatus == STATUS_PLAYING )
-			{
-				if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK )
-				{
-					Fixed rate = X2Fix( 0.0 );
-					MCDoAction( mMovieController, mcActionPlay, (void*)rate );
-					setStatus(STATUS_PAUSED);
-					mCommand = COMMAND_NONE;
-				};
-			};
-		};
-
-		return true;
-	};
-
-	void play(F64 rate)
-	{
-		mPlayRate = rate;
-		mCommand = COMMAND_PLAY;
-	};
-
-	void stop()
-	{
-		mCommand = COMMAND_STOP;
-	};
-
-	void pause()
-	{
-		mCommand = COMMAND_PAUSE;
-	};
-
-	void getMovieNaturalSize(int *movie_width, int *movie_height)
-	{
-		Rect rect;
-
-		GetMovieNaturalBoundsRect( mMovieHandle, &rect );
-
-		int width  = ( rect.right - rect.left );
-		int height = ( rect.bottom - rect.top );
-
-		// make sure width and height fall in valid range
-		if ( width < mMinWidth )
-			width = mMinWidth;
-
-		if ( width > mMaxWidth )
-			width = mMaxWidth;
-
-		if ( height < mMinHeight )
-			height = mMinHeight;
-
-		if ( height > mMaxHeight )
-			height = mMaxHeight;
-
-		// return the new rect
-		*movie_width = width;
-		*movie_height = height;
-	}
-
-	void updateQuickTime(int milliseconds)
-	{
-		if ( ! mMovieHandle )
-			return;
-
-		if ( ! mMovieController )
-			return;
-
-		// service QuickTime
-		// Calling it this way doesn't have good behavior on Windows...
-//		MoviesTask( mMovieHandle, milliseconds );
-		// This was the original, but I think using both MoviesTask and MCIdle is redundant.  Trying with only MCIdle.
-//		MoviesTask( mMovieHandle, 0 );
-
-		MCIdle( mMovieController );
-
-		if ( ! mGWorldHandle )
-			return;
-
-		if ( mMediaSizeChanging )
-			return;
-
-		// update state machine
-		processState();
-
-		// see if title arrived and if so, update member variable with contents
-		checkTitle();
-		
-		// QT call to see if we are at the end - can't do with controller
-		if ( IsMovieDone( mMovieHandle ) )
-		{
-			// special code for looping - need to rewind at the end of the movie
-			if ( mIsLooping )
-			{
-				// go back to start
-				rewind();
-
-				if ( mMovieController )
-				{
-					// kick off new play
-					MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() );
-
-					// set the volume
-					MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
-				};
-			}
-			else
-			{
-				if(mStatus == STATUS_PLAYING)
-				{
-					setStatus(STATUS_DONE);
-				}
-			}
-		}
-
-	};
-
-	int getDataWidth() const
-	{
-		if ( mGWorldHandle )
-		{
-			int depth = mDepth;
-
-			if (depth < 1)
-				depth = 1;
-
-			// ALWAYS use the row bytes from the PixMap if we have a GWorld because
-			// sometimes it's not the same as mMediaDepth * mMediaWidth !
-			PixMapHandle pix_map_handle = GetGWorldPixMap( mGWorldHandle );
-			return QTGetPixMapHandleRowBytes( pix_map_handle ) / depth;
-		}
-		else
-		{
-			// TODO :   return LLMediaImplCommon::getaDataWidth();
-			return 0;
-		}
-	};
-
-	void seek( F64 time )
-	{
-		if ( mMovieController )
-		{
-			TimeRecord when;
-			when.scale = GetMovieTimeScale( mMovieHandle );
-			when.base = 0;
-
-			// 'time' is in (floating point) seconds.  The timebase time will be in 'units', where
-			// there are 'scale' units per second.
-			SInt64 raw_time = ( SInt64 )( time * (double)( when.scale ) );
-
-			when.value.hi = ( SInt32 )( raw_time >> 32 );
-			when.value.lo = ( SInt32 )( ( raw_time & 0x00000000FFFFFFFF ) );
-
-			MCDoAction( mMovieController, mcActionGoToTime, &when );
-		};
-	};
-
-	F64 getLoadedDuration() 	  	 
-	{ 	  	 
-		TimeValue duration; 	  	 
-		if(GetMaxLoadedTimeInMovie( mMovieHandle, &duration ) != noErr) 	  	 
-		{ 	  	 
-			// If GetMaxLoadedTimeInMovie returns an error, return the full duration of the movie. 	  	 
-			duration = GetMovieDuration( mMovieHandle ); 	  	 
-		} 	  	 
-		TimeValue scale = GetMovieTimeScale( mMovieHandle ); 	  	 
-
-		return (F64)duration / (F64)scale; 	  	 
-	}; 	  	 
-
-	F64 getDuration()
-	{
-		TimeValue duration = GetMovieDuration( mMovieHandle );
-		TimeValue scale = GetMovieTimeScale( mMovieHandle );
-
-		return (F64)duration / (F64)scale;
-	};
-
-	F64 getCurrentTime()
-	{
-		TimeValue curr_time = GetMovieTime( mMovieHandle, 0 );
-		TimeValue scale = GetMovieTimeScale( mMovieHandle );
-
-		return (F64)curr_time / (F64)scale;
-	};
-
-	void setVolume( F64 volume )
-	{
-		mCurVolume = (short)(volume * ( double ) 0x100 );
-
-		if ( mMovieController )
-		{
-			MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
-		};
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	//
-	void update(int milliseconds = 0)
-	{
-		updateQuickTime(milliseconds);
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	//
-	void mouseDown( int x, int y )
-	{
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	//
-	void mouseUp( int x, int y )
-	{
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	//
-	void mouseMove( int x, int y )
-	{
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	//
-	void keyPress( unsigned char key )
-	{
-	};
-
-	////////////////////////////////////////////////////////////////////////////////
-	// Grab movie title into mMovieTitle - should be called repeatedly
-	// until it returns true since movie title takes a while to become 
-	// available.
-	const bool getMovieTitle()
-	{
-		// grab meta data from movie
-		QTMetaDataRef media_data_ref;
-		OSErr result = QTCopyMovieMetaData( mMovieHandle, &media_data_ref );
-		if ( noErr != result ) 
-			return false;
-
-		// look up "Display Name" in meta data
-		OSType meta_data_key = kQTMetaDataCommonKeyDisplayName;
-		QTMetaDataItem item = kQTMetaDataItemUninitialized;
-		result = QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard, 
-										0, kQTMetaDataKeyFormatCommon, 
-										(const UInt8 *)&meta_data_key, 
-										sizeof( meta_data_key ), &item );
-		if ( noErr != result ) 
-			return false;
-
-		// find the size of the title
-		ByteCount size;
-		result = QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );
-		if ( noErr != result || size <= 0 ) 
-			return false;
-
-		// allocate some space and grab it
-		UInt8* item_data = new UInt8( size );
-		memset( item_data, 0, size * sizeof( UInt8* ) );
-		result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
-		if ( noErr != result ) 
-			return false;
-
-		// save it
-		mMovieTitle = std::string( (char* )item_data );
-
-		// clean up
-		delete [] item_data;
-
-		return true;
-	};
-
-	// called regularly to see if title changed
-	void checkTitle()
-	{
-		// we did already receive title so keep checking
-		if ( ! mReceivedTitle )
-		{
-			// grab title from movie meta data
-			if ( getMovieTitle() )
-			{
-				// pass back to host application
-				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
-				message.setValue("name", mMovieTitle );
-				sendMessage( message );
-
-				// stop looking once we find a title for this movie.
-				// TODO: this may to be reset if movie title changes
-				// during playback but this is okay for now
-				mReceivedTitle = true;
-			};
-		};
-	};
-};
-
-MediaPluginQuickTime::MediaPluginQuickTime(
-	LLPluginInstance::sendMessageFunction host_send_func,
-	void *host_user_data ) :
-	MediaPluginBase(host_send_func, host_user_data),
-	mMinWidth( 0 ),
-	mMaxWidth( 2048 ),
-	mMinHeight( 0 ),
-	mMaxHeight( 2048 )
-{
-//	std::cerr << "MediaPluginQuickTime constructor" << std::endl;
-
-	mNaturalWidth = -1;
-	mNaturalHeight = -1;
-	mMovieHandle = 0;
-	mGWorldHandle = 0;
-	mMovieController = 0;
-	mCurVolume = 0x99;
-	mMediaSizeChanging = false;
-	mIsLooping = false;
-	mMovieTitle = std::string();
-	mReceivedTitle = false;
-	mCommand = COMMAND_NONE;
-	mPlayRate = 0.0f;
-	mStatus = STATUS_NONE;
-}
-
-MediaPluginQuickTime::~MediaPluginQuickTime()
-{
-//	std::cerr << "MediaPluginQuickTime destructor" << std::endl;
-
-	ExitMovies();
-
-#ifdef LL_WINDOWS
-	TerminateQTML();
-//		std::cerr << "QuickTime closing down" << std::endl;
-#endif
-}
-
-
-void MediaPluginQuickTime::receiveMessage(const char *message_string)
-{
-//	std::cerr << "MediaPluginQuickTime::receiveMessage: received message: \"" << message_string << "\"" << std::endl;
-	LLPluginMessage message_in;
-
-	if(message_in.parse(message_string) >= 0)
-	{
-		std::string message_class = message_in.getClass();
-		std::string message_name = message_in.getName();
-		if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE)
-		{
-			if(message_name == "init")
-			{
-				LLPluginMessage message("base", "init_response");
-				LLSD versions = LLSD::emptyMap();
-				versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION;
-				versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION;
-				// Normally a plugin would only specify one of these two subclasses, but this is a demo...
-				versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME] = LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME_VERSION;
-				message.setValueLLSD("versions", versions);
-
-				#ifdef LL_WINDOWS
-
-				// QuickTime 7.6.4 has an issue (that was not present in 7.6.2) with initializing QuickTime
-				// according to this article: http://lists.apple.com/archives/QuickTime-API/2009/Sep/msg00097.html
-				// The solution presented there appears to work.
-				QTLoadLibrary("qtcf.dll");
-
-				// main initialization for QuickTime - only required on Windows
-				OSErr result = InitializeQTML( 0L );
-				if ( result != noErr )
-				{
-					//TODO: If no QT on Windows, this fails - respond accordingly.
-				}
-				else
-				{
-					//std::cerr << "QuickTime initialized" << std::endl;
-				};
-				#endif
-
-				// required for both Windows and Mac
-				EnterMovies();
-
-				std::string plugin_version = "QuickTime media plugin, QuickTime version ";
-
-				long version = 0;
-				Gestalt( gestaltQuickTimeVersion, &version );
-				std::ostringstream codec( "" );
-				codec << std::hex << version << std::dec;
-				plugin_version += codec.str();
-				message.setValue("plugin_version", plugin_version);
-				sendMessage(message);
-
-				// Plugin gets to decide the texture parameters to use.
-				message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
-				#if defined(LL_WINDOWS)
-					// Values for Windows
-					mDepth = 3;
-					message.setValueU32("format", GL_RGB);
-					message.setValueU32("type", GL_UNSIGNED_BYTE);
-
-					// We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even.
-					// Padding to a multiple of 3*32 guarantees it'll divide out properly.
-					message.setValueU32("padding", 32 * 3);
-				#else
-					// Values for Mac
-					mDepth = 4;
-					message.setValueU32("format", GL_BGRA_EXT);
-					#ifdef __BIG_ENDIAN__
-						message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV );
-					#else
-						message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8);
-					#endif
-
-					// Pad texture width to a multiple of 32 bytes, to line up with cache lines.
-					message.setValueU32("padding", 32);
-				#endif
-				message.setValueS32("depth", mDepth);
-				message.setValueU32("internalformat", GL_RGB);
-				message.setValueBoolean("coords_opengl", true);	// true == use OpenGL-style coordinates, false == (0,0) is upper left.
-				message.setValueBoolean("allow_downsample", true);
-				sendMessage(message);
-			}
-			else if(message_name == "idle")
-			{
-				// no response is necessary here.
-				F64 time = message_in.getValueReal("time");
-
-				// Convert time to milliseconds for update()
-				update((int)(time * 1000.0f));
-			}
-			else if(message_name == "cleanup")
-			{
-				// TODO: clean up here
-			}
-			else if(message_name == "shm_added")
-			{
-				SharedSegmentInfo info;
-				info.mAddress = message_in.getValuePointer("address");
-				info.mSize = (size_t)message_in.getValueS32("size");
-				std::string name = message_in.getValue("name");
-//				std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory added, name: " << name
-//					<< ", size: " << info.mSize
-//					<< ", address: " << info.mAddress
-//					<< std::endl;
-
-				mSharedSegments.insert(SharedSegmentMap::value_type(name, info));
-
-			}
-			else if(message_name == "shm_remove")
-			{
-				std::string name = message_in.getValue("name");
-
-//				std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory remove, name = " << name << std::endl;
-
-				SharedSegmentMap::iterator iter = mSharedSegments.find(name);
-				if(iter != mSharedSegments.end())
-				{
-					if(mPixels == iter->second.mAddress)
-					{
-						// This is the currently active pixel buffer.  Make sure we stop drawing to it.
-						mPixels = NULL;
-						mTextureSegmentName.clear();
-
-						// Make sure the movie GWorld is no longer pointed at the shared segment.
-						sizeChanged();
-					}
-					mSharedSegments.erase(iter);
-				}
-				else
-				{
-//					std::cerr << "MediaPluginQuickTime::receiveMessage: unknown shared memory region!" << std::endl;
-				}
-
-				// Send the response so it can be cleaned up.
-				LLPluginMessage message("base", "shm_remove_response");
-				message.setValue("name", name);
-				sendMessage(message);
-			}
-			else
-			{
-//				std::cerr << "MediaPluginQuickTime::receiveMessage: unknown base message: " << message_name << std::endl;
-			}
-		}
-		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
-		{
-			if(message_name == "size_change")
-			{
-				std::string name = message_in.getValue("name");
-				S32 width = message_in.getValueS32("width");
-				S32 height = message_in.getValueS32("height");
-				S32 texture_width = message_in.getValueS32("texture_width");
-				S32 texture_height = message_in.getValueS32("texture_height");
-
-				//std::cerr << "---->Got size change instruction from application with name: " << name << " - size is " << width << " x " << height << std::endl;
-
-				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response");
-				message.setValue("name", name);
-				message.setValueS32("width", width);
-				message.setValueS32("height", height);
-				message.setValueS32("texture_width", texture_width);
-				message.setValueS32("texture_height", texture_height);
-				sendMessage(message);
-
-				if(!name.empty())
-				{
-					// Find the shared memory region with this name
-					SharedSegmentMap::iterator iter = mSharedSegments.find(name);
-					if(iter != mSharedSegments.end())
-					{
-//						std::cerr << "%%% Got size change, new size is " << width << " by " << height << std::endl;
-//						std::cerr << "%%%%  texture size is " << texture_width << " by " << texture_height << std::endl;
-
-						mPixels = (unsigned char*)iter->second.mAddress;
-						mTextureSegmentName = name;
-						mWidth = width;
-						mHeight = height;
-
-						mTextureWidth = texture_width;
-						mTextureHeight = texture_height;
-
-						mMediaSizeChanging = false;
-
-						sizeChanged();
-
-						update();
-					};
-				};
-			}
-			else if(message_name == "load_uri")
-			{
-				std::string uri = message_in.getValue("uri");
-				load( uri );
-				sendStatus();
-			}
-			else if(message_name == "mouse_event")
-			{
-				std::string event = message_in.getValue("event");
-				S32 x = message_in.getValueS32("x");
-				S32 y = message_in.getValueS32("y");
-
-				if(event == "down")
-				{
-					mouseDown(x, y);
-				}
-				else if(event == "up")
-				{
-					mouseUp(x, y);
-				}
-				else if(event == "move")
-				{
-					mouseMove(x, y);
-				};
-			};
-		}
-		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
-		{
-			if(message_name == "stop")
-			{
-				stop();
-			}
-			else if(message_name == "start")
-			{
-				F64 rate = 0.0;
-				if(message_in.hasValue("rate"))
-				{
-					rate = message_in.getValueReal("rate");
-				}
-				play(rate);
-			}
-			else if(message_name == "pause")
-			{
-				pause();
-			}
-			else if(message_name == "seek")
-			{
-				F64 time = message_in.getValueReal("time");
-				seek(time);
-			}
-			else if(message_name == "set_loop")
-			{
-				bool loop = message_in.getValueBoolean("loop");
-				mIsLooping = loop;
-			}
-			else if(message_name == "set_volume")
-			{
-				F64 volume = message_in.getValueReal("volume");
-				setVolume(volume);
-			}
-		}
-		else
-		{
-//			std::cerr << "MediaPluginQuickTime::receiveMessage: unknown message class: " << message_class << std::endl;
-		};
-	};
-}
-
-int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
-{
-	MediaPluginQuickTime *self = new MediaPluginQuickTime(host_send_func, host_user_data);
-	*plugin_send_func = MediaPluginQuickTime::staticReceiveMessage;
-	*plugin_user_data = (void*)self;
-
-	return 0;
-}
-
-#else // LL_QUICKTIME_ENABLED
-
-// Stubbed-out class with constructor/destructor (necessary or windows linker
-// will just think its dead code and optimize it all out)
-class MediaPluginQuickTime : public MediaPluginBase
-{
-public:
-	MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
-	~MediaPluginQuickTime();
-	/* virtual */ void receiveMessage(const char *message_string);
-};
-
-MediaPluginQuickTime::MediaPluginQuickTime(
-	LLPluginInstance::sendMessageFunction host_send_func,
-	void *host_user_data ) :
-	MediaPluginBase(host_send_func, host_user_data)
-{
-    // no-op
-}
-
-MediaPluginQuickTime::~MediaPluginQuickTime()
-{
-    // no-op
-}
-
-void MediaPluginQuickTime::receiveMessage(const char *message_string)
-{
-    // no-op
-}
-
-// We're building without quicktime enabled.  Just refuse to initialize.
-int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
-{
-    return -1;
-}
-
-#endif // LL_QUICKTIME_ENABLED
+/**
+ * @file media_plugin_quicktime.cpp
+ * @brief QuickTime plugin for LLMedia API plugin system
+ *
+ * $LicenseInfo:firstyear=2008&license=viewergpl$
+ *
+ * Copyright (c) 2008, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llgl.h"
+
+#include "llplugininstance.h"
+#include "llpluginmessage.h"
+#include "llpluginmessageclasses.h"
+#include "media_plugin_base.h"
+
+#if LL_QUICKTIME_ENABLED
+
+#if defined(LL_DARWIN)
+	#include <QuickTime/QuickTime.h>
+#elif defined(LL_WINDOWS)
+	#include "MacTypes.h"
+	#include "QTML.h"
+	#include "Movies.h"
+	#include "QDoffscreen.h"
+	#include "FixMath.h"
+	#include "QTLoadLibraryUtils.h"
+#endif
+
+// TODO: Make sure that the only symbol exported from this library is LLPluginInitEntryPoint
+////////////////////////////////////////////////////////////////////////////////
+//
+class MediaPluginQuickTime : public MediaPluginBase
+{
+public:
+	MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
+	~MediaPluginQuickTime();
+
+	/* virtual */ void receiveMessage(const char *message_string);
+
+private:
+
+	int mNaturalWidth;
+	int mNaturalHeight;
+	Movie mMovieHandle;
+	GWorldPtr mGWorldHandle;
+	ComponentInstance mMovieController;
+	int mCurVolume;
+	bool mMediaSizeChanging;
+	bool mIsLooping;
+	std::string mMovieTitle;
+	bool mReceivedTitle;
+	const int mMinWidth;
+	const int mMaxWidth;
+	const int mMinHeight;
+	const int mMaxHeight;
+	F64 mPlayRate;
+	std::string mNavigateURL;
+
+	enum ECommand {
+		COMMAND_NONE,
+		COMMAND_STOP,
+		COMMAND_PLAY,
+		COMMAND_FAST_FORWARD,
+		COMMAND_FAST_REWIND,
+		COMMAND_PAUSE,
+		COMMAND_SEEK,
+	};
+	ECommand mCommand;
+
+	// Override this to add current time and duration to the message
+	/*virtual*/ void setDirty(int left, int top, int right, int bottom)
+	{
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "updated");
+
+		message.setValueS32("left", left);
+		message.setValueS32("top", top);
+		message.setValueS32("right", right);
+		message.setValueS32("bottom", bottom);
+
+		if(mMovieHandle)
+		{
+			message.setValueReal("current_time", getCurrentTime());
+			message.setValueReal("duration", getDuration());
+			message.setValueReal("current_rate", Fix2X(GetMovieRate(mMovieHandle)));
+		}
+
+		sendMessage(message);
+	}
+
+
+	static Rect rectFromSize(int width, int height)
+	{
+		Rect result;
+
+
+		result.left = 0;
+		result.top = 0;
+		result.right = width;
+		result.bottom = height;
+
+		return result;
+	}
+
+	Fixed getPlayRate(void)
+	{
+		Fixed result;
+		if(mPlayRate == 0.0f)
+		{
+			// Default to the movie's preferred rate
+			result = GetMoviePreferredRate(mMovieHandle);
+			if(result == 0)
+			{
+				// Don't return a 0 play rate, ever.
+				std::cerr << "Movie's preferred rate is 0, forcing to 1.0." << std::endl;
+				result = X2Fix(1.0f);
+			}
+		}
+		else
+		{
+			result = X2Fix(mPlayRate);
+		}
+
+		return result;
+	}
+
+	void load( const std::string url )
+	{
+
+		if ( url.empty() )
+			return;
+
+		// Stop and unload any existing movie before starting another one.
+		unload();
+
+		setStatus(STATUS_LOADING);
+
+		//In case std::string::c_str() makes a copy of the url data,
+		//make sure there is memory to hold it before allocating memory for handle.
+		//if fails, NewHandleClear(...) should return NULL.
+		const char* url_string = url.c_str() ;
+		Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) );
+
+		if ( NULL == handle || noErr != MemError() || NULL == *handle )
+		{
+			setStatus(STATUS_ERROR);
+			return;
+		}
+
+		BlockMove( url_string, *handle, ( Size )( url.length() + 1 ) );
+
+		OSErr err = NewMovieFromDataRef( &mMovieHandle, newMovieActive | newMovieDontInteractWithUser | newMovieAsyncOK | newMovieIdleImportOK, nil, handle, URLDataHandlerSubType );
+		DisposeHandle( handle );
+		if ( noErr != err )
+		{
+			setStatus(STATUS_ERROR);
+			return;
+		};
+		
+		mNavigateURL = url;
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
+		message.setValue("uri", mNavigateURL);
+		sendMessage(message);
+
+		// do pre-roll actions (typically fired for streaming movies but not always)
+		PrePrerollMovie( mMovieHandle, 0, getPlayRate(), moviePrePrerollCompleteCallback, ( void * )this );
+
+		Rect movie_rect = rectFromSize(mWidth, mHeight);
+
+		// make a new movie controller
+		mMovieController = NewMovieController( mMovieHandle, &movie_rect, mcNotVisible | mcTopLeftMovie );
+
+		// movie controller
+		MCSetActionFilterWithRefCon( mMovieController, mcActionFilterCallBack, ( long )this );
+
+		SetMoviePlayHints( mMovieHandle, hintsAllowDynamicResize, hintsAllowDynamicResize );
+
+		// function that gets called when a frame is drawn
+		SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, movieDrawingCompleteCallback, ( long )this );
+
+		setStatus(STATUS_LOADED);
+
+		sizeChanged();
+	};
+
+	bool unload()
+	{
+		// new movie and have to get title again
+		mReceivedTitle = false;
+
+		if ( mMovieHandle )
+		{
+			StopMovie( mMovieHandle );
+			if ( mMovieController )
+			{
+				MCMovieChanged( mMovieController, mMovieHandle );
+			};
+		};
+
+		if ( mMovieController )
+		{
+			MCSetActionFilterWithRefCon( mMovieController, NULL, (long)this );
+			DisposeMovieController( mMovieController );
+			mMovieController = NULL;
+		};
+
+		if ( mMovieHandle )
+		{
+			SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, nil, ( long )this );
+			DisposeMovie( mMovieHandle );
+			mMovieHandle = NULL;
+		};
+
+		if ( mGWorldHandle )
+		{
+			DisposeGWorld( mGWorldHandle );
+			mGWorldHandle = NULL;
+		};
+
+		setStatus(STATUS_NONE);
+
+		return true;
+	}
+
+	bool navigateTo( const std::string url )
+	{
+		unload();
+		load( url );
+
+		return true;
+	};
+
+	bool sizeChanged()
+	{
+		if ( ! mMovieHandle )
+			return false;
+
+		// Check to see whether the movie's natural size has updated
+		{
+			int width, height;
+			getMovieNaturalSize(&width, &height);
+			if((width != 0) && (height != 0) && ((width != mNaturalWidth) || (height != mNaturalHeight)))
+			{
+				mNaturalWidth = width;
+				mNaturalHeight = height;
+
+				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_request");
+				message.setValue("name", mTextureSegmentName);
+				message.setValueS32("width", width);
+				message.setValueS32("height", height);
+				sendMessage(message);
+				//std::cerr << "<--- Sending size change request to application with name: " << mTextureSegmentName << " - size is " << width << " x " << height << std::endl;
+			}
+		}
+
+		// sanitize destination size
+		Rect dest_rect = rectFromSize(mWidth, mHeight);
+
+		// media depth won't change
+		int depth_bits = mDepth * 8;
+		long rowbytes = mDepth * mTextureWidth;
+
+		GWorldPtr old_gworld_handle = mGWorldHandle;
+
+		if(mPixels != NULL)
+		{
+			// We have pixels.  Set up a GWorld pointing at the texture.
+			OSErr result = NewGWorldFromPtr( &mGWorldHandle, depth_bits, &dest_rect, NULL, NULL, 0, (Ptr)mPixels, rowbytes);
+			if ( noErr != result )
+			{
+				// TODO: unrecoverable??  throw exception?  return something?
+				return false;
+			}
+		}
+		else
+		{
+			// We don't have pixels. Create a fake GWorld we can point the movie at when it's not safe to render normally.
+			Rect tempRect = rectFromSize(1, 1);
+			OSErr result = NewGWorld( &mGWorldHandle, depth_bits, &tempRect, NULL, NULL, 0);
+			if ( noErr != result )
+			{
+				// TODO: unrecoverable??  throw exception?  return something?
+				return false;
+			}
+		}
+
+		SetMovieGWorld( mMovieHandle, mGWorldHandle, GetGWorldDevice( mGWorldHandle ) );
+
+		// If the GWorld was already set up, delete it.
+		if(old_gworld_handle != NULL)
+		{
+			DisposeGWorld( old_gworld_handle );
+		}
+
+		// Set up the movie display matrix
+		{
+			// scale movie to fit rect and invert vertically to match opengl image format
+			MatrixRecord transform;
+			SetIdentityMatrix( &transform );	// transforms are additive so start from identify matrix
+			double scaleX = (double) mWidth / mNaturalWidth;
+			double scaleY = -1.0 * (double) mHeight / mNaturalHeight;
+			double centerX = mWidth / 2.0;
+			double centerY = mHeight / 2.0;
+			ScaleMatrix( &transform, X2Fix( scaleX ), X2Fix( scaleY ), X2Fix( centerX ), X2Fix( centerY ) );
+			SetMovieMatrix( mMovieHandle, &transform );
+		}
+
+		// update movie controller
+		if ( mMovieController )
+		{
+			MCSetControllerPort( mMovieController, mGWorldHandle );
+			MCPositionController( mMovieController, &dest_rect, &dest_rect,
+								  mcTopLeftMovie | mcPositionDontInvalidate );
+			MCMovieChanged( mMovieController, mMovieHandle );
+		}
+
+
+		// Emit event with size change so the calling app knows about it too
+		// TODO:
+		//LLMediaEvent event( this );
+		//mEventEmitter.update( &LLMediaObserver::onMediaSizeChange, event );
+
+		return true;
+	}
+	static Boolean mcActionFilterCallBack( MovieController mc, short action, void *params, long ref )
+	{
+		Boolean result = false;
+
+		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
+
+		switch( action )
+		{
+			// handle window resizing
+			case mcActionControllerSizeChanged:
+				// Ensure that the movie draws correctly at the new size
+				self->sizeChanged();
+				break;
+
+			// Block any movie controller actions that open URLs.
+			case mcActionLinkToURL:
+			case mcActionGetNextURL:
+			case mcActionLinkToURLExtended:
+				// Prevent the movie controller from handling the message
+				result = true;
+				break;
+
+			default:
+				break;
+		};
+
+		return result;
+	};
+
+	static OSErr movieDrawingCompleteCallback( Movie call_back_movie, long ref )
+	{
+		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
+
+		// IMPORTANT: typically, a consumer who is observing this event will set a flag
+		// when this event is fired then render later. Be aware that the media stream
+		// can change during this period - dimensions, depth, format etc.
+		//LLMediaEvent event( self );
+//		self->updateQuickTime();
+		// TODO ^^^
+
+
+		if ( self->mWidth > 0 && self->mHeight > 0 )
+			self->setDirty( 0, 0, self->mWidth, self->mHeight );
+
+		return noErr;
+	};
+
+	static void moviePrePrerollCompleteCallback( Movie movie, OSErr preroll_err, void *ref )
+	{
+		MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref;
+
+		// TODO:
+		//LLMediaEvent event( self );
+		//self->mEventEmitter.update( &LLMediaObserver::onMediaPreroll, event );
+		
+		// Send a "navigate complete" event.
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
+		message.setValue("uri", self->mNavigateURL);
+		message.setValueS32("result_code", 200);
+		message.setValue("result_string", "OK");
+		self->sendMessage(message);
+	};
+
+
+	void rewind()
+	{
+		GoToBeginningOfMovie( mMovieHandle );
+		MCMovieChanged( mMovieController, mMovieHandle );
+	};
+
+	bool processState()
+	{
+		if ( mCommand == COMMAND_PLAY )
+		{
+			if ( mStatus == STATUS_LOADED || mStatus == STATUS_PAUSED || mStatus == STATUS_PLAYING || mStatus == STATUS_DONE )
+			{
+				long state = GetMovieLoadState( mMovieHandle );
+
+				if ( state >= kMovieLoadStatePlaythroughOK )
+				{
+					// if the movie is at the end (generally because it reached it naturally)
+					// and we play is requested, jump back to the start of the movie.
+					// note: this is different from having loop flag set.
+					if ( IsMovieDone( mMovieHandle ) )
+					{
+						Fixed rate = X2Fix( 0.0 );
+						MCDoAction( mMovieController, mcActionPlay, (void*)rate );
+						rewind();
+					};
+
+					MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() );
+					MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
+					setStatus(STATUS_PLAYING);
+					mCommand = COMMAND_NONE;
+				};
+			};
+		}
+		else
+		if ( mCommand == COMMAND_STOP )
+		{
+			if ( mStatus == STATUS_PLAYING || mStatus == STATUS_PAUSED || mStatus == STATUS_DONE )
+			{
+				if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK )
+				{
+					Fixed rate = X2Fix( 0.0 );
+					MCDoAction( mMovieController, mcActionPlay, (void*)rate );
+					rewind();
+
+					setStatus(STATUS_LOADED);
+					mCommand = COMMAND_NONE;
+				};
+			};
+		}
+		else
+		if ( mCommand == COMMAND_PAUSE )
+		{
+			if ( mStatus == STATUS_PLAYING )
+			{
+				if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK )
+				{
+					Fixed rate = X2Fix( 0.0 );
+					MCDoAction( mMovieController, mcActionPlay, (void*)rate );
+					setStatus(STATUS_PAUSED);
+					mCommand = COMMAND_NONE;
+				};
+			};
+		};
+
+		return true;
+	};
+
+	void play(F64 rate)
+	{
+		mPlayRate = rate;
+		mCommand = COMMAND_PLAY;
+	};
+
+	void stop()
+	{
+		mCommand = COMMAND_STOP;
+	};
+
+	void pause()
+	{
+		mCommand = COMMAND_PAUSE;
+	};
+
+	void getMovieNaturalSize(int *movie_width, int *movie_height)
+	{
+		Rect rect;
+
+		GetMovieNaturalBoundsRect( mMovieHandle, &rect );
+
+		int width  = ( rect.right - rect.left );
+		int height = ( rect.bottom - rect.top );
+
+		// make sure width and height fall in valid range
+		if ( width < mMinWidth )
+			width = mMinWidth;
+
+		if ( width > mMaxWidth )
+			width = mMaxWidth;
+
+		if ( height < mMinHeight )
+			height = mMinHeight;
+
+		if ( height > mMaxHeight )
+			height = mMaxHeight;
+
+		// return the new rect
+		*movie_width = width;
+		*movie_height = height;
+	}
+
+	void updateQuickTime(int milliseconds)
+	{
+		if ( ! mMovieHandle )
+			return;
+
+		if ( ! mMovieController )
+			return;
+
+		// service QuickTime
+		// Calling it this way doesn't have good behavior on Windows...
+//		MoviesTask( mMovieHandle, milliseconds );
+		// This was the original, but I think using both MoviesTask and MCIdle is redundant.  Trying with only MCIdle.
+//		MoviesTask( mMovieHandle, 0 );
+
+		MCIdle( mMovieController );
+
+		if ( ! mGWorldHandle )
+			return;
+
+		if ( mMediaSizeChanging )
+			return;
+
+		// update state machine
+		processState();
+
+		// see if title arrived and if so, update member variable with contents
+		checkTitle();
+		
+		// QT call to see if we are at the end - can't do with controller
+		if ( IsMovieDone( mMovieHandle ) )
+		{
+			// special code for looping - need to rewind at the end of the movie
+			if ( mIsLooping )
+			{
+				// go back to start
+				rewind();
+
+				if ( mMovieController )
+				{
+					// kick off new play
+					MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() );
+
+					// set the volume
+					MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
+				};
+			}
+			else
+			{
+				if(mStatus == STATUS_PLAYING)
+				{
+					setStatus(STATUS_DONE);
+				}
+			}
+		}
+
+	};
+
+	int getDataWidth() const
+	{
+		if ( mGWorldHandle )
+		{
+			int depth = mDepth;
+
+			if (depth < 1)
+				depth = 1;
+
+			// ALWAYS use the row bytes from the PixMap if we have a GWorld because
+			// sometimes it's not the same as mMediaDepth * mMediaWidth !
+			PixMapHandle pix_map_handle = GetGWorldPixMap( mGWorldHandle );
+			return QTGetPixMapHandleRowBytes( pix_map_handle ) / depth;
+		}
+		else
+		{
+			// TODO :   return LLMediaImplCommon::getaDataWidth();
+			return 0;
+		}
+	};
+
+	void seek( F64 time )
+	{
+		if ( mMovieController )
+		{
+			TimeRecord when;
+			when.scale = GetMovieTimeScale( mMovieHandle );
+			when.base = 0;
+
+			// 'time' is in (floating point) seconds.  The timebase time will be in 'units', where
+			// there are 'scale' units per second.
+			SInt64 raw_time = ( SInt64 )( time * (double)( when.scale ) );
+
+			when.value.hi = ( SInt32 )( raw_time >> 32 );
+			when.value.lo = ( SInt32 )( ( raw_time & 0x00000000FFFFFFFF ) );
+
+			MCDoAction( mMovieController, mcActionGoToTime, &when );
+		};
+	};
+
+	F64 getLoadedDuration() 	  	 
+	{ 	  	 
+		TimeValue duration; 	  	 
+		if(GetMaxLoadedTimeInMovie( mMovieHandle, &duration ) != noErr) 	  	 
+		{ 	  	 
+			// If GetMaxLoadedTimeInMovie returns an error, return the full duration of the movie. 	  	 
+			duration = GetMovieDuration( mMovieHandle ); 	  	 
+		} 	  	 
+		TimeValue scale = GetMovieTimeScale( mMovieHandle ); 	  	 
+
+		return (F64)duration / (F64)scale; 	  	 
+	}; 	  	 
+
+	F64 getDuration()
+	{
+		TimeValue duration = GetMovieDuration( mMovieHandle );
+		TimeValue scale = GetMovieTimeScale( mMovieHandle );
+
+		return (F64)duration / (F64)scale;
+	};
+
+	F64 getCurrentTime()
+	{
+		TimeValue curr_time = GetMovieTime( mMovieHandle, 0 );
+		TimeValue scale = GetMovieTimeScale( mMovieHandle );
+
+		return (F64)curr_time / (F64)scale;
+	};
+
+	void setVolume( F64 volume )
+	{
+		mCurVolume = (short)(volume * ( double ) 0x100 );
+
+		if ( mMovieController )
+		{
+			MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume );
+		};
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	//
+	void update(int milliseconds = 0)
+	{
+		updateQuickTime(milliseconds);
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	//
+	void mouseDown( int x, int y )
+	{
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	//
+	void mouseUp( int x, int y )
+	{
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	//
+	void mouseMove( int x, int y )
+	{
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	//
+	void keyPress( unsigned char key )
+	{
+	};
+
+	////////////////////////////////////////////////////////////////////////////////
+	// Grab movie title into mMovieTitle - should be called repeatedly
+	// until it returns true since movie title takes a while to become 
+	// available.
+	const bool getMovieTitle()
+	{
+		// grab meta data from movie
+		QTMetaDataRef media_data_ref;
+		OSErr result = QTCopyMovieMetaData( mMovieHandle, &media_data_ref );
+		if ( noErr != result ) 
+			return false;
+
+		// look up "Display Name" in meta data
+		OSType meta_data_key = kQTMetaDataCommonKeyDisplayName;
+		QTMetaDataItem item = kQTMetaDataItemUninitialized;
+		result = QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard, 
+										0, kQTMetaDataKeyFormatCommon, 
+										(const UInt8 *)&meta_data_key, 
+										sizeof( meta_data_key ), &item );
+		if ( noErr != result ) 
+			return false;
+
+		// find the size of the title
+		ByteCount size;
+		result = QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );
+		if ( noErr != result || size <= 0 ) 
+			return false;
+
+		// allocate some space and grab it
+		UInt8* item_data = new UInt8( size );
+		memset( item_data, 0, size * sizeof( UInt8* ) );
+		result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
+		if ( noErr != result ) 
+			return false;
+
+		// save it
+		mMovieTitle = std::string( (char* )item_data );
+
+		// clean up
+		delete [] item_data;
+
+		return true;
+	};
+
+	// called regularly to see if title changed
+	void checkTitle()
+	{
+		// we did already receive title so keep checking
+		if ( ! mReceivedTitle )
+		{
+			// grab title from movie meta data
+			if ( getMovieTitle() )
+			{
+				// pass back to host application
+				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
+				message.setValue("name", mMovieTitle );
+				sendMessage( message );
+
+				// stop looking once we find a title for this movie.
+				// TODO: this may to be reset if movie title changes
+				// during playback but this is okay for now
+				mReceivedTitle = true;
+			};
+		};
+	};
+};
+
+MediaPluginQuickTime::MediaPluginQuickTime(
+	LLPluginInstance::sendMessageFunction host_send_func,
+	void *host_user_data ) :
+	MediaPluginBase(host_send_func, host_user_data),
+	mMinWidth( 0 ),
+	mMaxWidth( 2048 ),
+	mMinHeight( 0 ),
+	mMaxHeight( 2048 )
+{
+//	std::cerr << "MediaPluginQuickTime constructor" << std::endl;
+
+	mNaturalWidth = -1;
+	mNaturalHeight = -1;
+	mMovieHandle = 0;
+	mGWorldHandle = 0;
+	mMovieController = 0;
+	mCurVolume = 0x99;
+	mMediaSizeChanging = false;
+	mIsLooping = false;
+	mMovieTitle = std::string();
+	mReceivedTitle = false;
+	mCommand = COMMAND_NONE;
+	mPlayRate = 0.0f;
+	mStatus = STATUS_NONE;
+}
+
+MediaPluginQuickTime::~MediaPluginQuickTime()
+{
+//	std::cerr << "MediaPluginQuickTime destructor" << std::endl;
+
+	ExitMovies();
+
+#ifdef LL_WINDOWS
+	TerminateQTML();
+//		std::cerr << "QuickTime closing down" << std::endl;
+#endif
+}
+
+
+void MediaPluginQuickTime::receiveMessage(const char *message_string)
+{
+//	std::cerr << "MediaPluginQuickTime::receiveMessage: received message: \"" << message_string << "\"" << std::endl;
+	LLPluginMessage message_in;
+
+	if(message_in.parse(message_string) >= 0)
+	{
+		std::string message_class = message_in.getClass();
+		std::string message_name = message_in.getName();
+		if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE)
+		{
+			if(message_name == "init")
+			{
+				LLPluginMessage message("base", "init_response");
+				LLSD versions = LLSD::emptyMap();
+				versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION;
+				versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION;
+				// Normally a plugin would only specify one of these two subclasses, but this is a demo...
+				versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME] = LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME_VERSION;
+				message.setValueLLSD("versions", versions);
+
+				#ifdef LL_WINDOWS
+
+				// QuickTime 7.6.4 has an issue (that was not present in 7.6.2) with initializing QuickTime
+				// according to this article: http://lists.apple.com/archives/QuickTime-API/2009/Sep/msg00097.html
+				// The solution presented there appears to work.
+				QTLoadLibrary("qtcf.dll");
+
+				// main initialization for QuickTime - only required on Windows
+				OSErr result = InitializeQTML( 0L );
+				if ( result != noErr )
+				{
+					//TODO: If no QT on Windows, this fails - respond accordingly.
+				}
+				else
+				{
+					//std::cerr << "QuickTime initialized" << std::endl;
+				};
+				#endif
+
+				// required for both Windows and Mac
+				EnterMovies();
+
+				std::string plugin_version = "QuickTime media plugin, QuickTime version ";
+
+				long version = 0;
+				Gestalt( gestaltQuickTimeVersion, &version );
+				std::ostringstream codec( "" );
+				codec << std::hex << version << std::dec;
+				plugin_version += codec.str();
+				message.setValue("plugin_version", plugin_version);
+				sendMessage(message);
+
+				// Plugin gets to decide the texture parameters to use.
+				message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
+				#if defined(LL_WINDOWS)
+					// Values for Windows
+					mDepth = 3;
+					message.setValueU32("format", GL_RGB);
+					message.setValueU32("type", GL_UNSIGNED_BYTE);
+
+					// We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even.
+					// Padding to a multiple of 3*32 guarantees it'll divide out properly.
+					message.setValueU32("padding", 32 * 3);
+				#else
+					// Values for Mac
+					mDepth = 4;
+					message.setValueU32("format", GL_BGRA_EXT);
+					#ifdef __BIG_ENDIAN__
+						message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV );
+					#else
+						message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8);
+					#endif
+
+					// Pad texture width to a multiple of 32 bytes, to line up with cache lines.
+					message.setValueU32("padding", 32);
+				#endif
+				message.setValueS32("depth", mDepth);
+				message.setValueU32("internalformat", GL_RGB);
+				message.setValueBoolean("coords_opengl", true);	// true == use OpenGL-style coordinates, false == (0,0) is upper left.
+				message.setValueBoolean("allow_downsample", true);
+				sendMessage(message);
+			}
+			else if(message_name == "idle")
+			{
+				// no response is necessary here.
+				F64 time = message_in.getValueReal("time");
+
+				// Convert time to milliseconds for update()
+				update((int)(time * 1000.0f));
+			}
+			else if(message_name == "cleanup")
+			{
+				// TODO: clean up here
+			}
+			else if(message_name == "shm_added")
+			{
+				SharedSegmentInfo info;
+				info.mAddress = message_in.getValuePointer("address");
+				info.mSize = (size_t)message_in.getValueS32("size");
+				std::string name = message_in.getValue("name");
+//				std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory added, name: " << name
+//					<< ", size: " << info.mSize
+//					<< ", address: " << info.mAddress
+//					<< std::endl;
+
+				mSharedSegments.insert(SharedSegmentMap::value_type(name, info));
+
+			}
+			else if(message_name == "shm_remove")
+			{
+				std::string name = message_in.getValue("name");
+
+//				std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory remove, name = " << name << std::endl;
+
+				SharedSegmentMap::iterator iter = mSharedSegments.find(name);
+				if(iter != mSharedSegments.end())
+				{
+					if(mPixels == iter->second.mAddress)
+					{
+						// This is the currently active pixel buffer.  Make sure we stop drawing to it.
+						mPixels = NULL;
+						mTextureSegmentName.clear();
+
+						// Make sure the movie GWorld is no longer pointed at the shared segment.
+						sizeChanged();
+					}
+					mSharedSegments.erase(iter);
+				}
+				else
+				{
+//					std::cerr << "MediaPluginQuickTime::receiveMessage: unknown shared memory region!" << std::endl;
+				}
+
+				// Send the response so it can be cleaned up.
+				LLPluginMessage message("base", "shm_remove_response");
+				message.setValue("name", name);
+				sendMessage(message);
+			}
+			else
+			{
+//				std::cerr << "MediaPluginQuickTime::receiveMessage: unknown base message: " << message_name << std::endl;
+			}
+		}
+		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
+		{
+			if(message_name == "size_change")
+			{
+				std::string name = message_in.getValue("name");
+				S32 width = message_in.getValueS32("width");
+				S32 height = message_in.getValueS32("height");
+				S32 texture_width = message_in.getValueS32("texture_width");
+				S32 texture_height = message_in.getValueS32("texture_height");
+
+				//std::cerr << "---->Got size change instruction from application with name: " << name << " - size is " << width << " x " << height << std::endl;
+
+				LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response");
+				message.setValue("name", name);
+				message.setValueS32("width", width);
+				message.setValueS32("height", height);
+				message.setValueS32("texture_width", texture_width);
+				message.setValueS32("texture_height", texture_height);
+				sendMessage(message);
+
+				if(!name.empty())
+				{
+					// Find the shared memory region with this name
+					SharedSegmentMap::iterator iter = mSharedSegments.find(name);
+					if(iter != mSharedSegments.end())
+					{
+//						std::cerr << "%%% Got size change, new size is " << width << " by " << height << std::endl;
+//						std::cerr << "%%%%  texture size is " << texture_width << " by " << texture_height << std::endl;
+
+						mPixels = (unsigned char*)iter->second.mAddress;
+						mTextureSegmentName = name;
+						mWidth = width;
+						mHeight = height;
+
+						mTextureWidth = texture_width;
+						mTextureHeight = texture_height;
+
+						mMediaSizeChanging = false;
+
+						sizeChanged();
+
+						update();
+					};
+				};
+			}
+			else if(message_name == "load_uri")
+			{
+				std::string uri = message_in.getValue("uri");
+				load( uri );
+				sendStatus();
+			}
+			else if(message_name == "mouse_event")
+			{
+				std::string event = message_in.getValue("event");
+				S32 x = message_in.getValueS32("x");
+				S32 y = message_in.getValueS32("y");
+
+				if(event == "down")
+				{
+					mouseDown(x, y);
+				}
+				else if(event == "up")
+				{
+					mouseUp(x, y);
+				}
+				else if(event == "move")
+				{
+					mouseMove(x, y);
+				};
+			};
+		}
+		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
+		{
+			if(message_name == "stop")
+			{
+				stop();
+			}
+			else if(message_name == "start")
+			{
+				F64 rate = 0.0;
+				if(message_in.hasValue("rate"))
+				{
+					rate = message_in.getValueReal("rate");
+				}
+				play(rate);
+			}
+			else if(message_name == "pause")
+			{
+				pause();
+			}
+			else if(message_name == "seek")
+			{
+				F64 time = message_in.getValueReal("time");
+				seek(time);
+			}
+			else if(message_name == "set_loop")
+			{
+				bool loop = message_in.getValueBoolean("loop");
+				mIsLooping = loop;
+			}
+			else if(message_name == "set_volume")
+			{
+				F64 volume = message_in.getValueReal("volume");
+				setVolume(volume);
+			}
+		}
+		else
+		{
+//			std::cerr << "MediaPluginQuickTime::receiveMessage: unknown message class: " << message_class << std::endl;
+		};
+	};
+}
+
+int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
+{
+	MediaPluginQuickTime *self = new MediaPluginQuickTime(host_send_func, host_user_data);
+	*plugin_send_func = MediaPluginQuickTime::staticReceiveMessage;
+	*plugin_user_data = (void*)self;
+
+	return 0;
+}
+
+#else // LL_QUICKTIME_ENABLED
+
+// Stubbed-out class with constructor/destructor (necessary or windows linker
+// will just think its dead code and optimize it all out)
+class MediaPluginQuickTime : public MediaPluginBase
+{
+public:
+	MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
+	~MediaPluginQuickTime();
+	/* virtual */ void receiveMessage(const char *message_string);
+};
+
+MediaPluginQuickTime::MediaPluginQuickTime(
+	LLPluginInstance::sendMessageFunction host_send_func,
+	void *host_user_data ) :
+	MediaPluginBase(host_send_func, host_user_data)
+{
+    // no-op
+}
+
+MediaPluginQuickTime::~MediaPluginQuickTime()
+{
+    // no-op
+}
+
+void MediaPluginQuickTime::receiveMessage(const char *message_string)
+{
+    // no-op
+}
+
+// We're building without quicktime enabled.  Just refuse to initialize.
+int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
+{
+    return -1;
+}
+
+#endif // LL_QUICKTIME_ENABLED
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 4a19293f99a39a050a61f94bc29a81e2aff0de7d..e0fa0f2136d3cfe4ee937e069b921afcf2a3b81b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -222,7 +222,6 @@ set(viewer_SOURCE_FILES
     llfloaterwhitelistentry.cpp
     llfloaterwindlight.cpp
     llfloaterworldmap.cpp
-    llfoldertype.cpp
     llfolderview.cpp
     llfolderviewitem.cpp
     llfollowcam.cpp
@@ -245,7 +244,6 @@ set(viewer_SOURCE_FILES
     llhudrender.cpp
     llhudtext.cpp
     llhudview.cpp
-    llimcontrolpanel.cpp
     llimfloater.cpp
     llimhandler.cpp
     llimpanel.cpp
@@ -257,7 +255,9 @@ set(viewer_SOURCE_FILES
     llinventorybridge.cpp
     llinventoryclipboard.cpp
     llinventoryfilter.cpp
+    llinventoryfunctions.cpp
     llinventorymodel.cpp
+    llinventorypanel.cpp
     llinventorysubtreepanel.cpp
     lljoystickbutton.cpp
     lllandmarkactions.cpp
@@ -274,7 +274,6 @@ set(viewer_SOURCE_FILES
     llmaniprotate.cpp
     llmanipscale.cpp
     llmaniptranslate.cpp
-    llmapresponders.cpp
     llmediactrl.cpp
     llmediadataclient.cpp
     llmediaremotectrl.cpp
@@ -296,6 +295,7 @@ set(viewer_SOURCE_FILES
     llnotificationalerthandler.cpp
     llnotificationgrouphandler.cpp
     llnotificationmanager.cpp
+    llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
     llnotificationtiphandler.cpp
     llnotify.cpp
@@ -319,20 +319,21 @@ set(viewer_SOURCE_FILES
     llpanelgroupnotices.cpp
     llpanelgrouproles.cpp
     llpanelimcontrolpanel.cpp
-    llpanelinventory.cpp
     llpanelland.cpp
     llpanellandaudio.cpp
+    llpanellandmarkinfo.cpp
     llpanellandmarks.cpp
     llpanellandmedia.cpp
     llpanellogin.cpp
     llpanellookinfo.cpp
     llpanellooks.cpp
-    llpanelmedia.cpp
+    llpanelmaininventory.cpp
     llpanelmediasettingsgeneral.cpp
     llpanelmediasettingspermissions.cpp
     llpanelmediasettingssecurity.cpp
     llpanelmeprofile.cpp
     llpanelobject.cpp
+    llpanelobjectinventory.cpp
     llpanelpeople.cpp
     llpanelpeoplemenus.cpp
     llpanelpermissions.cpp
@@ -340,6 +341,7 @@ set(viewer_SOURCE_FILES
     llpanelpicks.cpp
     llpanelplace.cpp
     llpanelplaceinfo.cpp
+    llpanelplaceprofile.cpp
     llpanelplaces.cpp
     llpanelplacestab.cpp
     llpanelprimmediacontrols.cpp
@@ -372,11 +374,16 @@ set(viewer_SOURCE_FILES
     llsearchcombobox.cpp
     llsearchhistory.cpp
     llselectmgr.cpp
+    llsidepanelinventory.cpp
+    llsidepanelinventorysubpanel.cpp
+    llsidepaneliteminfo.cpp
+    llsidepaneltaskinfo.cpp
     llsidetray.cpp
     llsidetraypanelcontainer.cpp
     llsky.cpp
     llslurl.cpp
     llspatialpartition.cpp
+    llspeakbutton.cpp
     llspeakers.cpp
     llsplitbutton.cpp
     llsprite.cpp
@@ -397,6 +404,10 @@ set(viewer_SOURCE_FILES
     lltexturecache.cpp
     lltexturectrl.cpp
     lltexturefetch.cpp
+    lltextureinfo.cpp
+    lltextureinfodetails.cpp
+    lltexturestats.cpp
+    lltexturestatsuploader.cpp
     lltextureview.cpp
     lltoast.cpp
     lltoastalertpanel.cpp
@@ -437,12 +448,14 @@ set(viewer_SOURCE_FILES
     llvectorperfoptions.cpp
     llviewchildren.cpp
     llviewerassetstorage.cpp
+    llviewerassettype.cpp
     llvieweraudio.cpp
     llviewercamera.cpp
     llviewercontrol.cpp
     llviewercontrollistener.cpp
     llviewerdisplay.cpp
     llviewerfloaterreg.cpp
+    llviewerfoldertype.cpp
     llviewergenericmessage.cpp
     llviewergesture.cpp    
     llviewerhelp.cpp
@@ -520,6 +533,8 @@ set(viewer_SOURCE_FILES
     llwlparamset.cpp
     llworld.cpp
     llworldmap.cpp
+    llworldmapmessage.cpp
+    llworldmipmap.cpp
     llworldmapview.cpp
     llxmlrpclistener.cpp
     llxmlrpctransaction.cpp
@@ -705,7 +720,6 @@ set(viewer_HEADER_FILES
     llfloaterwhitelistentry.h
     llfloaterwindlight.h
     llfloaterworldmap.h
-    llfoldertype.h
     llfolderview.h
     llfoldervieweventlistener.h
     llfolderviewitem.h
@@ -728,7 +742,6 @@ set(viewer_HEADER_FILES
     llhudrender.h
     llhudtext.h
     llhudview.h
-    llimcontrolpanel.h
     llimfloater.h
     llimpanel.h
     llimview.h
@@ -739,7 +752,9 @@ set(viewer_HEADER_FILES
     llinventorybridge.h
     llinventoryclipboard.h
     llinventoryfilter.h
+    llinventoryfunctions.h
     llinventorymodel.h
+    llinventorypanel.h
     llinventorysubtreepanel.h
     lljoystickbutton.h
     lllandmarkactions.h
@@ -757,7 +772,6 @@ set(viewer_HEADER_FILES
     llmaniprotate.h
     llmanipscale.h
     llmaniptranslate.h
-    llmapresponders.h
     llmediactrl.h
     llmediadataclient.h
     llmediaremotectrl.h
@@ -799,20 +813,21 @@ set(viewer_HEADER_FILES
     llpanelgroupnotices.h
     llpanelgrouproles.h
     llpanelimcontrolpanel.h
-    llpanelinventory.h
     llpanelland.h
     llpanellandaudio.h
+    llpanellandmarkinfo.h
     llpanellandmarks.h
     llpanellandmedia.h
     llpanellogin.h
     llpanellookinfo.h
     llpanellooks.h
-    llpanelmedia.h
+    llpanelmaininventory.h
     llpanelmediasettingsgeneral.h
     llpanelmediasettingspermissions.h
     llpanelmediasettingssecurity.h
     llpanelmeprofile.h
     llpanelobject.h
+    llpanelobjectinventory.h
     llpanelpeople.h
     llpanelpeoplemenus.h
     llpanelpermissions.h
@@ -820,6 +835,7 @@ set(viewer_HEADER_FILES
     llpanelpicks.h
     llpanelplace.h
     llpanelplaceinfo.h
+    llpanelplaceprofile.h
     llpanelplaces.h
     llpanelplacestab.h
     llpanelprimmediacontrols.h
@@ -854,11 +870,16 @@ set(viewer_HEADER_FILES
     llsearchcombobox.h
     llsearchhistory.h
     llselectmgr.h
+    llsidepanelinventory.h
+    llsidepanelinventorysubpanel.h
+    llsidepaneliteminfo.h
+    llsidepaneltaskinfo.h
     llsidetray.h
     llsidetraypanelcontainer.h
     llsky.h
     llslurl.h
     llspatialpartition.h
+    llspeakbutton.h
     llspeakers.h
     llsplitbutton.h
     llsprite.h
@@ -880,6 +901,10 @@ set(viewer_HEADER_FILES
     lltexturecache.h
     lltexturectrl.h
     lltexturefetch.h
+    lltextureinfo.h
+    lltextureinfodetails.h
+    lltexturestats.h
+    lltexturestatsuploader.h
     lltextureview.h
     lltoast.h
     lltoastalertpanel.h
@@ -921,6 +946,7 @@ set(viewer_HEADER_FILES
     llvectorperfoptions.h
     llviewchildren.h
     llviewerassetstorage.h
+    llviewerassettype.h
     llvieweraudio.h
     llviewerbuild.h
     llviewercamera.h
@@ -928,6 +954,7 @@ set(viewer_HEADER_FILES
     llviewercontrollistener.h
     llviewerdisplay.h
     llviewerfloaterreg.h
+    llviewerfoldertype.h
     llviewergenericmessage.h
     llviewergesture.h    
     llviewerhelp.h
@@ -1004,13 +1031,14 @@ set(viewer_HEADER_FILES
     llwlparamset.h
     llworld.h
     llworldmap.h
+    llworldmapmessage.h
+    llworldmipmap.h
     llworldmapview.h
     llxmlrpclistener.h
     llxmlrpctransaction.h
     macmain.h
     noise.h
     pipeline.h
-    randgauss.h
     VertexCache.h
     VorbisFramework.h
     )
@@ -1658,6 +1686,12 @@ LL_ADD_INTEGRATION_TEST(llcapabilitylistener
   )
 
 #ADD_VIEWER_BUILD_TEST(llmemoryview viewer)
+#ADD_VIEWER_BUILD_TEST(llagentaccess viewer)
+#ADD_VIEWER_BUILD_TEST(llworldmap viewer)
+#ADD_VIEWER_BUILD_TEST(llworldmipmap viewer)
+#ADD_VIEWER_BUILD_TEST(lltextureinfo viewer)
+#ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer)
+#ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer)
 
 
 # Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index dceaba9a4343eedec10fe62f2cff7fee2c1e8941..879408d6e4f38567bae0d88ce2647706acd9a398 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
 
 CFBundleName = "Second Life";
 
-CFBundleShortVersionString = "Second Life version 2.0.0.3256";
-CFBundleGetInfoString = "Second Life version 2.0.0.3256, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 2.0.0.200030";
+CFBundleGetInfoString = "Second Life version 2.0.0.200030, Copyright 2004-2009 Linden Research, Inc.";
 
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 7aec8a343d60697b9e5d02297c8add0a4d6cd861..38ebb22b8487637bb55c4d2e9dd3680f666a6b22 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>2.0.0.3256</string>
+	<string>2.0.0.200030</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml
index 2038779c4f569ba1304e1615a2954de6c8312ff6..0d539177f38d74217a606b790cffb44784d8e9ac 100644
--- a/indra/newview/app_settings/foldertypes.xml
+++ b/indra/newview/app_settings/foldertypes.xml
@@ -1,66 +1,61 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <ensemble_defs>
   <ensemble
-    asset_num="-1"
-    xui_name="default"
-    icon_name="inv_plain_closed.tga"
-     />
-  <ensemble
-    asset_num="27"
+    foldertype_num="27"
     xui_name="head"
     icon_name="inv_folder_outfit_head.tga"
 	allowed="hair,eyes"
      />
   <ensemble
-    asset_num="28"
+    foldertype_num="28"
     xui_name="gloves"
     icon_name="inv_folder_outfit_gloves.tga"
 	allowed="gloves"
      />
   <ensemble
-    asset_num="29"
+    foldertype_num="29"
     xui_name="jacket"
     icon_name="inv_folder_outfit_jacket.tga"
 	allowed="jacket"
      />
   <ensemble
-    asset_num="30"
+    foldertype_num="30"
     xui_name="pants"
     icon_name="inv_folder_outfit_pants.tga"
 	allowed="pants,underpants"
      />
   <ensemble
-    asset_num="31"
+    foldertype_num="31"
     xui_name="shape"
     icon_name="inv_folder_outfit_shape.tga"
 	allowed="shape,skin,hair,eyes"
      />
   <ensemble
-    asset_num="32"
+    foldertype_num="32"
     xui_name="shoes"
     icon_name="inv_folder_outfit_shoes.tga"
 	allowed="shoes,socks"
      />
   <ensemble
-    asset_num="33"
+    foldertype_num="33"
     xui_name="shirt"
     icon_name="inv_folder_outfit_shirt.tga"
 	allowed="shirt,undershirt"
      />
   <ensemble
-    asset_num="34"
+    foldertype_num="34"
     xui_name="skirt"
     icon_name="inv_folder_outfit_skirt.tga"
 	allowed=""
      />
   <ensemble
-    asset_num="35"
+    foldertype_num="35"
     xui_name="underpants"
     icon_name="inv_folder_outfit_underpants.tga"
 	allowed="underpants"
      />
   <ensemble
-    asset_num="36"
+    foldertype_num="36"
     xui_name="undershirt"
     icon_name="inv_folder_outfit_undershirt.tga"
 	allowed="undershirt"
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index 669235af1bc0cb7620a6e2b88b3b172923a36798..ab18febcccc91213aa7902d8a0415c0504aaf585 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -1,291 +1,291 @@
-<?xml version="1.0" ?>
-<llsd>
-<map>
-    <key>FirstAppearance</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstAppearance warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstAttach</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstAttach warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceDecrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceDecrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceIncrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceIncrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBuild</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBuild warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstDebugMenus</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstDebugMenus warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstFlexible</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstFlexible warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstGoTo</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstGoTo warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstInventory</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstInventory warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstLeftClickNoHit</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstLeftClickNoHit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMap</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstMap warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMedia</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstMedia warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstOverrideKeys</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstOverrideKeys warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstSandbox</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSandbox warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstSculptedPrim</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSculptedPrim warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstSit</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstStreamingMusic</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstStreamingMusic warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstStreamingVideo</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstStreamingVideo warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstTeleport</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstTeleport warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstVoice</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstVoice warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>AboutDirectX9</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables AboutDirectX9 warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>BrowserLaunch</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables BrowserLaunch warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>DeedObject</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables DeedObject warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-  <key>NewClassified</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables NewClassified warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>QuickTimeInstalled</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables QuickTimeInstalled warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>ReturnToOwner</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables ReturnToOwner warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-  </map>
-</llsd>
+<?xml version="1.0" ?>
+<llsd>
+<map>
+    <key>FirstAppearance</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstAppearance warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstAttach</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstAttach warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstBalanceDecrease</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBalanceDecrease warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstBalanceIncrease</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBalanceIncrease warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstBuild</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBuild warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstDebugMenus</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstDebugMenus warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstFlexible</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstFlexible warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstGoTo</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstGoTo warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstInventory warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstLeftClickNoHit</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstLeftClickNoHit warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstMap</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstMap warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstMedia</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstMedia warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstOverrideKeys</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstOverrideKeys warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstSandbox</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSandbox warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstSculptedPrim</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSculptedPrim warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstSit</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSit warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstStreamingMusic</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstStreamingMusic warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstStreamingVideo</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstStreamingVideo warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstTeleport</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstTeleport warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstVoice</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstVoice warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>AboutDirectX9</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables AboutDirectX9 warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>BrowserLaunch</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables BrowserLaunch warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>DeedObject</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables DeedObject warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+  <key>NewClassified</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables NewClassified warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>QuickTimeInstalled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables QuickTimeInstalled warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>ReturnToOwner</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables ReturnToOwner warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+  </map>
+</llsd>
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 544f1c598e9a57e06c9cde70251bd6eadc1f53ac..5f6fd6e4a735564967a27766decc543bd1f58a50 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -560,7 +560,8 @@ STATUS_WHITELIST_FAILED                URL failed to pass whitelist
 NULL_KEY			Indicates an empty key
 EOF					Indicates the last line of a notecard was read
 TEXTURE_BLANK			UUID for the "Blank" texture
-TEXTURE_DEFAULT			UUID for the "Default Media" texture
+TEXTURE_DEFAULT			Alias for TEXTURE_PLYWOOD
+TEXTURE_MEDIA			UUID for the "Default Media" texture
 TEXTURE_PLYWOOD			UUID for the default "Plywood" texture
 TEXTURE_TRANSPARENT		UUID for the "White - Transparent" texture
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c10ac4e112cb751485e279da83366fdba93a4975..1e0ba9da3d116a0e45d7f0f1461cf4297495ab18 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -133,7 +133,7 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>ArrowKeysMoveAvatar</key>
+    <key>ArrowKeysAlwaysMove</key>
     <map>
       <key>Comment</key>
       <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
@@ -142,7 +142,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>AskedAboutCrashReports</key>
     <map>
@@ -309,7 +309,18 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>AutoAcceptNewInventory</key>
+  <key>AuditTexture</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable texture auditting.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
+  <key>AutoAcceptNewInventory</key>
     <map>
       <key>Comment</key>
       <string>Automatically accept new notecards/textures/landmarks</string>
@@ -3574,7 +3585,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://www.google.com/search?q=site%3Awiki.secondlife.com+[TOPIC]&amp;ignore_channel=[CHANNEL]&amp;ignore_version=[VERSION]&amp;ignore_os=[OS]&amp;ignore_language=[LANGUAGE]&amp;ignore_version_major=[VERSION_MAJOR]&amp;ignore_version_minor=[VERSION_MINOR]&amp;ignore_version_patch=[VERSION_PATCH]&amp;ignore_version_build=[VERSION_BUILD]</string>
+      <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;os=[OS]&amp;language=[LANGUAGE]&amp;version_major=[VERSION_MAJOR]&amp;version_minor=[VERSION_MINOR]&amp;version_patch=[VERSION_PATCH]&amp;version_build=[VERSION_BUILD]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
@@ -3587,6 +3598,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>HideSelectedObjects</key>
+    <map>
+      <key>Comment</key>
+      <string>Hide Selected Objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>	
     <key>HtmlHelpLastPage</key>
     <map>
       <key>Comment</key>
@@ -4567,6 +4589,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>MiniMapPrimMaxRadius</key>
+    <map>
+      <key>Comment</key>
+      <string>Radius of the largest prim to show on the MiniMap. Increasing beyond 256 may cause client lag.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>256.0</real>
+    </map>
     <key>MiniMapRotate</key>
     <map>
       <key>Comment</key>
@@ -4581,7 +4614,7 @@
     <key>MiniMapScale</key>
     <map>
       <key>Comment</key>
-      <string>Miniature world map zoom levle (pixels per region)</string>
+      <string>Miniature world map zoom level (pixels per region)</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -5294,7 +5327,6 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-
     <key>PluginInstancesCPULimit</key>
     <map>
       <key>Comment</key>
@@ -5360,6 +5392,17 @@
       <string>U32</string>
       <key>Value</key>
 	  <integer>13</integer>
+    </map>
+	<key>PrimMediaControlsUseHoverControlSet</key>
+	<map>
+	  <key>Comment</key>
+      <string>Whether or not hovering over prim media uses minimal "hover" controls or the authored control set.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
     </map>
     <key>PrimMediaMaxRetries</key>
     <map>
@@ -5463,7 +5506,18 @@
     <key>QAModeEventHostPort</key>
     <map>
       <key>Comment</key>
-      <string>Enable Testing Features.</string>
+      <string>Port on which lleventhost should listen</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
+    <key>QAModeTermCode</key>
+    <map>
+      <key>Comment</key>
+      <string>On LL_ERRS, terminate with this code instead of OS message box</string>
       <key>Persist</key>
       <integer>0</integer>
       <key>Type</key>
@@ -5548,6 +5602,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>RegInClient</key>
+    <map>
+      <key>Comment</key>
+      <string>Experimental: Embed registration in login screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RegionTextureSize</key>
     <map>
       <key>Comment</key>
@@ -6215,7 +6280,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>0</integer>
+    <integer>1</integer>
   </map>
 
   <key>RenderHighlightFadeTime</key>
@@ -8591,6 +8656,28 @@
       <key>Value</key>
       <real>20.0</real>
     </map>
+    <key>TextureDisable</key>
+    <map>
+      <key>Comment</key>
+      <string>If TRUE, do not load textures for in-world content</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>TextureLoadFullRes</key>
+    <map>
+      <key>Comment</key>
+      <string>If TRUE, always load textures at full resolution (discard = 0)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>TextureMemory</key>
     <map>
       <key>Comment</key>
@@ -10649,5 +10736,38 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-  </map>
+    <key>LogTextureDownloadsToViewerLog</key>
+    <map>
+      <key>Comment</key>
+      <string>Send texture download details to the viewer log</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LogTextureDownloadsToSimulator</key>
+    <map>
+      <key>Comment</key>
+      <string>Send a digest of texture info to the sim</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>TextureLoggingThreshold</key>
+    <map>
+      <key>Comment</key>
+      <string>Specifies the byte threshold at which texture download data should be sent to the sim.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+</map>
 </llsd>
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index c43ba27984697e50ea90a76c825c74b4603ef1c1..10c197d09eb71c6cf3303ee372802d6f78a661d2 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
 <linden_avatar
- version="1.0" wearable_definition_version="23"> 
+ version="1.0" wearable_definition_version="24"> 
   <!-- The wearable_definition_version is checked during asset upload. -->
   <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
   <skeleton
@@ -8985,7 +8985,7 @@ render_pass="bump">
          id="1017" />
 
         <driven
-         id="1033" />
+         id="1035" />
 
         <driven
          id="914"
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index d557df3d927d7ad91d7f3bd0461d2fbd8d5d3624..d20c23df80838bf4066b4bb7c483ac6814e83ae9 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -245,7 +245,6 @@ RenderVBOEnable				1	0
 list Intel
 RenderAnisotropic			1	0
 RenderLightingDetail		1	0
-RenderUseImpostors			0	0
 
 list GeForce2
 RenderAnisotropic			1	0
@@ -261,51 +260,63 @@ UseOcclusion				0	0
 list Intel_830M
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_845G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_855GM				
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_865G			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_900		
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_915GM	
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_915G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_945GM			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_945G
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_950
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_965
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
 UseOcclusion				0	0
+RenderUseImpostors			0	0
 
 list Intel_G33
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
+RenderUseImpostors			0	0
 
 list Intel_G45
 WindLightUseAtmosShaders		0	0
diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
index 185c0180fbb9c3468de11947bed9278f697d3720..30f9349111d117a99d4af183bfb11607286239b0 100644
--- a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
+++ b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
@@ -1,6 +1,6 @@
-The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
-
-This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details.
-
-James Cook
-September 2008
+The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
+
+This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details.
+
+James Cook
+September 2008
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 75a72e5b17c296a42ed9240cc87cf396e885fb0f..24bdf66c2a15d040747b0cdba540f2d3baabaa4f 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -75,6 +75,8 @@
 #include "llstatusbar.h"
 #include "llteleportflags.h"
 #include "llteleporthistory.h"
+#include "lltexturestats.h"
+#include "lltexturestats.h"
 #include "lltool.h"
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
@@ -6085,17 +6087,16 @@ void LLAgent::teleportCancel()
 void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
 {
 	LLViewerRegion* regionp = getRegion();
-	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
+	U64 handle = to_region_handle(pos_global);
+	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
 	if(regionp && info)
 	{
-		U32 x_pos;
-		U32 y_pos;
-		from_region_handle(info->mHandle, &x_pos, &y_pos);
+		LLVector3d region_origin = info->getGlobalOrigin();
 		LLVector3 pos_local(
-			(F32)(pos_global.mdV[VX] - x_pos),
-			(F32)(pos_global.mdV[VY] - y_pos),
+			(F32)(pos_global.mdV[VX] - region_origin.mdV[VX]),
+			(F32)(pos_global.mdV[VY] - region_origin.mdV[VY]),
 			(F32)(pos_global.mdV[VZ]));
-		teleportRequest(info->mHandle, pos_local);
+		teleportRequest(handle, pos_local);
 	}
 	else if(regionp && 
 		teleportCore(regionp->getHandle() == to_region_handle_global((F32)pos_global.mdV[VX], (F32)pos_global.mdV[VY])))
@@ -6512,3 +6513,4 @@ LLAgentQueryManager::~LLAgentQueryManager()
 }
 
 // EOF
+
diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp
index 6e5835bace2b12a8162ac9a93b7021a7a4b6036e..3c8d0dac42614f29aeba346014247fb50a1c1f81 100644
--- a/indra/newview/llagentpicksinfo.cpp
+++ b/indra/newview/llagentpicksinfo.cpp
@@ -47,7 +47,8 @@ class LLAgentPicksInfo::LLAgentPicksObserver : public LLAvatarPropertiesObserver
 
 	~LLAgentPicksObserver()
 	{
-		LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
+		if (LLAvatarPropertiesProcessor::instanceExists())
+			LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this);
 	}
 
 	void sendAgentPicksRequest()
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 09f7c49f23dbbc91c571aeb77af63488a6af9868..2911a35581b86944901167a2e26bb4eeea0dbec5 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -92,7 +92,10 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/)
 //static
 BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius)
 {
-	return  (gAgent.getPositionAgent() - pole).length() < radius;
+	F32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX];
+	F32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY];
+	
+	return  sqrt( delta_x* delta_x + delta_y* delta_y ) < radius;
 }
 BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const LLVector3& agent_pos_region)
 {
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 380469f5b361f2425315cb817bd9df4d30b61235..3fc1055acdff14aab3b7da7110e21068cb7a6768 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -39,6 +39,7 @@
 #include "llfloaterinventory.h"
 #include "llinventorybridge.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llnotify.h"
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
@@ -433,7 +434,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
 	if (save_in_lost_and_found)
 	{
 		category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_LOST_AND_FOUND);
+			LLFolderType::FT_LOST_AND_FOUND);
 	}
 	else
 	{
@@ -839,7 +840,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 		}
 
 		// Get the UUID of the current outfit folder (will be created if it doesn't exist)
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		
 		LLInitialWearablesFetch* outfit = new LLInitialWearablesFetch();
 		
@@ -980,8 +981,7 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde
 	// Add a new one in the lost and found folder.
 	// (We used to overwrite the "not found" one, but that could potentially
 	// destory content.) JC
-	LLUUID lost_and_found_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 	LLPointer<LLInventoryCallback> cb =
 		new addWearableToAgentInventoryCallback(
 			LLPointer<LLRefCount>(NULL),
@@ -1122,8 +1122,8 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
 
 	// First, make a folder in the Clothes directory.
 	LLUUID folder_id = gInventory.createNewCategory(
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING),
-		LLAssetType::AT_NONE,
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING),
+		LLFolderType::FT_NONE,
 		new_folder_name);
 
 	bool found_first_item = false;
@@ -1256,10 +1256,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
 	}
 
 	// First, make a folder in the My Outfits directory.
-	LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS);
+	const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
 	LLUUID folder_id = gInventory.createNewCategory(
 		parent_id,
-		LLAssetType::AT_OUTFIT,
+		LLFolderType::FT_OUTFIT,
 		new_folder_name);
 
 	LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL);
@@ -1392,6 +1392,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 			const LLUUID &item_id = getWearableItemID(type,i);
 			popWearable(type,i);
 			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+			LLAppearanceManager::removeItemLinks(item_id,false);
 
 			//queryWearableCache(); // moved below
 			if (old_wearable)
@@ -1408,6 +1409,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 		const LLUUID &item_id = getWearableItemID(type,index);
 		popWearable(type, index);
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+		LLAppearanceManager::removeItemLinks(item_id,false);
 
 		//queryWearableCache(); // moved below
 
@@ -1721,10 +1723,8 @@ void LLAgentWearables::queryWearableCache()
 // MULTI_WEARABLE: need a way to specify by wearable rather than by type.
 // User has picked "remove from avatar" from a menu.
 // static
-void LLAgentWearables::userRemoveWearable(void* userdata)
+void LLAgentWearables::userRemoveWearable(EWearableType& type)
 {
-	EWearableType type = (EWearableType)(intptr_t)userdata;
-	
 	if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR)) //&&
 		//!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT)))
 	{
@@ -1734,7 +1734,7 @@ void LLAgentWearables::userRemoveWearable(void* userdata)
 }
 
 // static
-void LLAgentWearables::userRemoveAllClothes(void* userdata)
+void LLAgentWearables::userRemoveAllClothes()
 {
 	// We have to do this up front to avoid having to deal with the case of multiple wearables being dirty.
 	if (gFloaterCustomize)
@@ -2014,7 +2014,8 @@ void LLInitialWearablesFetch::done()
 	LLFindWearables is_wearable;
 	gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, 
 									LLInventoryModel::EXCLUDE_TRASH, is_wearable);
-	
+
+	LLAppearanceManager::setAttachmentInvLinkEnable(true);
 	if (wearable_array.count() > 0)
 	{
 		LLAppearanceManager::instance().updateAppearanceFromCOF();
@@ -2030,7 +2031,7 @@ void LLInitialWearablesFetch::processWearablesMessage()
 {
 	if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead.
 	{
-		LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		for (U8 i = 0; i < mAgentInitialWearables.size(); ++i)
 		{
 			// Populate the current outfit folder with links to the wearables passed in the message
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 97de785c8716889a9187840fc318915a4bf3b46c..317f4a7e4fbc512759bb850d7097da16bafd1c96 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -191,9 +191,9 @@ class LLAgentWearables
 	//--------------------------------------------------------------------
 public:
 	// MULTI-WEARABLE: assuming one wearable per type.  Need upstream changes.
-	static void		userRemoveWearable(void* userdata);	// userdata is EWearableType
-	static void		userRemoveAllClothes(void* userdata);	// userdata is NULL
-
+	static void		userRemoveWearable(EWearableType& type);
+	static void		userRemoveAllClothes();	
+	
 	typedef std::vector<LLViewerObject*> llvo_vec_t;
 
 	static void 	userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 4e022aeb299f25df73cb14cc8032f28093cdf56b..d14de1c3012440f061c797e203f66e240e53b861 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -130,11 +130,11 @@ void LLOutfitObserver::done()
 			{
 				if(LLInventoryType::IT_GESTURE == item->getInventoryType())
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 				}
 				else
 				{
-					pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 				}
 				break;
 			}
@@ -146,7 +146,7 @@ void LLOutfitObserver::done()
 		
 		LLUUID cat_id = gInventory.createNewCategory(
 			pid,
-			LLAssetType::AT_NONE,
+			LLFolderType::FT_NONE,
 			name);
 		mCatID = cat_id;
 		LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend);
@@ -296,15 +296,39 @@ struct LLWearableHoldingPattern
 	bool append;
 };
 
+/* static */ void removeDuplicateItems(LLInventoryModel::item_array_t& items)
+{
+	LLInventoryModel::item_array_t new_items;
+	std::set<LLUUID> items_seen;
+	std::deque<LLViewerInventoryItem*> tmp_list;
+	// Traverse from the front and keep the first of each item
+	// encountered, so we actually keep the *last* of each duplicate
+	// item.  This is needed to give the right priority when adding
+	// duplicate items to an existing outfit.
+	for (S32 i=items.count()-1; i>=0; i--)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		LLUUID item_id = item->getLinkedUUID();
+		if (items_seen.find(item_id)!=items_seen.end())
+			continue;
+		items_seen.insert(item_id);
+		tmp_list.push_front(item);
+	}
+	for (std::deque<LLViewerInventoryItem*>::iterator it = tmp_list.begin();
+		 it != tmp_list.end();
+		 ++it)
+	{
+		new_items.put(*it);
+	}
+	items = new_items;
+}
 
 void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventoryModel::item_array_t& src)
 {
 	LLInventoryModel::item_array_t new_dst;
 	std::set<LLUUID> mark_inventory;
-	std::set<LLUUID> mark_asset;
 
 	S32 inventory_dups = 0;
-	S32 asset_dups = 0;
 	
 	for (LLInventoryModel::item_array_t::const_iterator src_pos = src.begin();
 		  src_pos != src.end();
@@ -312,8 +336,6 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 	{
 		LLUUID src_item_id = (*src_pos)->getLinkedUUID();
 		mark_inventory.insert(src_item_id);
-		LLUUID src_asset_id = (*src_pos)->getAssetUUID();
-		mark_asset.insert(src_asset_id);
 	}
 
 	for (LLInventoryModel::item_array_t::const_iterator dst_pos = dst.begin();
@@ -323,37 +345,26 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory
 		LLUUID dst_item_id = (*dst_pos)->getLinkedUUID();
 
 		if (mark_inventory.find(dst_item_id) == mark_inventory.end())
-		{
-		}
-		else
-		{
-			inventory_dups++;
-		}
-
-		LLUUID dst_asset_id = (*dst_pos)->getAssetUUID();
-
-		if (mark_asset.find(dst_asset_id) == mark_asset.end())
 		{
 			// Item is not already present in COF.
 			new_dst.put(*dst_pos);
-			mark_asset.insert(dst_item_id);
+			mark_inventory.insert(dst_item_id);
 		}
 		else
 		{
-			asset_dups++;
+			inventory_dups++;
 		}
 	}
 	llinfos << "removeDups, original " << dst.count() << " final " << new_dst.count()
-			<< " inventory dups " << inventory_dups << " asset_dups " << asset_dups << llendl;
+			<< " inventory dups " << inventory_dups << llendl;
 	
 	dst = new_dst;
 }
 
-
 /* static */ 
 LLUUID LLAppearanceManager::getCOF()
 {
-	return gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 }
 
 // Update appearance from outfit folder.
@@ -363,6 +374,9 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 	if (!proceed)
 		return;
 
+#if 1 
+	updateCOF(category,append);
+#else
 	if (append)
 	{
 		updateCOFFromCategory(category, append); // append is true - add non-duplicates to COF.
@@ -370,16 +384,17 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo
 	else
 	{
 		LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-		if (catp->getPreferredType() == LLAssetType::AT_NONE ||
-			LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType()))
+		if (catp->getPreferredType() == LLFolderType::FT_NONE ||
+			LLFolderType::lookupIsEnsembleType(catp->getPreferredType()))
 		{
 			updateCOFFromCategory(category, append);  // append is false - rebuild COF.
 		}
-		else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+		else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 		{
 			rebuildCOFFromOutfit(category);
 		}
 	}
+#endif
 }
 
 // Append to current COF contents by recursively traversing a folder.
@@ -401,7 +416,7 @@ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool app
 		return;
 	}
 		
-	const LLUUID &current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 		
@@ -499,7 +514,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		{
 			LLViewerInventoryCategory *catp = item->getLinkedCategory();
 			// Skip copying outfit links.
-			if (catp && catp->getPreferredType() != LLAssetType::AT_OUTFIT)
+			if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
 			{
 				link_inventory_item(gAgent.getID(),
 									item->getLinkedUUID(),
@@ -520,6 +535,130 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		}
 	}
 }
+/* static */ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
+{
+	LLInventoryModel::cat_array_t cats;
+	LLInventoryModel::item_array_t items;
+	gInventory.collectDescendents(category, cats, items,
+								  LLInventoryModel::EXCLUDE_TRASH);
+	for (S32 i = 0; i < items.count(); ++i)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		if (keep_outfit_links && (item->getActualType() == LLAssetType::AT_LINK_FOLDER))
+			continue;
+		gInventory.purgeObject(item->getUUID());
+	}
+}
+
+// Keep the last N wearables of each type.  For viewer 2.0, N is 1 for
+// both body parts and clothing items.
+/* static */ void LLAppearanceManager::filterWearableItems(
+	LLInventoryModel::item_array_t& items, S32 max_per_type)
+{
+	// Divvy items into arrays by wearable type.
+	std::vector<LLInventoryModel::item_array_t> items_by_type(WT_COUNT);
+	for (S32 i=0; i<items.count(); i++)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		// Ignore non-wearables.
+		if (!item->isWearableType())
+			continue;
+		EWearableType type = item->getWearableType();
+		items_by_type[type].push_back(item);
+	}
+
+	// rebuild items list, retaining the last max_per_type of each array
+	items.clear();
+	for (S32 i=0; i<WT_COUNT; i++)
+	{
+		S32 size = items_by_type[i].size();
+		if (size <= 0)
+			continue;
+		S32 start_index = llmax(0,size-max_per_type);
+		for (S32 j = start_index; j<size; j++)
+		{
+			items.push_back(items_by_type[i][j]);
+		}
+	}
+}
+
+// Create links to all listed items.
+/* static */ void LLAppearanceManager::linkAll(const LLUUID& category,
+											   LLInventoryModel::item_array_t& items,
+											   LLPointer<LLInventoryCallback> cb)
+{
+	for (S32 i=0; i<items.count(); i++)
+	{
+		const LLInventoryItem* item = items.get(i).get();
+		link_inventory_item(gAgent.getID(),
+							item->getLinkedUUID(),
+							category,
+							item->getName(),
+							LLAssetType::AT_LINK,
+							cb);
+	}
+}
+
+/* static */ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
+{
+	const LLUUID cof = getCOF();
+
+	// Collect and filter descendents to determine new COF contents.
+
+	// - Body parts: always include COF contents as a fallback in case any
+	// required parts are missing.
+	LLInventoryModel::item_array_t body_items;
+	getDescendentsOfAssetType(cof, body_items, LLAssetType::AT_BODYPART, false);
+	getDescendentsOfAssetType(category, body_items, LLAssetType::AT_BODYPART, false);
+	// Reduce body items to max of one per type.
+	removeDuplicateItems(body_items);
+	filterWearableItems(body_items, 1);
+
+	// - Wearables: include COF contents only if appending.
+	LLInventoryModel::item_array_t wear_items;
+	if (append)
+		getDescendentsOfAssetType(cof, wear_items, LLAssetType::AT_CLOTHING, false);
+	getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false);
+	// Reduce wearables to max of one per type.
+	removeDuplicateItems(wear_items);
+	filterWearableItems(wear_items, 1);
+
+	// - Attachments: include COF contents only if appending.
+	LLInventoryModel::item_array_t obj_items;
+	if (append)
+		getDescendentsOfAssetType(cof, obj_items, LLAssetType::AT_OBJECT, false);
+	getDescendentsOfAssetType(category, obj_items, LLAssetType::AT_OBJECT, false);
+	removeDuplicateItems(obj_items);
+
+	// - Gestures: include COF contents only if appending.
+	LLInventoryModel::item_array_t gest_items;
+	if (append)
+		getDescendentsOfAssetType(cof, gest_items, LLAssetType::AT_GESTURE, false);
+	getDescendentsOfAssetType(category, gest_items, LLAssetType::AT_GESTURE, false);
+	removeDuplicateItems(gest_items);
+	
+	// Remove current COF contents.
+	bool keep_outfit_links = append;
+	purgeCategory(cof, keep_outfit_links);
+	gInventory.notifyObservers();
+
+	// Create links to new COF contents.
+	LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
+
+	linkAll(cof, body_items, link_waiter);
+	linkAll(cof, wear_items, link_waiter);
+	linkAll(cof, obj_items, link_waiter);
+	linkAll(cof, gest_items, link_waiter);
+
+	// Add link to outfit if category is an outfit. 
+	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
+	if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
+	{
+		link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
+							LLAssetType::AT_LINK_FOLDER, link_waiter);
+	}
+							  
+}
 
 /* static */ 
 bool LLAppearanceManager::isMandatoryWearableType(EWearableType type)
@@ -604,7 +743,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 		LLNotifications::instance().add("CouldNotPutOnOutfit");
 		return;
 	}
-		
+
 	// Processes that take time should show the busy cursor
 	//inc_busy_count();
 
@@ -622,7 +761,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
 
 	// Create a link to the outfit that we wore.
 	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-	if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(),
 							LLAssetType::AT_LINK_FOLDER, link_waiter);
@@ -792,6 +931,22 @@ void LLAppearanceManager::getCOFValidDescendents(const LLUUID& category,
 									follow_folder_links);
 }
 
+/* static */
+void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
+													LLInventoryModel::item_array_t& items,
+													LLAssetType::EType type,
+													bool follow_folder_links)
+{
+	LLInventoryModel::cat_array_t cats;
+	LLIsType is_of_type(type);
+	gInventory.collectDescendentsIf(category,
+									cats,
+									items,
+									LLInventoryModel::EXCLUDE_TRASH,
+									is_of_type,
+									follow_folder_links);
+}
+
 /* static */ 
 void LLAppearanceManager::getUserDescendents(const LLUUID& category, 
 											 LLInventoryModel::item_array_t& wear_items,
@@ -924,9 +1079,21 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name)
 	//dec_busy_count();
 }
 
+bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventoryItem *b)
+{
+	return (a->isWearableType() && b->isWearableType() &&
+			(a->getWearableType() == b->getWearableType()));
+}
 /* static */
 void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 {
+	LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item);
+	if (!vitem)
+	{
+		llwarns << "not an llviewerinventoryitem, failed" << llendl;
+		return;
+	}
+		
 	LLInventoryModel::cat_array_t cat_array;
 	LLInventoryModel::item_array_t item_array;
 	gInventory.collectDescendents(LLAppearanceManager::getCOF(),
@@ -936,11 +1103,20 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	bool linked_already = false;
 	for (S32 i=0; i<item_array.count(); i++)
 	{
-		const LLInventoryItem* inv_item = item_array.get(i).get();
+		// Are these links to the same object?
+		const LLViewerInventoryItem* inv_item = item_array.get(i).get();
 		if (inv_item->getLinkedUUID() == item->getLinkedUUID())
 		{
 			linked_already = true;
-			break;
+		}
+		// Are these links to different items of the same wearable
+		// type? If so, new item will replace old.
+		// MULTI-WEARABLES: revisit if more than one per type is allowed.
+		else if (areMatchingWearables(vitem,inv_item))
+		{
+			gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);
+			gInventory.purgeObject(inv_item->getUUID());
+			gInventory.notifyObservers();
 		}
 	}
 	if (linked_already)
@@ -952,9 +1128,9 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	{
 		LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0;
 		link_inventory_item( gAgent.getID(),
-							 item->getLinkedUUID(),
+							 vitem->getLinkedUUID(),
 							 getCOF(),
-							 item->getName(),
+							 vitem->getName(),
 							 LLAssetType::AT_LINK,
 							 cb);
 	}
@@ -998,14 +1174,16 @@ void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)
 	}
 }
 
+//#define DUMP_CAT_VERBOSE
+
 /* static */
-void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str)
+void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
 {
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 	gInventory.collectDescendents(cat_id, cats, items, LLInventoryModel::EXCLUDE_TRASH);
 
-#if 0
+#ifdef DUMP_CAT_VERBOSE
 	llinfos << llendl;
 	llinfos << str << llendl;
 	S32 hitcount = 0;
@@ -1017,6 +1195,89 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, std::string str)
 		llinfos << i <<" "<< item->getName() <<llendl;
 	}
 #endif
-	llinfos << str << " count " << items.count() << llendl;
+	llinfos << msg << " count " << items.count() << llendl;
+}
+
+/* static */
+void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items,
+										const std::string& msg)
+{
+	llinfos << msg << llendl;
+	for (S32 i=0; i<items.count(); i++)
+	{
+		LLViewerInventoryItem *item = items.get(i);
+		llinfos << i <<" " << item->getName() << llendl;
+	}
+	llinfos << llendl;
+}
+
+
+std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments;
+bool LLAppearanceManager::sAttachmentInvLinkEnabled(false);
+
+/* static */
+void LLAppearanceManager::setAttachmentInvLinkEnable(bool val)
+{
+	llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl;
+	sAttachmentInvLinkEnabled = val;
+}
+
+void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
+{
+       llinfos << msg << llendl;
+       for (std::set<LLUUID>::const_iterator it = atts.begin();
+               it != atts.end();
+               ++it)
+       {
+               LLUUID item_id = *it;
+               LLViewerInventoryItem *item = gInventory.getItem(item_id);
+               if (item)
+                       llinfos << "atts " << item->getName() << llendl;
+               else
+                       llinfos << "atts " << "UNKNOWN[" << item_id.asString() << "]" << llendl;
+       }
+       llinfos << llendl;
 }
 
+/* static */
+void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
+{
+       sRegisteredAttachments.insert(item_id);
+       //dumpAttachmentSet(sRegisteredAttachments,"after register:");
+
+	   if (sAttachmentInvLinkEnabled)
+	   {
+		   LLViewerInventoryItem *item = gInventory.getItem(item_id);
+		   if (item)
+		   {
+			   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
+			   LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
+			   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+			   gInventory.notifyObservers();
+		   }
+	   }
+	   else
+	   {
+		   //llinfos << "no link changes, inv link not enabled" << llendl;
+	   }
+}
+
+/* static */
+void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
+{
+       sRegisteredAttachments.erase(item_id);
+       //dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
+
+	   if (sAttachmentInvLinkEnabled)
+	   {
+		   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
+		   LLAppearanceManager::removeItemLinks(item_id, false);
+		   // BAP - needs to change for label to track link.
+		   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+		   gInventory.notifyObservers();
+	   }
+	   else
+	   {
+		   //llinfos << "no link changes, inv link not enabled" << llendl;
+	   }
+}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 828af321013a86a904b1ce4824335be363c93c25..56f54dfc23d095119af9ebf65129f959ab533818 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -46,6 +46,7 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void updateAppearanceFromCOF();
 	static bool needToSaveCOF();
 	static void changeOutfit(bool proceed, const LLUUID& category, bool append);
+	static void updateCOF(const LLUUID& category, bool append = false);
 	static void updateCOFFromCategory(const LLUUID& category, bool append);
 	static void rebuildCOFFromOutfit(const LLUUID& category);
 	static void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
@@ -65,9 +66,23 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static void removeItemLinks(const LLUUID& item_id, bool do_update = true);
 
 	// For debugging - could be moved elsewhere.
-	static void dumpCat(const LLUUID& cat_id, std::string str);
+	static void dumpCat(const LLUUID& cat_id, const std::string& msg);
+	static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
+	static void unregisterAttachment(const LLUUID& item_id);
+	static void registerAttachment(const LLUUID& item_id);
+	static void setAttachmentInvLinkEnable(bool val);
 
 private:
+	static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
+	static void linkAll(const LLUUID& category,
+						LLInventoryModel::item_array_t& items,
+						LLPointer<LLInventoryCallback> cb);
+	
+	static void getDescendentsOfAssetType(const LLUUID& category, 
+										  LLInventoryModel::item_array_t& items,
+										  LLAssetType::EType type,
+										  bool follow_folder_links);
+
 	static void getCOFValidDescendents(const LLUUID& category, 
 									   LLInventoryModel::item_array_t& items);
 									   
@@ -81,6 +96,11 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 	static bool isMandatoryWearableType(EWearableType type);
 	static void checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found);
 	static void purgeCOFBeforeRebuild(const LLUUID& category);
+	static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
+
+	static std::set<LLUUID> sRegisteredAttachments;
+	static bool sAttachmentInvLinkEnabled;
+
 };
 
 #define SUPPORT_ENSEMBLES 0
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 873215169ee95b974d948ce0db2c0093cb642c64..8e6d6b885d696ab4dddf62c240901fc60d817224 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -57,6 +57,8 @@
 #include "llallocator.h"
 #include "llares.h" 
 #include "llcurl.h"
+#include "lltexturestats.h"
+#include "lltexturestats.h"
 #include "llviewerwindow.h"
 #include "llviewerdisplay.h"
 #include "llviewermedia.h"
@@ -255,9 +257,6 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
 
 BOOL				gDisconnected = FALSE;
 
-// Map scale in pixels per region
-F32 				gMapScale = 128.f;
-
 // used to restore texture state after a mode switch
 LLFrameTimer	gRestoreGLTimer;
 BOOL			gRestoreGL = FALSE;
@@ -419,7 +418,7 @@ static void settings_to_globals()
 
 	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
 	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
-	gMapScale = gSavedSettings.getF32("MapScale");
+	LLWorldMapView::sMapScale = gSavedSettings.getF32("MapScale");
 
 	LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap");
 }
@@ -432,7 +431,7 @@ static void settings_modify()
 	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
 	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
 	gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
-	
+	gAuditTexture = gSavedSettings.getBOOL("AuditTexture");
 #if LL_VECTORIZE
 	if (gSysCPU.hasAltivec())
 	{
@@ -553,7 +552,7 @@ LLAppViewer* LLAppViewer::sInstance = NULL;
 const std::string LLAppViewer::sGlobalSettingsName = "Global"; 
 
 LLTextureCache* LLAppViewer::sTextureCache = NULL; 
-LLWorkerThread* LLAppViewer::sImageDecodeThread = NULL; 
+LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL; 
 LLTextureFetch* LLAppViewer::sTextureFetch = NULL; 
 
 LLAppViewer::LLAppViewer() : 
@@ -620,7 +619,19 @@ bool LLAppViewer::init()
 	
 	if (!initConfiguration())
 		return false;
-	
+
+	// Although initLogging() is the right place to mess with
+	// setFatalFunction(), we can't query gSavedSettings until after
+	// initConfiguration().
+	S32 rc(gSavedSettings.getS32("QAModeTermCode"));
+	if (rc >= 0)
+	{
+		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit()
+		// rather than exit() because normal cleanup depends too much on
+		// successful startup!
+		LLError::setFatalFunction(boost::bind(_exit, rc));
+	}
+
     mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling"));
 
     // *NOTE:Mani - LLCurl::initClass is not thread safe. 
@@ -645,6 +656,9 @@ bool LLAppViewer::init()
 	//////////////////////////////////////////////////////////////////////////////
 	// *FIX: The following code isn't grouped into functions yet.
 
+	// Statistics / debug timer initialization
+	init_statistics();
+	
 	//
 	// Various introspection concerning the libs we're using - particularly
         // the libs involved in getting to a full login screen.
@@ -1625,14 +1639,14 @@ bool LLAppViewer::initThreads()
 		LLWatchdog::getInstance()->init(watchdog_killer_callback);
 	}
 
-	LLVFSThread::initClass(enable_threads && true);
-	LLLFSThread::initClass(enable_threads && true);
+	LLVFSThread::initClass(enable_threads && false);
+	LLLFSThread::initClass(enable_threads && false);
 
 	// Image decoding
-	LLAppViewer::sImageDecodeThread = new LLWorkerThread("ImageDecode", enable_threads && true);
+	LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true);
 	LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);
-	LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), enable_threads && false);
-	LLImage::initClass(LLAppViewer::getImageDecodeThread());
+	LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true);
+	LLImage::initClass();
 
 	if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
 	{
@@ -1665,7 +1679,7 @@ bool LLAppViewer::initLogging()
 	LLError::initForApplication(
 				gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
 	LLError::setFatalFunction(errorCallback);
-	
+
 	// Remove the last ".old" log file.
 	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
 							     "SecondLife.old");
@@ -2425,7 +2439,7 @@ void LLAppViewer::cleanupSavedSettings()
 		}
 	}
 
-	gSavedSettings.setF32("MapScale", gMapScale );
+	gSavedSettings.setF32("MapScale", LLWorldMapView::sMapScale );
 
 	// Some things are cached in LLAgent.
 	if (gAgent.mInitialized)
@@ -2751,7 +2765,7 @@ void LLAppViewer::initMarkerFile()
 	
 	// Create the marker file for this execution & lock it
 	apr_status_t s;
-	s = mMarkerFile.open(mMarkerFileName, LL_APR_W, gAPRPoolp);	
+	s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE);	
 
 	if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
 	{
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 73256a8fe64cccedf55c8e9ca995e9351b7399c5..c1bfbca8686c2f778c08fc13ef64ed3eb1790966 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -41,15 +41,13 @@ class LLCommandLineParser;
 class LLFrameTimer;
 class LLPumpIO;
 class LLTextureCache;
+class LLImageDecodeThread;
 class LLTextureFetch;
-class LLTimer;
-class LLVFS;
 class LLWatchdogTimeout;
-class LLWorkerThread;
+class LLCommandLineParser;
 
 struct apr_dso_handle_t;
 
-
 class LLAppViewer : public LLApp
 {
 public:
@@ -100,7 +98,7 @@ class LLAppViewer : public LLApp
     
 	// Thread accessors
 	static LLTextureCache* getTextureCache() { return sTextureCache; }
-	static LLWorkerThread* getImageDecodeThread() { return sImageDecodeThread; }
+	static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; }
 	static LLTextureFetch* getTextureFetch() { return sTextureFetch; }
 
 	const std::string& getSerialNumber() { return mSerialNumber; }
@@ -232,7 +230,7 @@ class LLAppViewer : public LLApp
 
 	// Thread objects.
 	static LLTextureCache* sTextureCache; 
-	static LLWorkerThread* sImageDecodeThread; 
+	static LLImageDecodeThread* sImageDecodeThread; 
 	static LLTextureFetch* sTextureFetch;
 
 	S32 mNumSessions;
@@ -320,9 +318,6 @@ extern F32 gSimFrames;
 
 extern BOOL		gDisconnected;
 
-// Map scale in pixels per region
-extern F32 gMapScale;
-
 extern LLFrameTimer	gRestoreGLTimer;
 extern BOOL			gRestoreGL;
 extern BOOL		gUseWireframe;
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index 2da40ba4b5ab34c496534ef74ad594aa361066f5..1c06f7d31c459808b5652bd765b7757d721a6339 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -41,6 +41,7 @@
 #include "llfilepicker.h"
 #include "llnotify.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llfloaterimportcollada.h"
 #include "llpermissionsflags.h"
@@ -405,7 +406,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
 			asset_name,
 			asset_name,
 			0,
-			LLAssetType::AT_NONE,
+			LLFolderType::FT_NONE,
 			LLInventoryType::IT_NONE,
 			next_owner_perms,
 			group_perms,
@@ -447,7 +448,7 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
 	std::string result = content["state"];
 	LLUUID new_id = content["new_asset"];
 
-	llinfos << "LLSendTexLayerResponder::result from capabilities: " << result << llendl;
+	llinfos << "result: " << result << "new_id:" << new_id << llendl;
 	if (result == "complete"
 		&& mBakedUploadData != NULL)
 	{	// Invoke 
@@ -461,6 +462,14 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
 	}
 }
 
+void LLSendTexLayerResponder::error(U32 statusNum, const std::string& reason)
+{
+	llinfos << "status: " << statusNum << " reason: " << reason << llendl;
+	
+	// Invoke the original callback with an error result
+	LLTexLayerSetBuffer::onTextureUploadComplete(LLUUID(), (void*) mBakedUploadData, -1, LL_EXSTAT_NONE);
+	mBakedUploadData = NULL;	// deleted in onTextureUploadComplete()
+}
 
 LLUpdateAgentInventoryResponder::LLUpdateAgentInventoryResponder(
 	const LLSD& post_data,
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
index 04636d4977e1abc061f6167e847901e242e6bc5e..9102f1597e8e7cead34f94bb91b807464e71715d 100644
--- a/indra/newview/llassetuploadresponders.h
+++ b/indra/newview/llassetuploadresponders.h
@@ -124,6 +124,7 @@ class LLSendTexLayerResponder : public LLAssetUploadResponder
 	~LLSendTexLayerResponder();
 
 	virtual void uploadComplete(const LLSD& content);
+	virtual void error(U32 statusNum, const std::string& reason);
 
 	LLBakedUploadData * mBakedUploadData;
 };
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2f6740130173d68a9dd019429f8b818fa1f28780..dae4296a82ede79c202988180741751ed0bf5e9c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -57,6 +57,7 @@
 #include "llviewerobjectlist.h"
 #include "llviewermessage.h"	// for handle_lure
 #include "llviewerregion.h"
+#include "llimfloater.h"
 
 
 // static
@@ -176,10 +177,46 @@ void LLAvatarActions::startIM(const LLUUID& id)
 
 	std::string name;
 	gCacheName->getFullName(id, name);
-	gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 	make_ui_sound("UISndStartIM");
 }
 
+// static
+void LLAvatarActions::startCall(const LLUUID& id)
+{
+	if (id.isNull() || isCalling(id))
+	{
+		return;
+	}
+
+	std::string name;
+	gCacheName->getFullName(id, name);
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	if (session_id != LLUUID::null)
+	{
+		// always open IM window when connecting to voice
+		LLIMFloater::show(session_id);
+		gIMMgr->startCall(session_id);
+	}
+	make_ui_sound("UISndStartIM");
+}
+
+// static
+bool LLAvatarActions::isCalling(const LLUUID &id)
+{
+	if (id.isNull())
+	{
+		return false;
+	}
+
+	LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
+	return (LLIMModel::getInstance()->findIMSession(session_id) != NULL);
+}
+
 // static
 void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
 {
@@ -189,7 +226,11 @@ void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
 	{
 		id_array.push_back(*it);
 	}
-	gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array);
+	LLUUID session_id = gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], id_array);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 	make_ui_sound("UISndStartIM");
 }
 
@@ -343,7 +384,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 		// Servers older than 1.25 require the text of the message to be the
 		// calling card folder ID for the offering user. JC
 		LLUUID calling_card_folder_id = 
-			gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+			gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		std::string message = calling_card_folder_id.asString();
 		requestFriendship(notification["payload"]["id"].asUUID(), 
 		    notification["payload"]["name"].asString(),
@@ -355,7 +396,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re
 // static
 void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message)
 {
-	LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 	send_improved_im(target_id,
 					 target_name,
 					 message,
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 512f673b432acc8356296b7949d3734508e395af..0ec20ae3572477764a2ffed0c9e881682b9cbb83 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -66,6 +66,11 @@ class LLAvatarActions
 	 */
 	static void startIM(const LLUUID& id);
 
+	/**
+	 * Start an avatar-to-avatar voice call with another user
+	 */
+	static void startCall(const LLUUID& id);
+
 	/**
 	 * Start conference chat with the given avatars.
 	 */
@@ -96,6 +101,11 @@ class LLAvatarActions
 	 */
 	static bool isBlocked(const LLUUID& id);
 
+	/**
+	 * Return true if the avatar is in a P2P voice call with a given user
+	 */
+	static bool isCalling(const LLUUID &id);
+
 	/**
 	 * Invite avatar to a group.
 	 */	
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index b56e8d1ec2546009a1dcf2d893cec0b5680dc9ef..0ee3e784095094fef1f601fb2824973bd14431e7 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -44,6 +44,7 @@
 
 #include "llcachename.h"
 #include "llagentdata.h"
+#include "llimfloater.h"
 
 #define MENU_ITEM_VIEW_PROFILE 0
 #define MENU_ITEM_SEND_IM 1
@@ -354,7 +355,11 @@ void LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked(const LLSD& userdata)
 		name.append(" ");
 		name.append(getLastName());
 
-		gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+		LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+		if (session_id != LLUUID::null)
+		{
+			LLIMFloater::show(session_id);
+		}
 	}
 	else if (level == "add")
 	{
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 7b2dc02864f5a4a2e33b77fd1da9133d0cb6ddf1..bb03f47f46f4207e8c8668e1822787b45b36ba1c 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -65,6 +65,20 @@ void LLAvatarList::toggleIcons()
 	}
 }
 
+void LLAvatarList::setSpeakingIndicatorsVisible(bool visible)
+{
+	// Save the new value for new items to use.
+	mShowSpeakingIndicator = visible;
+	
+	// Show/hide icons for all existing items.
+	std::vector<LLPanel*> items;
+	getItems(items);
+	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+	{
+		static_cast<LLAvatarListItem*>(*it)->setSpeakingIndicatorVisible(mShowSpeakingIndicator);
+	}
+}
+
 static bool findInsensitive(std::string haystack, const std::string& needle_upper)
 {
     LLStringUtil::toUpper(haystack);
@@ -81,6 +95,7 @@ LLAvatarList::Params::Params()
 , show_last_interaction_time("show_last_interaction_time", false)
 , show_info_btn("show_info_btn", true)
 , show_profile_btn("show_profile_btn", true)
+, show_speaking_indicator("show_speaking_indicator", true)
 {
 }
 
@@ -94,6 +109,7 @@ LLAvatarList::LLAvatarList(const Params& p)
 , mShowIcons(true)
 , mShowInfoBtn(p.show_info_btn)
 , mShowProfileBtn(p.show_profile_btn)
+, mShowSpeakingIndicator(p.show_speaking_indicator)
 {
 	setCommitOnSelectionChange(true);
 
@@ -239,11 +255,46 @@ void LLAvatarList::refresh()
 	bool dirty = add_limit_exceeded || (have_filter && !have_names);
 	setDirty(dirty);
 
+	// Refreshed all items, lets send refresh_complete signal.
+	if(!dirty)
+	{
+		std::vector<LLSD> cur_values;
+		getValues(cur_values);
+		mRefreshCompleteSignal(this, LLSD((S32)cur_values.size()));
+	}
+
 	// Commit if we've added/removed items.
 	if (modified)
 		onCommit();
 }
 
+bool LLAvatarList::filterHasMatches()
+{
+	uuid_vector_t values = getIDs();
+
+	for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++)
+	{
+		std::string name;
+		const LLUUID& buddy_id = *it;
+		BOOL have_name = gCacheName->getFullName(buddy_id, name);
+
+		// If name has not been loaded yet we consider it as a match.
+		// When the name will be loaded the filter will be applied again(in refresh()).
+
+		if (have_name && !findInsensitive(name, mNameFilter))
+		{
+			continue;
+		}
+
+		return true;
+	}
+	return false;
+}
+
+boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb)
+{
+	return mRefreshCompleteSignal.connect(cb);
+}
 
 void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
 {
@@ -260,6 +311,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
 	item->setAvatarIconVisible(mShowIcons);
 	item->setShowInfoBtn(mShowInfoBtn);
 	item->setShowProfileBtn(mShowProfileBtn);
+	item->setSpeakingIndicatorVisible(mShowSpeakingIndicator);
 
 	addItem(item, id, pos);
 }
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 51d3760d3937169ca6ed50e1c74644f65919a110..490f93e5015e2e96b2118a9d4b5374d105435422 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -61,6 +61,7 @@ class LLAvatarList : public LLFlatListView
 		Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class
 		Optional<bool> show_info_btn;
 		Optional<bool> show_profile_btn;
+		Optional<bool> show_speaking_indicator;
 		Params();
 	};
 
@@ -76,12 +77,18 @@ class LLAvatarList : public LLFlatListView
 	void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; }
 
 	void toggleIcons();
+	void setSpeakingIndicatorsVisible(bool visible);
 	void sortByName();
 	void setShowIcons(std::string param_name);
 	bool getIconsVisible() const { return mShowIcons; }
 	const std::string getIconParamName() const{return mIconParamName;}
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 
+	// Return true if filter has at least one match.
+	bool filterHasMatches();
+
+	boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
+
 protected:
 	void refresh();
 
@@ -100,6 +107,7 @@ class LLAvatarList : public LLFlatListView
 	bool mShowIcons;
 	bool mShowInfoBtn;
 	bool mShowProfileBtn;
+	bool mShowSpeakingIndicator;
 
 	LLTimer*				mLITUpdateTimer; // last interaction time update timer
 	std::string				mIconParamName;
@@ -107,6 +115,8 @@ class LLAvatarList : public LLFlatListView
 	uuid_vector_t			mIDs;
 
 	LLAvatarListItem::ContextMenu* mContextMenu;
+
+	commit_signal_t mRefreshCompleteSignal;
 };
 
 /** Abstract comparator for avatar items */
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index a7ac14c94862be1ce621247c6bbfd07fed892a7c..7df278d887bf6815d3a17926c3af569eef3a464a 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -62,6 +62,7 @@ LLAvatarListItem::LLAvatarListItem()
 	mIconWidth = mAvatarName->getRect().mLeft - mAvatarIcon->getRect().mLeft;
 	mInfoBtnWidth = mInfoBtn->getRect().mRight - mSpeakingIndicator->getRect().mRight;
 	mProfileBtnWidth = mProfileBtn->getRect().mRight - mInfoBtn->getRect().mRight;
+	mSpeakingIndicatorWidth = mSpeakingIndicator->getRect().mRight - mAvatarName->getRect().mRight; 
 }
 
 LLAvatarListItem::~LLAvatarListItem()
@@ -230,6 +231,18 @@ void LLAvatarListItem::setShowProfileBtn(bool show)
 	mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
 }
 
+void LLAvatarListItem::setSpeakingIndicatorVisible(bool visible)
+{
+	// Already done? Then do nothing.
+	if (mSpeakingIndicator->getVisible() == (BOOL)visible)
+		return;
+	mSpeakingIndicator->setVisible(visible);
+	S32 width_delta = visible ? - mSpeakingIndicatorWidth : mSpeakingIndicatorWidth;
+
+	//Reshaping avatar name
+	mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
+}
+
 void LLAvatarListItem::setAvatarIconVisible(bool visible)
 {
 	// Already done? Then do nothing.
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index cd7a85c3dc5b4ca746df79c05067e027863b902d..d379797a464b8c47206709640e39863d76ca086f 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -65,8 +65,9 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver
 	void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
 	void setLastInteractionTime(const std::string& val);
 	//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
-	void setShowProfileBtn(bool hide);
-	void setShowInfoBtn(bool hide);
+	void setShowProfileBtn(bool show);
+	void setShowInfoBtn(bool show);
+	void setSpeakingIndicatorVisible(bool visible);
 	void setAvatarIconVisible(bool visible);
 	
 	const LLUUID& getAvatarId() const;
@@ -109,6 +110,7 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver
 	S32	 mIconWidth; // icon width + padding
 	S32  mInfoBtnWidth; //info btn width + padding
 	S32  mProfileBtnWidth; //profile btn width + padding
+	S32  mSpeakingIndicatorWidth; //speaking indicator width + padding
 };
 
 #endif //LL_LLAVATARLISTITEM_H
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index ddcee5f453699def649897cd9264f8160a03c1a6..832694873f995f1749f2890a04aa6f2cae1c80cb 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -47,10 +47,9 @@
 LLBottomTray::LLBottomTray(const LLSD&)
 :	mChicletPanel(NULL),
 	mSysWell(NULL),
-	mTalkBtn(NULL),
+	mSpeakBtn(NULL),
 	mNearbyChatBar(NULL),
 	mToolbarStack(NULL)
-
 {
 	mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 
@@ -71,7 +70,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	//this is to fix a crash that occurs because LLBottomTray is a singleton
 	//and thus is deleted at the end of the viewers lifetime, but to be cleanly
 	//destroyed LLBottomTray requires some subsystems that are long gone
-	LLUI::getRootView()->addChild(this);
+	//LLUI::getRootView()->addChild(this);
 
 	// Necessary for focus movement among child controls
 	setFocusRoot(TRUE);
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index a28f1e42ecda31df5efab4c8c21597471380acf4..02588a1975f09822182b70ead37219df08b96366 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -43,7 +43,7 @@ class LLChicletPanel;
 class LLLineEditor;
 class LLLayoutStack;
 class LLNotificationChiclet;
-class LLTalkButton;
+class LLSpeakButton;
 class LLNearbyChatBar;
 class LLIMChiclet;
 
@@ -110,7 +110,7 @@ class LLBottomTray
 
 	LLChicletPanel* 	mChicletPanel;
 	LLNotificationChiclet* 	mSysWell;
-	LLTalkButton* 		mTalkBtn;
+	LLSpeakButton* 		mSpeakBtn;
 	LLNearbyChatBar*	mNearbyChatBar;
 	LLLayoutStack*		mToolbarStack;
 	LLMenuGL*			mBottomTrayContextMenu;
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index e561507e69bc5324c317103b12056dac9ab9f37d..2ccd6b7d350555d5fce84c7f03d6dd31d6a95cb0 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -132,8 +132,7 @@ class LLChatHistoryHeader: public LLPanel
 		menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		mPopupMenuHandleObject = menu->getHandle();
 
-		LLPanel* visible_panel = getChild<LLPanel>("im_header");
-		visible_panel->setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4));
+		setMouseDownCallback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, _2, _3, _4));
 
 		return LLPanel::postBuild();
 	}
@@ -290,7 +289,11 @@ mMessageSeparatorFilename(p.message_separator),
 mLeftTextPad(p.left_text_pad),
 mRightTextPad(p.right_text_pad),
 mLeftWidgetPad(p.left_widget_pad),
-mRightWidgetPad(p.right_widget_pad)
+mRightWidgetPad(p.right_widget_pad),
+mTopSeparatorPad(p.top_separator_pad),
+mBottomSeparatorPad(p.bottom_separator_pad),
+mTopHeaderPad(p.top_header_pad),
+mBottomHeaderPad(p.bottom_header_pad)
 {
 }
 
@@ -332,16 +335,30 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty
 	LLView* view = NULL;
 	std::string view_text;
 
+	LLInlineViewSegment::Params p;
+	p.force_newline = true;
+	p.left_pad = mLeftWidgetPad;
+	p.right_pad = mRightWidgetPad;
+
 	if (mLastFromName == chat.mFromName)
 	{
 		view = getSeparator();
 		view_text = "\n";
+		p.top_pad = mTopSeparatorPad;
+		p.bottom_pad = mBottomSeparatorPad;
 	}
 	else
 	{
 		view = getHeader(chat);
 		view_text = chat.mFromName + MESSAGE_USERNAME_DATE_SEPARATOR + formatCurrentTime() + '\n';
+		if (getText().size() == 0)
+			p.top_pad = 0;
+		else
+			p.top_pad = mTopHeaderPad;
+		p.bottom_pad = mBottomHeaderPad;
 	}
+	p.view = view;
+
 	//Prepare the rect for the view
 	LLRect target_rect = getDocumentView()->getRect();
 	// squeeze down the widget by subtracting padding off left and right
@@ -350,12 +367,6 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty
 	view->reshape(target_rect.getWidth(), view->getRect().getHeight());
 	view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
 
-	LLInlineViewSegment::Params p;
-	p.view = view;
-	p.force_newline = true;
-	p.left_pad = mLeftWidgetPad;
-	p.right_pad = mRightWidgetPad;
-
 	appendWidget(p, view_text, false);
 
 	//Append the text message
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index 92dcfdd958265b23a8fd86289a3420fba9543773..3789ebff4e94273e56fd4c2de55c5a9747790ac4 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -54,6 +54,14 @@ class LLChatHistory : public LLTextEditor
 			Optional<S32>			left_widget_pad;
 			//Widget right padding from the scroll rect
 			Optional<S32>			right_widget_pad;
+			//Separator top padding
+			Optional<S32>			top_separator_pad;
+			//Separator bottom padding
+			Optional<S32>			bottom_separator_pad;
+			//Header top padding
+			Optional<S32>			top_header_pad;
+			//Header bottom padding
+			Optional<S32>			bottom_header_pad;
 
 			Params()
 			:	message_header("message_header"),
@@ -61,7 +69,11 @@ class LLChatHistory : public LLTextEditor
 				left_text_pad("left_text_pad"),
 				right_text_pad("right_text_pad"),
 				left_widget_pad("left_widget_pad"),
-				right_widget_pad("right_widget_pad")
+				right_widget_pad("right_widget_pad"),
+				top_separator_pad("top_separator_pad"),
+				bottom_separator_pad("bottom_separator_pad"),
+				top_header_pad("top_header_pad"),
+				bottom_header_pad("bottom_header_pad")
 				{
 				}
 
@@ -105,9 +117,16 @@ class LLChatHistory : public LLTextEditor
 		std::string mLastFromName;
 		std::string mMessageHeaderFilename;
 		std::string mMessageSeparatorFilename;
+
 		S32 mLeftTextPad;
 		S32 mRightTextPad;
+
 		S32 mLeftWidgetPad;
 		S32 mRightWidgetPad;
+
+		S32 mTopSeparatorPad;
+		S32 mBottomSeparatorPad;
+		S32 mTopHeaderPad;
+		S32 mBottomHeaderPad;
 };
 #endif /* LLCHATHISTORY_H_ */
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index bad61101c1bceda1f056cc080ed7a64bb81a4e82..c200a97058826779c1acd96c6c1aa01246819384 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -51,10 +51,9 @@
 #include "lltransientfloatermgr.h"
 
 static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel");
-static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk");
-static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification");
-static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p");
-static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group");
+static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notification");
+static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");
+static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");
 
 S32 LLNotificationChiclet::mUreadSystemNotifications = 0;
 
@@ -198,9 +197,38 @@ void LLChiclet::setValue(const LLSD& value)
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-LLIMChiclet::LLIMChiclet(const LLChiclet::Params& p)
+LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 : LLChiclet(p)
+, mNewMessagesIcon(NULL)
+, mCounterCtrl(NULL)
 {
+	// initialize an overlay icon for new messages
+	LLIconCtrl::Params icon_params;
+	icon_params.visible = false;
+	icon_params.image = LLUI::getUIImage(p.new_messages_icon_name);
+	mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	// adjust size and position of an icon
+	LLRect chiclet_rect = p.rect;
+	LLRect overlay_icon_rect = LLRect(chiclet_rect.getWidth()/2, chiclet_rect.mTop, chiclet_rect.mRight, chiclet_rect.getHeight()/2); 
+	// shift an icon a little bit to the right and up corner of a chiclet
+	overlay_icon_rect.translate(overlay_icon_rect.getWidth()/5, overlay_icon_rect.getHeight()/5);
+	mNewMessagesIcon->setRect(overlay_icon_rect);
+	addChild(mNewMessagesIcon);
+
+	setShowCounter(false);
+}
+
+void LLIMChiclet::setShowNewMessagesIcon(bool show)
+{
+	if(mNewMessagesIcon)
+	{
+		mNewMessagesIcon->setVisible(show);
+	}
+}
+
+bool LLIMChiclet::getShowNewMessagesIcon()
+{
+	return mNewMessagesIcon->getVisible();
 }
 
 void LLIMChiclet::onMouseDown()
@@ -218,8 +246,6 @@ BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
 void LLIMChiclet::draw()
 {
 	LLUICtrl::draw();
-
-	gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.0f,0.0f,0.0f,1.f), FALSE);
 }
 
 // static
@@ -274,7 +300,7 @@ LLIMP2PChiclet::Params::Params()
 , show_speaker("show_speaker")
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -293,6 +319,7 @@ LLIMP2PChiclet::Params::Params()
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
 	unread_notifications.mouse_opaque(false);
+	unread_notifications.visible(false);
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -303,7 +330,6 @@ LLIMP2PChiclet::Params::Params()
 LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
@@ -322,28 +348,14 @@ LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
 void LLIMP2PChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLIMP2PChiclet::getRequiredRect()
@@ -455,9 +467,10 @@ LLAdHocChiclet::Params::Params()
 , unread_notifications("unread_notifications")
 , speaker("speaker")
 , show_speaker("show_speaker")
+, avatar_icon_color("avatar_icon_color", LLColor4::green)
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -476,6 +489,8 @@ LLAdHocChiclet::Params::Params()
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
 	unread_notifications.mouse_opaque(false);
+	unread_notifications.visible(false);
+
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -486,12 +501,13 @@ LLAdHocChiclet::Params::Params()
 LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
 	mChicletIconCtrl = LLUICtrlFactory::create<LLChicletAvatarIconCtrl>(avatar_params);
+	//Make the avatar modified
+	mChicletIconCtrl->setColor(p.avatar_icon_color);
 	addChild(mChicletIconCtrl);
 
 	LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications;
@@ -505,6 +521,7 @@ LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
@@ -518,22 +535,7 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id)
 void LLAdHocChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLAdHocChiclet::getRequiredRect()
@@ -562,7 +564,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
 LLIMGroupChiclet::Params::Params()
 : group_icon("group_icon")
 {
-	rect(LLRect(0, 25, 45, 0));
+	rect(LLRect(0, 25, 25, 0));
 
 	group_icon.name("group_icon");
 	
@@ -578,6 +580,7 @@ LLIMGroupChiclet::Params::Params()
 	unread_notifications.font_halign(LLFontGL::HCENTER);
 	unread_notifications.v_pad(5);
 	unread_notifications.text_color(LLColor4::white);
+	unread_notifications.visible(false);
 
 	speaker.name("speaker");
 	speaker.rect(LLRect(45, 25, 65, 0));
@@ -589,7 +592,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 : LLIMChiclet(p)
 , LLGroupMgrObserver(LLUUID::null)
 , mChicletIconCtrl(NULL)
-, mCounterCtrl(NULL)
 , mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
@@ -608,6 +610,7 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 	mSpeakerCtrl = LLUICtrlFactory::create<LLChicletSpeakerCtrl>(speaker_params);
 	addChild(mSpeakerCtrl);
 
+	sendChildToFront(mNewMessagesIcon);
 	setShowSpeaker(p.show_speaker);
 }
 
@@ -619,22 +622,7 @@ LLIMGroupChiclet::~LLIMGroupChiclet()
 void LLIMGroupChiclet::setCounter(S32 counter)
 {
 	mCounterCtrl->setCounter(counter);
-
-	if(getShowCounter())
-	{
-		LLRect counter_rect = mCounterCtrl->getRect();
-		LLRect required_rect = mCounterCtrl->getRequiredRect();
-		bool needs_resize = required_rect.getWidth() != counter_rect.getWidth();
-
-		if(needs_resize)
-		{
-			counter_rect.mRight = counter_rect.mLeft + required_rect.getWidth();
-			mCounterCtrl->reshape(counter_rect.getWidth(), counter_rect.getHeight());
-			mCounterCtrl->setRect(counter_rect);
-
-			onChicletSizeChanged();
-		}
-	}
+	setShowNewMessagesIcon(counter);
 }
 
 LLRect LLIMGroupChiclet::getRequiredRect()
@@ -824,19 +812,29 @@ LLChicletPanel::LLChicletPanel(const Params&p)
 
 LLChicletPanel::~LLChicletPanel()
 {
+	LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton);
+	LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton);
 
 }
 
 void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
 	
 	LLUUID session_id = data["session_id"].asUUID();
+	S32 unread = data["num_unread"].asInteger();
+
+	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+	if (im_floater && im_floater->getVisible())
+	{
+		unread = 0;
+	}
+
 	std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(session_id);
 	std::list<LLChiclet *>::iterator iter;
 	for (iter = chiclets.begin(); iter != chiclets.end(); iter++) {
 		LLChiclet* chiclet = *iter;
 		if (chiclet != NULL)
 		{
-			chiclet->setCounter(data["num_unread"].asInteger());
+			chiclet->setCounter(unread);
 		}
 	    else
 	    {
@@ -1250,152 +1248,6 @@ bool LLChicletPanel::isAnyIMFloaterDoked()
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-// *TODO Vadim: Move this out of llchiclet.cpp.
-
-LLTalkButton::Params::Params()
- : speak_button("speak_button")
- , show_button("show_button")
- , monitor("monitor")
-{
-	// *TODO Vadim: move hardcoded labels (!) and other params to XUI.
-	speak_button.name("left");
-	speak_button.label("Speak");
-	speak_button.label_selected("Speak");
-	speak_button.font(LLFontGL::getFontSansSerifSmall());
-	speak_button.tab_stop(false);
-	speak_button.is_toggle(true);
-	speak_button.picture_style(true);
-	// Use default button art. JC
-	//speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected"));
-	//speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off"));
-
-	show_button.name("right");
-	show_button.label(LLStringUtil::null);
-	show_button.rect(LLRect(0, 0, 20, 0));
-	show_button.tab_stop(false);
-	show_button.is_toggle(true);
-	show_button.picture_style(true);
-	show_button.image_selected(LLUI::getUIImage("ComboButton_Selected"));
-	show_button.image_unselected(LLUI::getUIImage("ComboButton_Off"));
-
-	monitor.name("monitor");
-	// *TODO: Make this data driven.
-	monitor.rect(LLRect(0, 18, 18, 0));
-}
-
-LLTalkButton::LLTalkButton(const Params& p)
-: LLUICtrl(p)
-, mPrivateCallPanel(NULL)
-, mOutputMonitor(NULL)
-, mSpeakBtn(NULL)
-, mShowBtn(NULL)
-{
-	LLRect rect = p.rect();
-	LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0);
-	LLRect show_rect = p.show_button.rect();
-	show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0);
-
-	speak_rect.mRight -= show_rect.getWidth();
-	show_rect.mLeft = speak_rect.getWidth();
-	show_rect.mRight = rect.getWidth();
-
-	LLButton::Params speak_params = p.speak_button;
-	speak_params.rect(speak_rect);
-	mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params);
-	addChild(mSpeakBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
-
-	mSpeakBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_SpeakBtn, this));
-	mSpeakBtn->setToggleState(FALSE);
-
-	LLButton::Params show_params = p.show_button;
-	show_params.rect(show_rect);
-	mShowBtn = LLUICtrlFactory::create<LLButton>(show_params);
-	addChild(mShowBtn);
-	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn);
-
-	mShowBtn->setClickedCallback(boost::bind(&LLTalkButton::onClick_ShowBtn, this));
-	mShowBtn->setToggleState(FALSE);
-
-	static const S32 MONITOR_RIGHT_PAD = 2;
-
-	LLRect monitor_rect = p.monitor.rect();
-	S32 monitor_height = monitor_rect.getHeight();
-	monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD;
-	monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2);
-	monitor_rect.mTop = monitor_rect.mBottom + monitor_height;
-
-	LLOutputMonitorCtrl::Params monitor_params = p.monitor;
-	monitor_params.draw_border(false);
-	monitor_params.rect(monitor_rect);
-	monitor_params.auto_update(true);
-	monitor_params.speaker_id(gAgentID);
-	mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params);
-	mSpeakBtn->addChild(mOutputMonitor);
-
-	// never show "muted" because you can't mute yourself
-	mOutputMonitor->setIsMuted(false);
-}
-
-LLTalkButton::~LLTalkButton()
-{
-}
-
-void LLTalkButton::setSpeakBtnToggleState(bool state)
-{
-	mSpeakBtn->setToggleState(state);
-}
-
-void LLTalkButton::onClick_SpeakBtn()
-{
-	bool speaking = mSpeakBtn->getToggleState();
-	gVoiceClient->setUserPTTState(speaking);
-}
-
-void LLTalkButton::onClick_ShowBtn()
-{
-	if(!mShowBtn->getToggleState())
-	{
-		mPrivateCallPanel->onClickClose(mPrivateCallPanel);
-		delete mPrivateCallPanel;
-		mPrivateCallPanel = NULL;
-		mShowBtn->setToggleState(FALSE);
-		return;
-	}
-
-	S32 x = mSpeakBtn->getRect().mLeft;
-	S32 y = 0;
-
-	localPointToScreen(x, y, &x, &y);
-
-	mPrivateCallPanel = new LLVoiceControlPanel;
-	getRootView()->addChild(mPrivateCallPanel);
-
-	y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight();
-
-	LLRect rect;
-	rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight());
-	mPrivateCallPanel->setRect(rect);
-
-
-	LLAvatarListItem* item = new LLAvatarListItem();
-	item->showLastInteractionTime(false);
-	item->showInfoBtn(true);
-	item->showSpeakingIndicator(true);
-	item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE);
-
-	mPrivateCallPanel->addItem(item);
-	mPrivateCallPanel->setVisible(TRUE);
-	mPrivateCallPanel->setFrontmost(TRUE);
-
-	mShowBtn->setToggleState(TRUE);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
 LLChicletNotificationCounterCtrl::LLChicletNotificationCounterCtrl(const Params& p)
  : LLTextBox(p)
  , mCounter(0)
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 6eefd9829f1139483cb392970e00271a0f084671..b50702205cda88abc1759ad9962df512a2cf568e 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -278,6 +278,14 @@ class LLIMChiclet : public LLChiclet
 		TYPE_GROUP,
 		TYPE_AD_HOC
 	};
+	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	{
+		Optional<std::string> new_messages_icon_name;
+
+		Params() : new_messages_icon_name("new_messages_icon_name", "icn_voice-localchat.tga")
+		{}
+	};
+
 	
 	/*virtual*/ ~LLIMChiclet() {};
 
@@ -307,6 +315,16 @@ class LLIMChiclet : public LLChiclet
 	*/
 	virtual bool getShowSpeaker() {return mShowSpeaker;};
 
+	/*
+	* Shows/hides overlay icon concerning new unread messages.
+	*/
+	virtual void setShowNewMessagesIcon(bool show);
+
+	/*
+	* Returns visibility of overlay icon concerning new unread messages.
+	*/
+	virtual bool getShowNewMessagesIcon();
+
 	/*
 	 * Draws border around chiclet.
 	*/
@@ -335,7 +353,7 @@ class LLIMChiclet : public LLChiclet
 
 protected:
 
-	LLIMChiclet(const LLChiclet::Params& p);
+	LLIMChiclet(const LLIMChiclet::Params& p);
 
 	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
 
@@ -343,6 +361,9 @@ class LLIMChiclet : public LLChiclet
 
 	bool mShowSpeaker;
 
+	LLIconCtrl* mNewMessagesIcon;
+	LLChicletNotificationCounterCtrl* mCounterCtrl;
+
 	/** the id of another participant, either an avatar id or a group id*/
 	LLUUID mOtherParticipantId;
 
@@ -374,7 +395,7 @@ class LLIMChiclet : public LLChiclet
 class LLIMP2PChiclet : public LLIMChiclet
 {
 public:
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
 
@@ -436,7 +457,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
@@ -447,7 +467,7 @@ class LLIMP2PChiclet : public LLIMChiclet
 class LLAdHocChiclet : public LLIMChiclet
 {
 public:
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
 
@@ -457,6 +477,8 @@ class LLAdHocChiclet : public LLIMChiclet
 
 		Optional<bool>	show_speaker;
 
+		Optional<LLColor4>	avatar_icon_color;
+
 		Params();
 	};
 
@@ -495,7 +517,6 @@ class LLAdHocChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
@@ -507,7 +528,7 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 {
 public:
 
-	struct Params : public LLInitParam::Block<Params, LLChiclet::Params>
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
 	{
 		Optional<LLChicletGroupIconCtrl::Params> group_icon;
 
@@ -576,7 +597,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 private:
 
 	LLChicletGroupIconCtrl* mChicletIconCtrl;
-	LLChicletNotificationCounterCtrl* mCounterCtrl;
 	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
@@ -833,42 +853,6 @@ class LLChicletPanel : public LLPanel
 	bool mShowControls;
 };
 
-/*
- * Button displaying voice chat status. Displays voice chat options When clicked.
-*/
-class LLTalkButton : public LLUICtrl
-{
-public:
-
-	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>
-	{
-		Optional<LLButton::Params>	speak_button,
-									show_button;
-
-		Optional<LLOutputMonitorCtrl::Params> monitor;
-
-		Params();
-	};
-
-	/*virtual*/ ~LLTalkButton();
-
-	void setSpeakBtnToggleState(bool state);
-
-protected:
-	friend class LLUICtrlFactory;
-	LLTalkButton(const Params& p);
-
-	void onClick_SpeakBtn();
-
-	void onClick_ShowBtn();
-
-private:
-	LLButton*	mSpeakBtn;
-	LLButton*	mShowBtn;
-	LLVoiceControlPanel* mPrivateCallPanel;
-	LLOutputMonitorCtrl* mOutputMonitor;
-};
-
 template<class T> 
 T* LLChicletPanel::createChiclet(const LLUUID& session_id, S32 index)
 {
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 7b75c77a1e35577680c07e2641b34bcbea91edeb..442e9ab27baa7a91b98d569826379c4dcf8d401a 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -228,7 +228,8 @@ void LLColorSwatchCtrl::draw()
 	{
 		if (!mFallbackImageName.empty())
 		{
-			LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, 
+				LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 			if( fallback_image->getComponents() == 4 )
 			{	
 				gl_rect_2d_checkerboard( interior );
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index c4bfd719991dffdbbbe1f732dd8b4b03ba87da72..319cbf8209c0b2193b8ea0306c486ba4810143d8 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -76,8 +76,15 @@ class LLCurrencyUIManager::Impl
 	bool			mUserEnteredCurrencyBuy;
 	
 	// from website
-	bool			mSiteCurrencyEstimated;
-	S32				mSiteCurrencyEstimatedCost;
+
+	// pre-viewer 2.0, the server returned estimates as an
+	// integer US cents value, e.g., "1000" for $10.00
+	// post-viewer 2.0, the server may also return estimates
+	// as a string with currency embedded, e.g., "10.00 Euros"
+	bool			mUSDCurrencyEstimated;
+	S32				mUSDCurrencyEstimatedCost;
+	bool			mLocalCurrencyEstimated;
+	std::string		mLocalCurrencyEstimatedCost;
 	std::string		mSiteConfirm;
 	
 	bool			mBought;
@@ -101,6 +108,10 @@ class LLCurrencyUIManager::Impl
 	
 	void startCurrencyBuy(const std::string& password);
 	void finishCurrencyBuy();
+
+	void clearEstimate();
+	bool hasEstimate() const;
+	std::string getLocalEstimate() const;
 	
 	void startTransaction(TransactionType type,
 		const char* method, LLXMLRPCValue params);
@@ -126,12 +137,11 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog)
 	mError(false),
 	mUserCurrencyBuy(2000), // note, this is a default, real value set in llfloaterbuycurrency.cpp
 	mUserEnteredCurrencyBuy(false),
-	mSiteCurrencyEstimated(false),
-	mSiteCurrencyEstimatedCost(0),
 	mBought(false),
 	mTransactionType(TransactionNone), mTransaction(0),
 	mCurrencyChanged(false)
 {
+	clearEstimate();
 }
 
 LLCurrencyUIManager::Impl::~Impl()
@@ -141,14 +151,13 @@ LLCurrencyUIManager::Impl::~Impl()
 
 void LLCurrencyUIManager::Impl::updateCurrencyInfo()
 {
-	mSiteCurrencyEstimated = false;
-	mSiteCurrencyEstimatedCost = 0;
+	clearEstimate();
 	mBought = false;
 	mCurrencyChanged = false;
 
 	if (mUserCurrencyBuy == 0)
 	{
-		mSiteCurrencyEstimated = true;
+		mLocalCurrencyEstimated = true;
 		return;
 	}
 	
@@ -185,9 +194,21 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo()
 	}
 	
 	LLXMLRPCValue currency = result["currency"];
-	mSiteCurrencyEstimated = true;
-	mSiteCurrencyEstimatedCost = currency["estimatedCost"].asInt();
-	
+
+	// old XML-RPC server: estimatedCost = value in US cents
+	mUSDCurrencyEstimated = currency["estimatedCost"].isValid();
+	if (mUSDCurrencyEstimated)
+	{
+		mUSDCurrencyEstimatedCost = currency["estimatedCost"].asInt();
+	}
+
+	// newer XML-RPC server: estimatedLocalCost = local currency string
+	mLocalCurrencyEstimated = currency["estimatedLocalCost"].isValid();
+	if (mLocalCurrencyEstimated)
+	{
+		mLocalCurrencyEstimatedCost = currency["estimatedLocalCost"].asString();
+	}
+
 	S32 newCurrencyBuy = currency["currencyBuy"].asInt();
 	if (newCurrencyBuy != mUserCurrencyBuy)
 	{
@@ -200,17 +221,20 @@ void LLCurrencyUIManager::Impl::finishCurrencyInfo()
 
 void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password)
 {
-	mSiteCurrencyEstimated = false;
-	mSiteCurrencyEstimatedCost = 0;
-	mCurrencyChanged = false;
-	
 	LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
 	keywordArgs.appendString("agentId", gAgent.getID().asString());
 	keywordArgs.appendString(
 		"secureSessionId",
 		gAgent.getSecureSessionID().asString());
 	keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy);
-	keywordArgs.appendInt("estimatedCost", mSiteCurrencyEstimatedCost);
+	if (mUSDCurrencyEstimated)
+	{
+		keywordArgs.appendInt("estimatedCost", mUSDCurrencyEstimatedCost);
+	}
+	if (mLocalCurrencyEstimated)
+	{
+		keywordArgs.appendString("estimatedLocalCost", mLocalCurrencyEstimatedCost);
+	}
 	keywordArgs.appendString("confirm", mSiteConfirm);
 	if (!password.empty())
 	{
@@ -226,6 +250,9 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password)
 	params.append(keywordArgs);
 
 	startTransaction(TransactionBuy, "buyCurrency", params);
+
+	clearEstimate();
+	mCurrencyChanged = false;	
 }
 
 void LLCurrencyUIManager::Impl::finishCurrencyBuy()
@@ -270,6 +297,34 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
 	clearError();
 }
 
+void LLCurrencyUIManager::Impl::clearEstimate()
+{
+	mUSDCurrencyEstimated = false;
+	mUSDCurrencyEstimatedCost = 0;
+	mLocalCurrencyEstimated = false;
+	mLocalCurrencyEstimatedCost = "0";
+}
+
+bool LLCurrencyUIManager::Impl::hasEstimate() const
+{
+	return (mUSDCurrencyEstimated || mLocalCurrencyEstimated);
+}
+
+std::string LLCurrencyUIManager::Impl::getLocalEstimate() const
+{
+	if (mLocalCurrencyEstimated)
+	{
+		// we have the new-style local currency string
+		return mLocalCurrencyEstimatedCost;
+	}
+	if (mUSDCurrencyEstimated)
+	{
+		// we have the old-style USD-specific value
+		return "US$ " + llformat("%#.2f", mUSDCurrencyEstimatedCost / 100.0);
+	}
+	return "";
+}
+
 bool LLCurrencyUIManager::Impl::checkTransaction()
 {
 	if (!mTransaction)
@@ -342,8 +397,8 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value)
 
 	mUserCurrencyBuy = value;
 	
-	if (mSiteCurrencyEstimated) {
-		mSiteCurrencyEstimated = false;
+	if (hasEstimate()) {
+		clearEstimate();
 		//cannot just simply refresh the whole UI, as the edit field will
 		// get reset and the cursor will change...
 		
@@ -406,8 +461,8 @@ void LLCurrencyUIManager::Impl::updateUI()
 		}
 	}
 
-	mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", "US$ " + llformat("%#.2f", mSiteCurrencyEstimatedCost / 100.0));
-	mPanel.childSetVisible("currency_est", mSiteCurrencyEstimated && mUserCurrencyBuy > 0);
+	mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", getLocalEstimate());
+	mPanel.childSetVisible("currency_est", hasEstimate() && mUserCurrencyBuy > 0);
 
 	if (mPanel.childIsEnabled("buy_btn")
 		||mPanel.childIsVisible("currency_est")
@@ -448,18 +503,32 @@ void LLCurrencyUIManager::setZeroMessage(const std::string& message)
 	impl.mZeroMessage = message;
 }
 
-void LLCurrencyUIManager::setEstimate(int amount)
+void LLCurrencyUIManager::setUSDEstimate(int amount)
+{
+	impl.mUSDCurrencyEstimatedCost = amount;
+	impl.mUSDCurrencyEstimated = true;
+	impl.updateUI();
+	
+	impl.mCurrencyChanged = false;
+}
+
+int LLCurrencyUIManager::getUSDEstimate()
+{
+	return impl.mUSDCurrencyEstimated ? impl.mUSDCurrencyEstimatedCost : 0;
+}
+
+void LLCurrencyUIManager::setLocalEstimate(const std::string &amount)
 {
-	impl.mSiteCurrencyEstimatedCost = amount;
-	impl.mSiteCurrencyEstimated = true;
+	impl.mLocalCurrencyEstimatedCost = amount;
+	impl.mLocalCurrencyEstimated = true;
 	impl.updateUI();
 	
 	impl.mCurrencyChanged = false;
 }
 
-int LLCurrencyUIManager::getEstimate()
+std::string LLCurrencyUIManager::getLocalEstimate() const
 {
-	return impl.mSiteCurrencyEstimated ? impl.mSiteCurrencyEstimatedCost : 0;
+	return impl.getLocalEstimate();
 }
 
 void LLCurrencyUIManager::prepare()
@@ -490,7 +559,7 @@ void LLCurrencyUIManager::buy(const std::string& buy_msg)
 
 	LLUIString msg = buy_msg;
 	msg.setArg("[LINDENS]", llformat("%d", impl.mUserCurrencyBuy));
-	msg.setArg("[LOCALAMOUNT]", "US$ " + llformat("%#.2f", impl.mSiteCurrencyEstimatedCost / 100.0));
+	msg.setArg("[LOCALAMOUNT]", getLocalEstimate());
 	LLConfirmationManager::confirm(impl.mSiteConfirm,
 								   msg,
 								   impl,
@@ -511,7 +580,7 @@ bool LLCurrencyUIManager::canCancel()
 bool LLCurrencyUIManager::canBuy()
 {
 	return impl.mTransactionType == Impl::TransactionNone
-		&& impl.mSiteCurrencyEstimated
+		&& impl.hasEstimate()
 		&& impl.mUserCurrencyBuy > 0;
 }
 
diff --git a/indra/newview/llcurrencyuimanager.h b/indra/newview/llcurrencyuimanager.h
index 93427aed7f1b8e922b445f120c009a86582f64f7..dfe027098d0bba05211a5f4849e599844ca1a257 100644
--- a/indra/newview/llcurrencyuimanager.h
+++ b/indra/newview/llcurrencyuimanager.h
@@ -57,11 +57,16 @@ class LLCurrencyUIManager
 	void setZeroMessage(const std::string& message);
 		// sets the gray message to show when zero
 		
-	void setEstimate(int);
-	int getEstimate();
+	void setUSDEstimate(int);  // deprecated in 2.0
+	int getUSDEstimate();      // deprecated in 2.0
 		// the amount in US$ * 100 (in otherwords, in cents)
 		// use set when you get this information from elsewhere
 		
+	void setLocalEstimate(const std::string &local_est);
+	std::string getLocalEstimate() const;
+		// the estimated cost in the user's local currency
+		// for example, "US$ 10.00" or "10.00 Euros"
+		
 	void prepare();
 		// call once after dialog is built, from postBuild()
 	void updateUI(bool show = true);
diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp
index 29e375c9faf9dea85316bd793b60453fee6d1351..7814e94dfd64cbcc23a76533aa58c5bdf03cd4c9 100644
--- a/indra/newview/lldebugmessagebox.cpp
+++ b/indra/newview/lldebugmessagebox.cpp
@@ -124,6 +124,7 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy
 
 	LLButton::Params p;
 	p.name(std::string("Animate"));
+	p.label(std::string("Animate"));
 	p.rect(LLRect(20, 45, 180, 25));
 	p.click_callback.function(boost::bind(&LLDebugVarMessageBox::onAnimateClicked, this, _2));
 	mAnimateButton = LLUICtrlFactory::create<LLButton>(p);
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 24a57cb0c1b27725652a549a18e2af790b02b089..f76ec396ac2e1afc382e305a938cf01b8e7abd43 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -45,7 +45,7 @@
 #include "llviewerwindow.h"
 #include "llappviewer.h"
 #include "llmemoryview.h"
-
+#include "llviewertexture.h"
 //
 // Globals
 //
@@ -55,12 +55,16 @@ LLDebugView* gDebugView = NULL;
 //
 // Methods
 //
+static LLDefaultChildRegistry::Register<LLDebugView> r("debug_view");
 
 LLDebugView::LLDebugView(const LLDebugView::Params& p)
 :	LLView(p)
+{}
+
+void LLDebugView::init()
 {
 	LLRect r;
-	LLRect rect(p.rect);
+	LLRect rect = getLocalRect();
 
 	r.set(10, rect.getHeight() - 100, rect.getWidth()/2, 100);
 	LLConsole::Params cp;
@@ -102,17 +106,29 @@ LLDebugView::LLDebugView(const LLDebugView::Params& p)
 	gTextureView = LLUICtrlFactory::create<LLTextureView>(tvp);
 	addChild(gTextureView);
 	//gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE);
-#if !LL_RELEASE_FOR_DOWNLOAD
-	r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100);
-	LLTextureSizeView::Params tsvp;
-	tsvp.name("gTextureSizeView");
-	tsvp.rect(r);
-	tsvp.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
-	tsvp.visible(false);
-	gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsvp);
-	addChild(gTextureSizeView);
-#endif
 
+	if(gAuditTexture)
+	{
+		r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100);
+		LLTextureSizeView::Params tsv ;
+		tsv.name("gTextureSizeView");
+		tsv.rect(r);
+		tsv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
+		tsv.visible(false);
+		gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsv);
+		addChild(gTextureSizeView);
+		gTextureSizeView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_SIZE) ;
+
+		r.set(150, rect.getHeight() - 50, 900 + LLViewerTexture::getTotalNumOfCategories() * 30, 100);
+		LLTextureSizeView::Params tcv ;
+		tcv.name("gTextureCategoryView");
+		tcv.rect(r);
+		tcv.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT);
+		tcv.visible(false);
+		gTextureCategoryView = LLUICtrlFactory::create<LLTextureSizeView>(tcv);
+		gTextureCategoryView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_CATEGORY);
+		addChild(gTextureCategoryView);
+	}
 }
 
 
@@ -122,5 +138,6 @@ LLDebugView::~LLDebugView()
 	gDebugView = NULL;
 	gTextureView = NULL;
 	gTextureSizeView = NULL;
+	gTextureCategoryView = NULL;
 }
 
diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h
index 9cf2a59a0a7c9de1ad7d74e3fba62ab61c902cd5..b17cdb43cdca670a0856c88b4ef1c0287bd517b3 100644
--- a/indra/newview/lldebugview.h
+++ b/indra/newview/lldebugview.h
@@ -60,6 +60,8 @@ class LLDebugView : public LLView
 	LLDebugView(const Params&);
 	~LLDebugView();
 
+	void init();
+
 	void setStatsVisible(BOOL visible);
 	
 	LLFastTimerView* mFastTimerView;
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 069155c25590b2c208b7eeaa2e71a339087cbd48..03a3f2b43de2434606adc8c2e7d16d4cb1b127d6 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -105,7 +105,7 @@ void LLDrawable::init()
 	mVObjp   = NULL;
 	// mFaces
 	mSpatialGroupp = NULL;
-	mVisible = 0;
+	mVisible = sCurVisible - 2;//invisible for the current frame and the last frame.
 	mRadius = 0.f;
 	
 	mGeneration = -1;
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index d8c34581d5db20381eb4b087981a81d0805f03ec..95ddacb722a5e0d39e3b1d6f0a8bb6416886c809 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -279,7 +279,7 @@ S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage)
 			 iter != face_list.end(); iter++)
 		{
 			LLFace *facep = *iter;
-			gGL.getTexUnit(stage)->bind(facep->getTexture());
+			gGL.getTexUnit(stage)->bind(facep->getTexture(), TRUE) ;
 			gGL.getTexUnit(0)->activate();
 			res += facep->renderIndexed();
 		}
@@ -475,17 +475,13 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
 	{
 		if (params.mTexture.notNull())
 		{
-			gGL.getTexUnit(0)->bind(params.mTexture.get());
+			gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
 			if (params.mTextureMatrix)
 			{
 				glMatrixMode(GL_TEXTURE);
 				glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
 				gPipeline.mTextureMatrixOps++;
 			}
-			if(params.mTexture.notNull())//will be removed.
-			{
-				params.mTexture->addTextureStats(params.mVSize);
-			}
 		}
 		else
 		{
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index a5a29dea7b2200d412f474e2d08223816fee440c..6d7736141494967cfee8e6aa2aab8f54e5aad250 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -219,7 +219,7 @@ void LLDrawPoolAlpha::render(S32 pass)
 		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
 		glColor4f(1,0,0,1);
 		LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);
-		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep) ;
+		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;
 		renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |
 							LLVertexBuffer::MAP_TEXCOORD0);
 	}
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index e74b488be9689c8a1a3032ec62115ff818e91f4f..4778865c4b89753c490d3ac266f52a1d70d7316c 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -144,7 +144,7 @@ void LLStandardBumpmap::restoreGL()
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = 
 			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id),
 										TRUE, 
-										FALSE, 
+										LLViewerTexture::BOOST_NONE, 
 										LLViewerTexture::LOD_TEXTURE,
 										0, 
 										0);																								
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 790e75cfaae1ac76057786322793a48af55acdaa..9dc22cddcd2a0587dc157956c3b7181d88450e47 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -72,7 +72,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
 	sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
 	sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
 	mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", 
-													TRUE, TRUE, 
+													TRUE, LLViewerTexture::BOOST_UI, 
 													LLViewerTexture::FETCHED_TEXTURE,
 													GL_ALPHA8, GL_ALPHA,
 													LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
@@ -81,7 +81,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
 	mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
 
 	m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", 
-													TRUE, TRUE, 
+													TRUE, LLViewerTexture::BOOST_UI, 
 													LLViewerTexture::FETCHED_TEXTURE,
 													GL_ALPHA8, GL_ALPHA,
 													LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 8d2cbc583c1df113161898aecc85adc49a3b0086..5521fb05a82fcf7b87ae500afca251e2b7105bb7 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -253,7 +253,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting)
 	LLGLState normalize(GL_NORMALIZE, TRUE);
 	
 	// Bind the texture for this tree.
-	gGL.getTexUnit(sDiffTex)->bind(mTexturep.get());
+	gGL.getTexUnit(sDiffTex)->bind(mTexturep.get(), TRUE);
 		
 	U32 indices_drawn = 0;
 
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 21e17cc2074c23101341c0d0a0c2371484ec40e0..107de934dfc312e8f978d799278cfadec4d391da 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -69,11 +69,11 @@ LLVector3 LLDrawPoolWater::sLightDir;
 LLDrawPoolWater::LLDrawPoolWater() :
 	LLFacePool(POOL_WATER)
 {
-	mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	gGL.getTexUnit(0)->bind(mHBTex[0]) ;
 	mHBTex[0]->setAddressMode(LLTexUnit::TAM_CLAMP);
 
-	mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	gGL.getTexUnit(0)->bind(mHBTex[1]);
 	mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
 
diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp
index 527656ab6b87f36a88f691b8cf4138f6b78da8ea..45f4b4fbd04c47edd184a1e806cca80d86eadbe8 100644
--- a/indra/newview/lldriverparam.cpp
+++ b/indra/newview/lldriverparam.cpp
@@ -224,7 +224,6 @@ void LLDriverParam::setAvatar(LLVOAvatar *avatarp)
 		}
 	}
 	*new_param = *this;
-	new_param->setIsDummy(FALSE);
 	return new_param;
 }
 
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 0bb5edf3f995ae9b9a0e1b0ceecd4a807d7abf54..e41c4104ebe4000b92ff1c6bcf210d57808872f3 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -104,7 +104,7 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum
 	{
 		setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
 	}
-	createGLTexture(0, raw_image);
+	createGLTexture(0, raw_image, 0, TRUE, LLViewerTexture::DYNAMIC_TEX);
 	setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP);
 	mGLTexturep->setGLTextureCreated(false);
 }
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 7bc48185e681190f308b7b007158497e6225a2ca..424d6353211bfec0ad579835ce488ac20e979bdd 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -48,11 +48,12 @@ class LLExpanderSegment : public LLTextSegment
 		mExpanderLabel(more_text)
 	{}
 
-	/*virtual*/ void	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const 
+	/*virtual*/ bool	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const 
 	{
 		// more label always spans width of text box
 		width = mEditor.getTextRect().getWidth() - mEditor.getHPad(); 
 		height = llceil(mStyle->getFont()->getLineHeight());
+		return true;
 	}
 	/*virtual*/ S32		getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const 
 	{ 
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 9daac60a7e84f2ded05d289886248faa173de48d..16c1aea684cb6709170ff8bf277d687b65b37a6c 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -52,6 +52,7 @@
 #include "llvovolume.h"
 #include "pipeline.h"
 #include "llviewerregion.h"
+#include "llviewerwindow.h"
 
 #define LL_MAX_INDICES_COUNT 1000000
 
@@ -175,6 +176,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
 	mLastIndicesCount = mIndicesCount;
 	mLastIndicesIndex = mIndicesIndex;
 
+	mImportanceToCamera = 0.f ;
+	mBoundingSphereRadius = 0.0f ;
+
 	mAtlasInfop = NULL ;
 	mUsingAtlas  = FALSE ;
 }
@@ -186,6 +190,7 @@ void LLFace::destroy()
 	{
 		mTexture->removeFace(this) ;
 	}
+	
 	if (mDrawPoolp)
 	{
 		mDrawPoolp->removeFace(this);
@@ -207,7 +212,7 @@ void LLFace::destroy()
 			}
 		}
 	}
-
+	
 	setDrawInfo(NULL);
 	
 	removeAtlas();
@@ -256,6 +261,7 @@ void LLFace::setPool(LLFacePool* new_pool, LLViewerTexture *texturep)
 		}
 		mDrawPoolp = new_pool;
 	}
+	
 	setTexture(texturep) ;
 }
 
@@ -515,8 +521,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 /* removed in lieu of raycast uv detection
 void LLFace::renderSelectedUV()
 {
-	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, TRUE);
-	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, TRUE);
+	LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLViewerTexture::BOOST_UI);
+	LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLViewerTexture::BOOST_UI);
 
 	LLGLSUVSelect object_select;
 
@@ -750,7 +756,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
 		}
 
 		mCenterLocal = (newMin+newMax)*0.5f;
-		
+		LLVector3 tmp = (newMin - newMax) ;
+		mBoundingSphereRadius = tmp.length() * 0.5f ;
+
 		updateCenterAgent();
 	}
 
@@ -1314,6 +1322,151 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 	return TRUE;
 }
 
+const F32 LEAST_IMPORTANCE = 0.05f ;
+const F32 LEAST_IMPORTANCE_FOR_LARGE_IMAGE = 0.3f ;
+
+F32 LLFace::getTextureVirtualSize()
+{
+	F32 radius;
+	F32 cos_angle_to_view_dir;
+	mPixelArea = calcPixelArea(cos_angle_to_view_dir, radius);
+
+	if (mPixelArea <= 0)
+	{
+		return 0.f;
+	}
+
+	//get area of circle in texture space
+	LLVector2 tdim = mTexExtents[1] - mTexExtents[0];
+	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;
+	if (texel_area <= 0)
+	{
+		// Probably animated, use default
+		texel_area = 1.f;
+	}
+
+	//apply texel area to face area to get accurate ratio
+	//face_area /= llclamp(texel_area, 1.f/64.f, 16.f);
+	F32 face_area = mPixelArea / llclamp(texel_area, 0.015625f, 128.f);
+
+	if(face_area > LLViewerTexture::sMaxSmallImageSize)
+	{
+		if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res.
+		{
+			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ;
+			face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ;
+		}
+		else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
+		{
+			if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res.
+			{
+				face_area = LLViewerTexture::sMinLargeImageSize ;
+			}	
+			else if(mTexture.notNull() && mTexture->isLargeImage())
+			{		
+				face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
+			}			
+		}
+	}
+
+	return face_area;
+}
+
+F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
+{
+	//get area of circle around face
+	LLVector3 center = getPositionAgent();
+	LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f;
+	
+	LLVector3 lookAt = center - LLViewerCamera::getInstance()->getOrigin();
+	F32 dist = lookAt.normVec() ;
+
+	//get area of circle around node
+	F32 app_angle = atanf(size.length()/dist);
+	radius = app_angle*LLDrawable::sCurPixelAngle;
+	F32 face_area = radius*radius * 3.14159f;
+
+	if(dist < mBoundingSphereRadius) //camera is very close
+	{
+		cos_angle_to_view_dir = 1.0f ;
+		mImportanceToCamera = 1.0f ;
+	}
+	else
+	{
+		cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;	
+		mImportanceToCamera = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ;
+	}
+
+	return face_area ;
+}
+
+//the projection of the face partially overlaps with the screen
+F32 LLFace::adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius )
+{
+	F32 screen_radius = (F32)llmax(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()) ;
+	F32 center_angle = acosf(cos_angle_to_view_dir) ;
+	F32 d = center_angle * LLDrawable::sCurPixelAngle ;
+
+	if(d + radius > screen_radius + 5.f)
+	{
+		//----------------------------------------------
+		//calculate the intersection area of two circles
+		//F32 radius_square = radius * radius ;
+		//F32 d_square = d * d ;
+		//F32 screen_radius_square = screen_radius * screen_radius ;
+		//face_area = 
+		//	radius_square * acosf((d_square + radius_square - screen_radius_square)/(2 * d * radius)) +
+		//	screen_radius_square * acosf((d_square + screen_radius_square - radius_square)/(2 * d * screen_radius)) -
+		//	0.5f * sqrtf((-d + radius + screen_radius) * (d + radius - screen_radius) * (d - radius + screen_radius) * (d + radius + screen_radius)) ;			
+		//----------------------------------------------
+
+		//the above calculation is too expensive
+		//the below is a good estimation: bounding box of the bounding sphere:
+		F32 alpha = 0.5f * (radius + screen_radius - d) / radius ;
+		alpha = llclamp(alpha, 0.f, 1.f) ;
+		return alpha * alpha ;
+	}
+	return 1.0f ;
+}
+
+const S8 FACE_IMPORTANCE_LEVEL = 4 ;
+const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL][2] = //{distance, importance_weight}
+	{{16.1f, 1.0f}, {32.1f, 0.5f}, {48.1f, 0.2f}, {96.1f, 0.05f} } ;
+const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[FACE_IMPORTANCE_LEVEL][2] =    //{cos(angle), importance_weight}
+	{{0.985f /*cos(10 degrees)*/, 1.0f}, {0.94f /*cos(20 degrees)*/, 0.8f}, {0.866f /*cos(30 degrees)*/, 0.64f}, {0.0f, 0.36f}} ;
+
+//static 
+F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist)
+{
+	F32 importance = 0.f ;
+	
+	if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() && 
+		dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0]) 
+	{
+		F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ;
+		F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed();
+
+		if(camera_moving_speed > 10.0f || camera_angular_speed > 1.0f)
+		{
+			//if camera moves or rotates too fast, ignore the importance factor
+			return 0.f ;
+		}
+		
+		//F32 camera_relative_speed = camera_moving_speed * (lookAt * LLViewerCamera::getInstance()->getVelocityDir()) ;
+		
+		S32 i = 0 ;
+		for(i = 0; i < FACE_IMPORTANCE_LEVEL && dist > FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][0]; ++i);
+		i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ;
+		F32 dist_factor = FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][1] ;
+		
+		for(i = 0; i < FACE_IMPORTANCE_LEVEL && cos_angle_to_view_dir < FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][0] ; ++i) ;
+		i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ;
+		importance = dist_factor * FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[i][1] ;
+	}
+
+	return importance ;
+}
+
 BOOL LLFace::verify(const U32* indices_array) const
 {
 	BOOL ok = TRUE;
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 2b134c8c3148c4eac66a7258a3677aceb6407b66..68eee061b8bafcfa0d0ba8b891367186a516e891 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -188,6 +188,9 @@ class LLFace
 	void		setIndicesIndex(S32 idx) { mIndicesIndex = idx; }
 	void		setDrawInfo(LLDrawInfo* draw_info);
 
+	F32         getTextureVirtualSize() ;
+	F32         getImportanceToCamera()const {return mImportanceToCamera ;}
+
 	//for atlas
 	LLTextureAtlasSlot*   getAtlasInfo() ;
 	void                  setAtlasInUse(BOOL flag);
@@ -200,6 +203,12 @@ class LLFace
 	void                  removeAtlas() ;
 	BOOL                  switchTexture() ;
 
+private:	
+	F32         adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius );
+	F32         calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;
+public:
+	static F32  calcImportanceToCamera(F32 to_view_dir, F32 dist);
+
 public:
 	
 	LLVector3		mCenterLocal;
@@ -214,7 +223,7 @@ class LLFace
 	LLMatrix4*	mTextureMatrix;
 	LLDrawInfo* mDrawInfo;
 
-protected:
+private:
 	friend class LLGeometryManager;
 	friend class LLVolumeGeometryManager;
 
@@ -244,6 +253,13 @@ class LLFace
 	F32			mVSize;
 	F32			mPixelArea;
 
+	//importance factor, in the range [0, 1.0].
+	//1.0: the most important.
+	//based on the distance from the face to the view point and the angle from the face center to the view direction.
+	F32         mImportanceToCamera ; 
+	F32         mBoundingSphereRadius ;
+
+
 	//atlas
 	LLPointer<LLTextureAtlasSlot> mAtlasInfop ;
 	BOOL                          mUsingAtlas ;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 2ab17d622005815fadde7d52321d089ffde26ada..71265fdd2f81f011b8018331ef7ce0a0331e5eb8 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -256,7 +256,8 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask)
 
 			LLToolTipMgr::instance().show(LLToolTip::Params()
 				.message(mHoverTimer->getToolTip(LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - mHoverBarIndex))
-				.sticky_rect(screen_rect));
+				.sticky_rect(screen_rect)
+				.delay_time(0.f));
 
 			return TRUE;
 		}
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index a6afbc05bec83aca4861353577882e17b3042e38..18135fc5587e51a762c6c2745e683bbda45d6157 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -437,7 +437,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 			}
 			else
 			{
-				LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+				const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 				if (item->getParentUUID() == favorites_id)
 				{
 					llwarns << "Attemt to copy a favorite item into the same folder." << llendl;
@@ -539,7 +539,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con
 	LLToolDragAndDrop* tool_dad = LLToolDragAndDrop::getInstance();
 	if (tool_dad->getSource() == LLToolDragAndDrop::SOURCE_NOTECARD)
 	{
-		viewer_item->setType(LLAssetType::AT_FAVORITE);
+		viewer_item->setType(LLAssetType::AT_LANDMARK);
 		copy_inventory_from_notecard(tool_dad->getObjectID(), tool_dad->getSourceID(), viewer_item.get(), gInventoryCallbacks.registerCB(cb));
 	}
 	else
@@ -561,7 +561,7 @@ void LLFavoritesBarCtrl::changed(U32 mask)
 {
 	if (mFavoriteFolderId.isNull())
 	{
-		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 		
 		if (mFavoriteFolderId.notNull())
 		{
@@ -750,6 +750,7 @@ void LLFavoritesBarCtrl::updateButtons(U32 bar_width)
 			bparams.tab_stop(false);
 			bparams.font(mFont);
 			bparams.name(">>");
+			bparams.label(">>");
 			bparams.tool_tip(mChevronButtonToolTip);
 			bparams.click_callback.function(boost::bind(&LLFavoritesBarCtrl::showDropDownMenu, this));
 
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 88658f7b9f635581ffeb9973987d00ab18daec42..b01293d17c73ada9fc880c0e8f3f2c5c7cfd8796 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -1,343 +1,343 @@
-/** 
- * @file llfloaterabout.cpp
- * @author James Cook
- * @brief The about box from Help->About
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
- 
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterabout.h"
-
-// Viewer includes
-#include "llagent.h"
-#include "llappviewer.h" 
-#include "llsecondlifeurls.h"
-#include "llvoiceclient.h"
-#include "lluictrlfactory.h"
-#include "llviewertexteditor.h"
-#include "llviewercontrol.h"
-#include "llviewerstats.h"
-#include "llviewerregion.h"
-#include "llversionviewer.h"
-#include "llviewerbuild.h"
-#include "llweb.h"
-
-// Linden library includes
-#include "llaudioengine.h"
-#include "llbutton.h"
-#include "llcurl.h"
-#include "llglheaders.h"
-#include "llfloater.h"
-#include "llfloaterreg.h"
-#include "llimagej2c.h"
-#include "llsys.h"
-#include "lltrans.h"
-#include "lluri.h"
-#include "v3dmath.h"
-#include "llwindow.h"
-#include "stringize.h"
-#include "llsdutil_math.h"
-#include "lleventdispatcher.h"
-
-#if LL_WINDOWS
-#include "lldxhardware.h"
-#endif
-
-extern LLMemoryInfo gSysMemory;
-extern U32 gPacketsIn;
-
-static std::string get_viewer_release_notes_url();
-
-
-///----------------------------------------------------------------------------
-/// Class LLFloaterAbout
-///----------------------------------------------------------------------------
-class LLFloaterAbout 
-	: public LLFloater
-{
-	friend class LLFloaterReg;
-private:
-	LLFloaterAbout(const LLSD& key);
-	virtual ~LLFloaterAbout();
-
-public:
-	/*virtual*/ BOOL postBuild();
-
-	/// Obtain the data used to fill out the contents string. This is
-	/// separated so that we can programmatically access the same info.
-	static LLSD getInfo();
-	void onClickCopyToClipboard();
-};
-
-
-// Default constructor
-LLFloaterAbout::LLFloaterAbout(const LLSD& key) 
-:	LLFloater(key)
-{
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
-	
-}
-
-// Destroys the object
-LLFloaterAbout::~LLFloaterAbout()
-{
-}
-
-BOOL LLFloaterAbout::postBuild()
-{
-	center();
-	LLViewerTextEditor *support_widget = 
-		getChild<LLViewerTextEditor>("support_editor", true);
-
-	LLViewerTextEditor *credits_widget = 
-		getChild<LLViewerTextEditor>("credits_editor", true);
-
-	getChild<LLUICtrl>("copy_btn")->setCommitCallback(
-		boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this));
-
-#if LL_WINDOWS
-	getWindow()->incBusyCount();
-	getWindow()->setCursor(UI_CURSOR_ARROW);
-#endif
-	LLSD info(getInfo());
-#if LL_WINDOWS
-	getWindow()->decBusyCount();
-	getWindow()->setCursor(UI_CURSOR_ARROW);
-#endif
-
-	std::ostringstream support;
-
-	// Render the LLSD from getInfo() as a format_map_t
-	LLStringUtil::format_map_t args;
-	// For reasons I don't yet understand, [ReleaseNotes] is not part of the
-	// default substitution strings whereas [APP_NAME] is. But it works to
-	// simply copy it into these specific args.
-	args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
-	for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
-		 ii != iend; ++ii)
-	{
-		if (! ii->second.isArray())
-		{
-			// Scalar value
-			if (ii->second.isUndefined())
-			{
-				args[ii->first] = getString("none");
-			}
-			else
-			{
-				// don't forget to render value asString()
-				args[ii->first] = ii->second.asString();
-			}
-		}
-		else
-		{
-			// array value: build KEY_0, KEY_1 etc. entries
-			for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n)
-			{
-				args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString();
-			}
-		}
-	}
-
-	// Now build the various pieces
-	support << getString("AboutHeader", args);
-	if (info.has("COMPILER"))
-	{
-		support << "\n\n" << getString("AboutCompiler", args);
-	}
-	if (info.has("REGION"))
-	{
-		support << "\n\n" << getString("AboutPosition", args);
-	}
-	support << "\n\n" << getString("AboutSystem", args);
-	if (info.has("GRAPHICS_DRIVER_VERSION"))
-	{
-		support << "\n\n" << getString("AboutDriver", args);
-	}
-	support << "\n\n" << getString("AboutLibs", args);
-	if (info.has("PACKETS_IN"))
-	{
-		support << '\n' << getString("AboutTraffic", args);
-	}
-
-	support_widget->appendText(support.str(), 
-								FALSE, 
-								LLStyle::Params()
-									.color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor")));
-	support_widget->blockUndo();
-
-	// Fix views
-	support_widget->setCursorPos(0);
-	support_widget->setEnabled(FALSE);
-
-	credits_widget->setCursorPos(0);
-	credits_widget->setEnabled(FALSE);
-
-	return TRUE;
-}
-
-// static
-LLSD LLFloaterAbout::getInfo()
-{
-	// The point of having one method build an LLSD info block and the other
-	// construct the user-visible About string is to ensure that the same info
-	// is available to a getInfo() caller as to the user opening
-	// LLFloaterAbout.
-	LLSD info;
-	LLSD version;
-	version.append(LL_VERSION_MAJOR);
-	version.append(LL_VERSION_MINOR);
-	version.append(LL_VERSION_PATCH);
-	version.append(LL_VERSION_BUILD);
-	info["VIEWER_VERSION"] = version;
-	info["VIEWER_VERSION_STR"] = STRINGIZE(version[0].asInteger() << '.' <<
-										   version[1].asInteger() << '.' <<
-										   version[2].asInteger() << '.' <<
-										   version[3].asInteger());
-	info["BUILD_DATE"] = __DATE__;
-	info["BUILD_TIME"] = __TIME__;
-	info["CHANNEL"] = gSavedSettings.getString("VersionChannelName");
-
-	info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url();
-
-#if LL_MSVC
-	info["COMPILER"] = "MSVC";
-	info["COMPILER_VERSION"] = _MSC_VER;
-#elif LL_GNUC
-	info["COMPILER"] = "GCC";
-	info["COMPILER_VERSION"] = GCC_VERSION;
-#endif
-
-	// Position
-	LLViewerRegion* region = gAgent.getRegion();
-	if (region)
-	{
-		const LLVector3d &pos = gAgent.getPositionGlobal();
-		info["POSITION"] = ll_sd_from_vector3d(pos);
-		info["REGION"] = gAgent.getRegion()->getName();
-		info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
-		info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
-		info["SERVER_VERSION"] = gLastVersionChannel;
-		info["SERVER_RELEASE_NOTES_URL"] = LLWeb::escapeURL(region->getCapability("ServerReleaseNotes"));
-	}
-
-	// CPU
-	info["CPU"] = gSysCPU.getCPUString();
-	info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024);
-	// Moved hack adjustment to Windows memory size into llsys.cpp
-	info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString();
-	info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
-	info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
-
-#if LL_WINDOWS
-    LLSD driver_info = gDXHardware.getDisplayInfo();
-    if (driver_info.has("DriverVersion"))
-    {
-        info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"];
-    }
-#endif
-
-	info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
-	info["LIBCURL_VERSION"] = LLCurl::getVersionString();
-	info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();
-	bool want_fullname = true;
-	info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD();
-	info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : "Unknown";
-
-	// TODO: Implement media plugin version query
-	info["QT_WEBKIT_VERSION"] = "4.5.2";
-
-	if (gPacketsIn > 0)
-	{
-		info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent();
-		info["PACKETS_IN"] = F32(gPacketsIn);
-		info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
-	}
-
-    return info;
-}
-
-static std::string get_viewer_release_notes_url()
-{
-	std::ostringstream version;
-	version << LL_VERSION_MAJOR << "."
-		<< LL_VERSION_MINOR << "."
-		<< LL_VERSION_PATCH << "."
-		<< LL_VERSION_BUILD;
-
-	LLSD query;
-	query["channel"] = gSavedSettings.getString("VersionChannelName");
-	query["version"] = version.str();
-
-	std::ostringstream url;
-	url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query);
-
-	return LLWeb::escapeURL(url.str());
-}
-
-class LLFloaterAboutListener: public LLDispatchListener
-{
-public:
-	LLFloaterAboutListener():
-		LLDispatchListener("LLFloaterAbout", "op")
-	{
-		add("getInfo", &LLFloaterAboutListener::getInfo, LLSD().insert("reply", LLSD()));
-	}
-
-private:
-	void getInfo(const LLSD& request) const
-	{
-		LLReqID reqid(request);
-		LLSD reply(LLFloaterAbout::getInfo());
-		reqid.stamp(reply);
-		LLEventPumps::instance().obtain(request["reply"]).post(reply);
-	}
-};
-
-static LLFloaterAboutListener floaterAboutListener;
-
-void LLFloaterAbout::onClickCopyToClipboard()
-{
-	LLViewerTextEditor *support_widget = 
-		getChild<LLViewerTextEditor>("support_editor", true);
-	support_widget->selectAll();
-	support_widget->copy();
-	support_widget->deselect();
-}
-
-///----------------------------------------------------------------------------
-/// LLFloaterAboutUtil
-///----------------------------------------------------------------------------
-void LLFloaterAboutUtil::registerFloater()
-{
-	LLFloaterReg::add("sl_about", "floater_about.xml",
-		&LLFloaterReg::build<LLFloaterAbout>);
-
-}
+/** 
+ * @file llfloaterabout.cpp
+ * @author James Cook
+ * @brief The about box from Help->About
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+ 
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterabout.h"
+
+// Viewer includes
+#include "llagent.h"
+#include "llappviewer.h" 
+#include "llsecondlifeurls.h"
+#include "llvoiceclient.h"
+#include "lluictrlfactory.h"
+#include "llviewertexteditor.h"
+#include "llviewercontrol.h"
+#include "llviewerstats.h"
+#include "llviewerregion.h"
+#include "llversionviewer.h"
+#include "llviewerbuild.h"
+#include "llweb.h"
+
+// Linden library includes
+#include "llaudioengine.h"
+#include "llbutton.h"
+#include "llcurl.h"
+#include "llglheaders.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llimagej2c.h"
+#include "llsys.h"
+#include "lltrans.h"
+#include "lluri.h"
+#include "v3dmath.h"
+#include "llwindow.h"
+#include "stringize.h"
+#include "llsdutil_math.h"
+#include "lleventdispatcher.h"
+
+#if LL_WINDOWS
+#include "lldxhardware.h"
+#endif
+
+extern LLMemoryInfo gSysMemory;
+extern U32 gPacketsIn;
+
+static std::string get_viewer_release_notes_url();
+
+
+///----------------------------------------------------------------------------
+/// Class LLFloaterAbout
+///----------------------------------------------------------------------------
+class LLFloaterAbout 
+	: public LLFloater
+{
+	friend class LLFloaterReg;
+private:
+	LLFloaterAbout(const LLSD& key);
+	virtual ~LLFloaterAbout();
+
+public:
+	/*virtual*/ BOOL postBuild();
+
+	/// Obtain the data used to fill out the contents string. This is
+	/// separated so that we can programmatically access the same info.
+	static LLSD getInfo();
+	void onClickCopyToClipboard();
+};
+
+
+// Default constructor
+LLFloaterAbout::LLFloaterAbout(const LLSD& key) 
+:	LLFloater(key)
+{
+	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
+	
+}
+
+// Destroys the object
+LLFloaterAbout::~LLFloaterAbout()
+{
+}
+
+BOOL LLFloaterAbout::postBuild()
+{
+	center();
+	LLViewerTextEditor *support_widget = 
+		getChild<LLViewerTextEditor>("support_editor", true);
+
+	LLViewerTextEditor *credits_widget = 
+		getChild<LLViewerTextEditor>("credits_editor", true);
+
+	getChild<LLUICtrl>("copy_btn")->setCommitCallback(
+		boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this));
+
+#if LL_WINDOWS
+	getWindow()->incBusyCount();
+	getWindow()->setCursor(UI_CURSOR_ARROW);
+#endif
+	LLSD info(getInfo());
+#if LL_WINDOWS
+	getWindow()->decBusyCount();
+	getWindow()->setCursor(UI_CURSOR_ARROW);
+#endif
+
+	std::ostringstream support;
+
+	// Render the LLSD from getInfo() as a format_map_t
+	LLStringUtil::format_map_t args;
+	// For reasons I don't yet understand, [ReleaseNotes] is not part of the
+	// default substitution strings whereas [APP_NAME] is. But it works to
+	// simply copy it into these specific args.
+	args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
+	for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
+		 ii != iend; ++ii)
+	{
+		if (! ii->second.isArray())
+		{
+			// Scalar value
+			if (ii->second.isUndefined())
+			{
+				args[ii->first] = getString("none");
+			}
+			else
+			{
+				// don't forget to render value asString()
+				args[ii->first] = ii->second.asString();
+			}
+		}
+		else
+		{
+			// array value: build KEY_0, KEY_1 etc. entries
+			for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n)
+			{
+				args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString();
+			}
+		}
+	}
+
+	// Now build the various pieces
+	support << getString("AboutHeader", args);
+	if (info.has("COMPILER"))
+	{
+		support << "\n\n" << getString("AboutCompiler", args);
+	}
+	if (info.has("REGION"))
+	{
+		support << "\n\n" << getString("AboutPosition", args);
+	}
+	support << "\n\n" << getString("AboutSystem", args);
+	if (info.has("GRAPHICS_DRIVER_VERSION"))
+	{
+		support << "\n\n" << getString("AboutDriver", args);
+	}
+	support << "\n\n" << getString("AboutLibs", args);
+	if (info.has("PACKETS_IN"))
+	{
+		support << '\n' << getString("AboutTraffic", args);
+	}
+
+	support_widget->appendText(support.str(), 
+								FALSE, 
+								LLStyle::Params()
+									.color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor")));
+	support_widget->blockUndo();
+
+	// Fix views
+	support_widget->setCursorPos(0);
+	support_widget->setEnabled(FALSE);
+
+	credits_widget->setCursorPos(0);
+	credits_widget->setEnabled(FALSE);
+
+	return TRUE;
+}
+
+// static
+LLSD LLFloaterAbout::getInfo()
+{
+	// The point of having one method build an LLSD info block and the other
+	// construct the user-visible About string is to ensure that the same info
+	// is available to a getInfo() caller as to the user opening
+	// LLFloaterAbout.
+	LLSD info;
+	LLSD version;
+	version.append(LL_VERSION_MAJOR);
+	version.append(LL_VERSION_MINOR);
+	version.append(LL_VERSION_PATCH);
+	version.append(LL_VERSION_BUILD);
+	info["VIEWER_VERSION"] = version;
+	info["VIEWER_VERSION_STR"] = STRINGIZE(version[0].asInteger() << '.' <<
+										   version[1].asInteger() << '.' <<
+										   version[2].asInteger() << '.' <<
+										   version[3].asInteger());
+	info["BUILD_DATE"] = __DATE__;
+	info["BUILD_TIME"] = __TIME__;
+	info["CHANNEL"] = gSavedSettings.getString("VersionChannelName");
+
+	info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url();
+
+#if LL_MSVC
+	info["COMPILER"] = "MSVC";
+	info["COMPILER_VERSION"] = _MSC_VER;
+#elif LL_GNUC
+	info["COMPILER"] = "GCC";
+	info["COMPILER_VERSION"] = GCC_VERSION;
+#endif
+
+	// Position
+	LLViewerRegion* region = gAgent.getRegion();
+	if (region)
+	{
+		const LLVector3d &pos = gAgent.getPositionGlobal();
+		info["POSITION"] = ll_sd_from_vector3d(pos);
+		info["REGION"] = gAgent.getRegion()->getName();
+		info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
+		info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
+		info["SERVER_VERSION"] = gLastVersionChannel;
+		info["SERVER_RELEASE_NOTES_URL"] = LLWeb::escapeURL(region->getCapability("ServerReleaseNotes"));
+	}
+
+	// CPU
+	info["CPU"] = gSysCPU.getCPUString();
+	info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024);
+	// Moved hack adjustment to Windows memory size into llsys.cpp
+	info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString();
+	info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
+	info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
+
+#if LL_WINDOWS
+    LLSD driver_info = gDXHardware.getDisplayInfo();
+    if (driver_info.has("DriverVersion"))
+    {
+        info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"];
+    }
+#endif
+
+	info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
+	info["LIBCURL_VERSION"] = LLCurl::getVersionString();
+	info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();
+	bool want_fullname = true;
+	info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD();
+	info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : "Unknown";
+
+	// TODO: Implement media plugin version query
+	info["QT_WEBKIT_VERSION"] = "4.5.2";
+
+	if (gPacketsIn > 0)
+	{
+		info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent();
+		info["PACKETS_IN"] = F32(gPacketsIn);
+		info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
+	}
+
+    return info;
+}
+
+static std::string get_viewer_release_notes_url()
+{
+	std::ostringstream version;
+	version << LL_VERSION_MAJOR << "."
+		<< LL_VERSION_MINOR << "."
+		<< LL_VERSION_PATCH << "."
+		<< LL_VERSION_BUILD;
+
+	LLSD query;
+	query["channel"] = gSavedSettings.getString("VersionChannelName");
+	query["version"] = version.str();
+
+	std::ostringstream url;
+	url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query);
+
+	return LLWeb::escapeURL(url.str());
+}
+
+class LLFloaterAboutListener: public LLDispatchListener
+{
+public:
+	LLFloaterAboutListener():
+		LLDispatchListener("LLFloaterAbout", "op")
+	{
+		add("getInfo", &LLFloaterAboutListener::getInfo, LLSD().insert("reply", LLSD()));
+	}
+
+private:
+	void getInfo(const LLSD& request) const
+	{
+		LLReqID reqid(request);
+		LLSD reply(LLFloaterAbout::getInfo());
+		reqid.stamp(reply);
+		LLEventPumps::instance().obtain(request["reply"]).post(reply);
+	}
+};
+
+static LLFloaterAboutListener floaterAboutListener;
+
+void LLFloaterAbout::onClickCopyToClipboard()
+{
+	LLViewerTextEditor *support_widget = 
+		getChild<LLViewerTextEditor>("support_editor", true);
+	support_widget->selectAll();
+	support_widget->copy();
+	support_widget->deselect();
+}
+
+///----------------------------------------------------------------------------
+/// LLFloaterAboutUtil
+///----------------------------------------------------------------------------
+void LLFloaterAboutUtil::registerFloater()
+{
+	LLFloaterReg::add("sl_about", "floater_about.xml",
+		&LLFloaterReg::build<LLFloaterAbout>);
+
+}
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 55b7ed0c99c5cbec20245f3c2e9285a54ab1208a..095fe0a220faa97437f3b0269994828f737b64ad 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -989,7 +989,7 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)
 						    name,
 						    desc,
 						    0,
-						    LLAssetType::AT_NONE,
+						    LLFolderType::FT_NONE,
 						    LLInventoryType::IT_ANIMATION,
 						    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 						    name,
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index a73ebf4e06f9dc7a82c9773902e41ac024e70625..538b44c056553cbf7129391419f6ba101021cf1b 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -72,8 +72,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed)
 
 BOOL LLFloaterBulkPermission::postBuild()
 {
-//	childSetAction("help", onHelpBtn, this);  // this is not in use
-
 	return TRUE;
 }
 
@@ -157,12 +155,6 @@ void LLFloaterBulkPermission::onApplyBtn()
 	doApply();
 }
 
-// angela -- this is not in use
-//void LLFloaterBulkPermission::onHelpBtn(void* user_data)
-//{
-//	LLNotifications::instance().add("HelpBulkPermission");
-//}
-
 void LLFloaterBulkPermission::onCloseBtn()
 {
 	closeFloater();
@@ -272,7 +264,6 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent
 			( asstype == LLAssetType::AT_BODYPART  && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) ||
 			( asstype == LLAssetType::AT_CLOTHING  && gSavedSettings.getBOOL("BulkChangeIncludeClothing"  )) ||
 			( asstype == LLAssetType::AT_GESTURE   && gSavedSettings.getBOOL("BulkChangeIncludeGestures"  )) ||
-			( asstype == LLAssetType::AT_FAVORITE  && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) ||
 			( asstype == LLAssetType::AT_NOTECARD  && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) ||
 			( asstype == LLAssetType::AT_OBJECT    && gSavedSettings.getBOOL("BulkChangeIncludeObjects"   )) ||
 			( asstype == LLAssetType::AT_LSL_TEXT  && gSavedSettings.getBOOL("BulkChangeIncludeScripts"   )) ||
diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
index c34e4413ccc94ed412f871be3de21f58b615af0c..31f4f5c3e169abf88556776b73872c523db13b82 100644
--- a/indra/newview/llfloaterbulkpermission.h
+++ b/indra/newview/llfloaterbulkpermission.h
@@ -79,7 +79,6 @@ class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener
 								U8 key,
 								bool is_new);
 
-//	static void onHelpBtn(void* user_data);
 	void onCloseBtn();
 	void onApplyBtn();
 	void onCommitCopy();
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 9d07362edc8a49b4abaa554ae02cdcf3ac433190..cefd7a38080814af9de090bdf3cd0a47ee46fd5f 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -45,6 +45,7 @@
 #include "llinventorymodel.h"	// for gInventory
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for get_item_icon
+#include "llinventoryfunctions.h"
 #include "llselectmgr.h"
 #include "llscrolllistctrl.h"
 #include "llviewerobject.h"
@@ -292,7 +293,7 @@ void LLFloaterBuy::onClickBuy()
 {
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 3a4171c6bee770113e002a9195f8db8305f9fb30..32802f6a20055309e97088ffdc246e1ff0f94f16 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -45,6 +45,7 @@
 #include "llagent.h"			// for agent id
 #include "llalertdialog.h"
 #include "llcheckboxctrl.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"	// for gInventory
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for get_item_icon
@@ -280,12 +281,12 @@ void LLFloaterBuyContents::onClickBuy()
 	// We may want to wear this item
 	if (childGetValue("wear_check"))
 	{
-		LLFloaterInventory::sWearNewClothing = TRUE;
+		LLInventoryState::sWearNewClothing = TRUE;
 	}
 
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CATEGORY);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 36f031579046d6201445598a96e5c12c82f6f5d8..467796b4a39b0df33ef1ab3ac12f084069a1193b 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -685,7 +685,14 @@ void LLFloaterBuyLandUI::finishWebSiteInfo()
 	mSiteLandUseAction = landUse["action"].asString();
 
 	LLXMLRPCValue currency = result["currency"];
-	mCurrency.setEstimate(currency["estimatedCost"].asInt());
+	if (currency["estimatedCost"].isValid())
+	{
+		mCurrency.setUSDEstimate(currency["estimatedCost"].asInt());
+	}
+	if (currency["estimatedLocalCost"].isValid())
+	{
+		mCurrency.setLocalEstimate(currency["estimatedLocalCost"].asString());
+	}
 
 	mSiteConfirm = result["confirm"].asString();
 }
@@ -733,7 +740,8 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
 	keywordArgs.appendInt("billableArea",
 		mIsForGroup ? 0 : mParcelBillableArea);
 	keywordArgs.appendInt("currencyBuy", mCurrency.getAmount());
-	keywordArgs.appendInt("estimatedCost", mCurrency.getEstimate());
+	keywordArgs.appendInt("estimatedCost", mCurrency.getUSDEstimate());
+	keywordArgs.appendString("estimatedLocalCost", mCurrency.getLocalEstimate());
 	keywordArgs.appendString("confirm", mSiteConfirm);
 	if (!password.empty())
 	{
@@ -1217,7 +1225,7 @@ void LLFloaterBuyLandUI::refreshUI()
 			
 			childSetText("currency_reason", getString("not_enough_lindens", string_args));
 
-			childSetTextArg("currency_est", "[AMOUNT2]", llformat("%#.2f", mCurrency.getEstimate() / 100.0));
+			childSetTextArg("currency_est", "[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
 		}
 		
 		if (willHaveEnough)
@@ -1297,7 +1305,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm()
 	{
 		LLStringUtil::format_map_t string_args;
 		string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount());
-		string_args["[AMOUNT2]"] = llformat("%#.2f", mCurrency.getEstimate() / 100.0);
+		string_args["[LOCAL_AMOUNT]"] = mCurrency.getLocalEstimate();
 		
 		action += getString("buy_for_US", string_args);
 	}
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 7f3b988dfe2cc0a540e02bf92cd1d752ef38bff7..48d552022f981e33f07e3e298163183a8e321cc7 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -105,20 +105,8 @@ LLFloaterDayCycle::~LLFloaterDayCycle()
 {
 }
 
-void LLFloaterDayCycle::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterDayCycle::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterDayCycle::onClickHelp, this, xml_alert));
-}
-
 void LLFloaterDayCycle::initCallbacks(void) 
 {
-	initHelpBtn("WLDayCycleHelp", "HelpDayCycle");
-
 	// WL Day Cycle
 	getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1));
 	getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1));
diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h
index 43c347d4f21d14bae9f8c4f2a4e2cb5093c8610a..c250902b6566487ad68048674013fa12f807b1c4 100644
--- a/indra/newview/llfloaterdaycycle.h
+++ b/indra/newview/llfloaterdaycycle.h
@@ -59,9 +59,6 @@ class LLFloaterDayCycle : public LLFloater
 	LLFloaterDayCycle(const LLSD& key);
 	virtual ~LLFloaterDayCycle();
 	/*virtual*/	BOOL	postBuild();
-	/// help button stuff
-	void onClickHelp(std::string xml_alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
 
 	/// initialize all
 	void initCallbacks(void);
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index a520df36dec3e461e5f039f994fef903c0ec19b0..2fffa6eece2bd366576f432d28efcd5cc823a805 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -70,10 +70,6 @@ BOOL LLFloaterEnvSettings::postBuild()
 	syncMenu();
 	return TRUE;
 }
-void LLFloaterEnvSettings::onClickHelp()
-{
-	LLNotifications::instance().add(contextualNotification("EnvSettingsHelpButton"));
-}
 
 void LLFloaterEnvSettings::initCallbacks(void) 
 {
@@ -89,10 +85,8 @@ void LLFloaterEnvSettings::initCallbacks(void)
 	getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this));
  	getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this));
 	getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this));
-	getChild<LLUICtrl>("EnvSettingsHelpButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onClickHelp, this));
 }
 
-
 // menu maintenance functions
 
 void LLFloaterEnvSettings::syncMenu()
diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h
index 083e3636d1b6e3d8c6268cf5e4c7e246d820b12a..02bc5021207f0773380e4d475e1b527c4dcac830 100644
--- a/indra/newview/llfloaterenvsettings.h
+++ b/indra/newview/llfloaterenvsettings.h
@@ -53,9 +53,6 @@ class LLFloaterEnvSettings : public LLFloater
 	/// initialize all the callbacks for the menu
 	void initCallbacks(void);
 
-	/// callback for the menus help button
-	void onClickHelp();
-	
 	/// handle if time of day is changed
 	void onChangeDayTime(LLUICtrl* ctrl);
 
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 1300103423ce0a37613b4347f545cfc104ac72eb..c114eed4a2485f043893be704ecde429cb3bb16c 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -44,6 +44,7 @@
 #include "llcombobox.h"
 #include "llgesturemgr.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llkeyboard.h"
 #include "lllineeditor.h"
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 9947cdc2173c02f882d8f3ff00ce524a23c7940d..31b494b590d0c1581a4c4cbf233b694d64f9677a 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -59,12 +59,6 @@ LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
 {
 }
 
-void LLFloaterHardwareSettings::onClickHelp(void* data)
-{
-	const char* xml_alert = "HardwareSettingsHelpButton";
-	LLNotifications::instance().add(xml_alert);
-}
-
 void LLFloaterHardwareSettings::initCallbacks(void) 
 {
 }
diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h
index 3f19d89cbbbc7ed78965bf1410a5ec02642742db..ef0b0c905e027ed324d5c5e3b2a453a1aaf81b7e 100644
--- a/indra/newview/llfloaterhardwaresettings.h
+++ b/indra/newview/llfloaterhardwaresettings.h
@@ -50,9 +50,6 @@ class LLFloaterHardwareSettings : public LLFloater
 	/// initialize all the callbacks for the menu
 	void initCallbacks(void);
 
-	/// callback for the menus help button
-	static void onClickHelp(void* data);
-
 	/// OK button
 	static void onBtnOK( void* userdata );
 	
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index e26937e93ff3ede8d4e09f41f22a9bf12cc47124..13ca7638c52bb10f80d55d8e71745184759868eb 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -88,32 +88,7 @@ LLFloaterInspect::~LLFloaterInspect(void)
 	}
 	//sInstance = NULL;
 }
-/*
-BOOL LLFloaterInspect::isVisible()
-{
-	return (!!sInstance);
-}*/
-/*
-void LLFloaterInspect::show(void* ignored)
-{
-	// setForceSelection ensures that the pie menu does not deselect things when it 
-	// looses the focus (this can happen with "select own objects only" enabled
-	// VWR-1471
-	BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE);
-
-	if (!sInstance)	// first use
-	{
-		sInstance = new LLFloaterInspect;
-	}
 
-	sInstance->openFloater();
-	LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance());
-	LLSelectMgr::getInstance()->setForceSelection(forcesel);	// restore previouis value
-
-	sInstance->mObjectSelection = LLSelectMgr::getInstance()->getSelection();
-	sInstance->refresh();
-}
-*/
 void LLFloaterInspect::onOpen(const LLSD& key)
 {
 	BOOL forcesel = LLSelectMgr::getInstance()->setForceSelection(TRUE);
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index a90b2cfe7be97f657bc6afe216cc0dd36ff0459f..92778510e70fb13fc47bcf49e8f566261ab88025 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -32,539 +32,35 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include <utility> // for std::pair<>
-
 #include "llfloaterinventory.h"
 
-// library includes
 #include "llagent.h"
-#include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llfloaterreg.h"
-#include "llsdserialize.h"
-#include "llfiltereditor.h"
-#include "llspinctrl.h"
-#include "llui.h"
-#include "message.h"
-
-// newview includes
-#include "llappearancemgr.h"
-#include "llappviewer.h"
 #include "llfirstuse.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
-#include "llimview.h"
-#include "llinventorybridge.h"
-#include "llinventoryclipboard.h"
+#include "llfloaterreg.h"
 #include "llinventorymodel.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
+#include "llpanelmaininventory.h"
 #include "llresmgr.h"
-#include "llscrollbar.h"
-#include "llscrollcontainer.h"
-#include "llselectmgr.h"
-#include "lltabcontainer.h"
-#include "lltooldraganddrop.h"
-#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
-#include "llviewermessage.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llviewerwindow.h"
-#include "llvoavatarself.h"
-#include "llwearablelist.h"
-
-static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
-
-//BOOL LLFloaterInventory::sOpenNextNewItem = FALSE;
-BOOL LLFloaterInventory::sWearNewClothing = FALSE;
-LLUUID LLFloaterInventory::sWearNewClothingTransactionID;
-
-///----------------------------------------------------------------------------
-/// LLFloaterInventoryFinder
-///----------------------------------------------------------------------------
-
-LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLFloaterInventory* inventory_view)
-:	LLFloater(LLSD()),
-	mFloaterInventory(inventory_view),
-	mFilter(inventory_view->mActivePanel->getFilter())
-{
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
-	updateElementsFromFilter();
-}
-
-
-void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-
-	bool since_logoff= self->childGetValue("check_since_logoff");
-	
-	if (!since_logoff && 
-	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
-	{
-		self->mSpinSinceHours->set(1.0f);
-	}	
-}
-BOOL LLFloaterInventoryFinder::postBuild()
-{
-	const LLRect& viewrect = mFloaterInventory->getRect();
-	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
-
-	childSetAction("All", selectAllTypes, this);
-	childSetAction("None", selectNoTypes, this);
-
-	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
-	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
-
-	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
-	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
-
-	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
-	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
-
-	childSetAction("Close", onCloseBtn, this);
-
-	updateElementsFromFilter();
-	return TRUE;
-}
-void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-	
-	bool since_logoff=true;
-	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
-	{
-		since_logoff = false;
-	}
-	self->childSetValue("check_since_logoff", since_logoff);
-}
-
-void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
-{
-	mFilter = filter;
-	updateElementsFromFilter();
-}
-
-void LLFloaterInventoryFinder::updateElementsFromFilter()
-{
-	if (!mFilter)
-		return;
-
-	// Get data needed for filter display
-	U32 filter_types = mFilter->getFilterTypes();
-	std::string filter_string = mFilter->getFilterSubString();
-	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
-	U32 hours = mFilter->getHoursAgo();
-
-	// update the ui elements
-	LLFloater::setTitle(mFilter->getName());
-	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
-
-	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
-	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
-	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
-	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
-	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
-	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
-	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
-	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
-	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
-	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
-	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
-	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
-	mSpinSinceHours->set((F32)(hours % 24));
-	mSpinSinceDays->set((F32)(hours / 24));
-}
-
-void LLFloaterInventoryFinder::draw()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
-	U32 filter = 0xffffffff;
-	BOOL filtered_by_all_types = TRUE;
-
-	if (!childGetValue("check_animation"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
-		filtered_by_all_types = FALSE;
-	}
-
-
-	if (!childGetValue("check_calling_card"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_clothing"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_gesture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_landmark"))
-
-
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_notecard"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_object"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
-		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_script"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_LSL);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_sound"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_texture"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!childGetValue("check_snapshot"))
-	{
-		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
-		filtered_by_all_types = FALSE;
-	}
-
-	if (!filtered_by_all_types)
-	{
-		// don't include folders in filter, unless I've selected everything
-		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
-	}
-
-	// update the panel, panel will update the filter
-	mFloaterInventory->mActivePanel->setShowFolderState(getCheckShowEmpty() ?
-		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	mFloaterInventory->mActivePanel->setFilterTypes(filter);
-	if (getCheckSinceLogoff())
-	{
-		mSpinSinceDays->set(0);
-		mSpinSinceHours->set(0);
-	}
-	U32 days = (U32)mSpinSinceDays->get();
-	U32 hours = (U32)mSpinSinceHours->get();
-	if (hours > 24)
-	{
-		days += hours / 24;
-		hours = (U32)hours % 24;
-		mSpinSinceDays->set((F32)days);
-		mSpinSinceHours->set((F32)hours);
-	}
-	hours += days * 24;
-	mFloaterInventory->mActivePanel->setHoursAgo(hours);
-	mFloaterInventory->mActivePanel->setSinceLogoff(getCheckSinceLogoff());
-	mFloaterInventory->setFilterTextFromFilter();
-
-	LLFloater::draw();
-}
-
-BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
-{
-	return childGetValue("check_show_empty");
-}
-
-BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
-{
-	return childGetValue("check_since_logoff");
-}
-
-void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
-{
-	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
-	finderp->closeFloater();
-}
-
-// static
-void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	self->childSetValue("check_animation", TRUE);
-	self->childSetValue("check_calling_card", TRUE);
-	self->childSetValue("check_clothing", TRUE);
-	self->childSetValue("check_gesture", TRUE);
-	self->childSetValue("check_landmark", TRUE);
-	self->childSetValue("check_notecard", TRUE);
-	self->childSetValue("check_object", TRUE);
-	self->childSetValue("check_script", TRUE);
-	self->childSetValue("check_sound", TRUE);
-	self->childSetValue("check_texture", TRUE);
-	self->childSetValue("check_snapshot", TRUE);
-
-/*
-	self->mCheckCallingCard->set(TRUE);
-	self->mCheckClothing->set(TRUE);
-	self->mCheckGesture->set(TRUE);
-	self->mCheckLandmark->set(TRUE);
-	self->mCheckNotecard->set(TRUE);
-	self->mCheckObject->set(TRUE);
-	self->mCheckScript->set(TRUE);
-	self->mCheckSound->set(TRUE);
-	self->mCheckTexture->set(TRUE);
-	self->mCheckSnapshot->set(TRUE);*/
-}
-
-//static
-void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
-{
-	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
-	if(!self) return;
-
-	/*
-	self->childSetValue("check_animation", FALSE);
-	self->mCheckCallingCard->set(FALSE);
-	self->mCheckClothing->set(FALSE);
-	self->mCheckGesture->set(FALSE);
-	self->mCheckLandmark->set(FALSE);
-	self->mCheckNotecard->set(FALSE);
-	self->mCheckObject->set(FALSE);
-	self->mCheckScript->set(FALSE);
-	self->mCheckSound->set(FALSE);
-	self->mCheckTexture->set(FALSE);
-	self->mCheckSnapshot->set(FALSE);*/
-
-
-	self->childSetValue("check_animation", FALSE);
-	self->childSetValue("check_calling_card", FALSE);
-	self->childSetValue("check_clothing", FALSE);
-	self->childSetValue("check_gesture", FALSE);
-	self->childSetValue("check_landmark", FALSE);
-	self->childSetValue("check_notecard", FALSE);
-	self->childSetValue("check_object", FALSE);
-	self->childSetValue("check_script", FALSE);
-	self->childSetValue("check_sound", FALSE);
-	self->childSetValue("check_texture", FALSE);
-	self->childSetValue("check_snapshot", FALSE);
-}
-
+#include "llviewerfoldertype.h"
 
 ///----------------------------------------------------------------------------
 /// LLFloaterInventory
 ///----------------------------------------------------------------------------
-void LLSaveFolderState::setApply(BOOL apply)
-{
-	mApply = apply; 
-	// before generating new list of open folders, clear the old one
-	if(!apply) 
-	{
-		clearOpenFolders(); 
-	}
-}
-
-void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
-	if(mApply)
-	{
-		// we're applying the open state
-		LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
-		if(!bridge) return;
-		LLUUID id(bridge->getUUID());
-		if(mOpenFolders.find(id) != mOpenFolders.end())
-		{
-			folder->setOpen(TRUE);
-		}
-		else
-		{
-			// keep selected filter in its current state, this is less jarring to user
-			if (!folder->isSelected())
-			{
-				folder->setOpen(FALSE);
-			}
-		}
-	}
-	else
-	{
-		// we're recording state at this point
-		if(folder->isOpen())
-		{
-			LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
-			if(!bridge) return;
-			mOpenFolders.insert(bridge->getUUID());
-		}
-	}
-}
 
 LLFloaterInventory::LLFloaterInventory(const LLSD& key)
 	: LLFloater(key)
 {
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
-	// Menu Callbacks (non contex menus)
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLFloaterInventory::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLFloaterInventory::closeAllFolders, this));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLFloaterInventory::doCreate, this, _2));
-// 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::newWindow, this));
-	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLFloaterInventory::toggleFindOptions, this));
-	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLFloaterInventory::resetFilters, this));
-	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLFloaterInventory::setSortBy, this, _2));
-
-	// Controls
-	// *TODO: Just use persistant settings for each of these
-	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
-	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
-	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
-	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
-	
-	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
-	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
-	
-	mSavedFolderState = new LLSaveFolderState();
-	mSavedFolderState->setApply(FALSE);
+}
 
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory.xml");
+LLFloaterInventory::~LLFloaterInventory()
+{
 }
 
 BOOL LLFloaterInventory::postBuild()
 {
-	gInventory.addObserver(this);
-	
-	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
-	mFilterTabs->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterSelected, this));
-	
-	//panel->getFilter()->markDefault();
-
-	// Set up the default inv. panel/filter settings.
-	mActivePanel = getChild<LLInventoryPanel>("All Items");
-	if (mActivePanel)
-	{
-		// "All Items" is the previous only view, so it gets the InventorySortOrder
-		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
-		mActivePanel->getFilter()->markDefault();
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		mActivePanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mActivePanel, _1, _2));
-	}
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		recent_items_panel->setSinceLogoff(TRUE);
-		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
-		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-		recent_items_panel->getFilter()->markDefault();
-		recent_items_panel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, recent_items_panel, _1, _2));
-	}
-
-	// Now load the stored settings from disk, if available.
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llinfos << "LLFloaterInventory::init: reading from " << filterSaveName << llendl;
-	llifstream file(filterSaveName.str());
-	LLSD savedFilterState;
-	if (file.is_open())
-	{
-		LLSDSerialize::fromXML(savedFilterState, file);
-		file.close();
-
-		// Load the persistent "Recent Items" settings.
-		// Note that the "All Items" settings do not persist.
-		if(recent_items_panel)
-		{
-			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
-			{
-				LLSD recent_items = savedFilterState.get(
-					recent_items_panel->getFilter()->getName());
-				recent_items_panel->getFilter()->fromLLSD(recent_items);
-			}
-		}
-
-	}
-
-
-	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
-	if (mFilterEditor)
-	{
-		mFilterEditor->setCommitCallback(boost::bind(&LLFloaterInventory::onFilterEdit, this, _2));
-	}
-
-	// *TODO:Get the cost info from the server
-	const std::string upload_cost("10");
-	childSetLabelArg("Upload Image", "[COST]", upload_cost);
-	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
-	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
-	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
-	
+	mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel");
 	return TRUE;
 }
 
-// Destroys the object
-LLFloaterInventory::~LLFloaterInventory( void )
-{
-	// Save the filters state.
-	LLSD filterRoot;
-	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
-	if (all_items_panel)
-	{
-		LLInventoryFilter* filter = all_items_panel->getFilter();
-		LLSD filterState;
-		filter->toLLSD(filterState);
-		filterRoot[filter->getName()] = filterState;
-	}
-
-	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
-	if (recent_items_panel)
-	{
-		LLInventoryFilter* filter = recent_items_panel->getFilter();
-		LLSD filterState;
-		filter->toLLSD(filterState);
-		filterRoot[filter->getName()] = filterState;
-	}
-
-	std::ostringstream filterSaveName;
-	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
-	llofstream filtersFile(filterSaveName.str());
-	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
-	{
-		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
-	}
-	else
-		filtersFile.close();
-
-	gInventory.removeObserver(this);
-	delete mSavedFolderState;
-}
 
 void LLFloaterInventory::draw()
 {
@@ -575,113 +71,6 @@ void LLFloaterInventory::draw()
 	LLFloater::draw();
 }
 
-void LLOpenFilteredFolders::doItem(LLFolderViewItem *item)
-{
-	if (item->getFiltered())
-	{
-		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getFiltered() && folder->getParentFolder())
-	{
-		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-	// if this folder didn't pass the filter, and none of its descendants did
-	else if (!folder->getFiltered() && !folder->hasFilteredDescendants())
-	{
-		folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO);
-	}
-}
-
-void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)
-{
-	if (item->getFiltered() && !mItemSelected)
-	{
-		item->getRoot()->setSelection(item, FALSE, FALSE);
-		if (item->getParentFolder())
-		{
-			item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-		item->getRoot()->scrollToShowSelection();
-		mItemSelected = TRUE;
-	}
-}
-
-void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getFiltered() && !mItemSelected)
-	{
-		folder->getRoot()->setSelection(folder, FALSE, FALSE);
-		if (folder->getParentFolder())
-		{
-			folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-		folder->getRoot()->scrollToShowSelection();
-		mItemSelected = TRUE;
-	}
-}
-
-void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item)
-{
-	if (item->getParentFolder() && item->isSelected())
-	{
-		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder)
-{
-	if (folder->getParentFolder() && folder->isSelected())
-	{
-		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-	}
-}
-
-void LLFloaterInventory::startSearch()
-{
-	// this forces focus to line editor portion of search editor
-	if (mFilterEditor)
-	{
-		mFilterEditor->focusFirstItem(TRUE);
-	}
-}
-
-void LLFloaterInventory::onOpen(const LLSD& key)
-{
-	LLFirstUse::useInventory();
-}
-
-BOOL LLFloaterInventory::handleKeyHere(KEY key, MASK mask)
-{
-	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
-	if (root_folder)
-	{
-		// first check for user accepting current search results
-		if (mFilterEditor 
-			&& mFilterEditor->hasFocus()
-		    && (key == KEY_RETURN 
-		    	|| key == KEY_DOWN)
-		    && mask == MASK_NONE)
-		{
-			// move focus to inventory proper
-			mActivePanel->setFocus(TRUE);
-			root_folder->scrollToShowSelection();
-			return TRUE;
-		}
-
-		if (mActivePanel->hasFocus() && key == KEY_UP)
-		{
-			startSearch();
-		}
-	}
-
-	return LLFloater::handleKeyHere(key, mask);
-
-}
-
 void LLFloaterInventory::updateTitle()
 {
 	LLLocale locale(LLLocale::USER_LOCALE);
@@ -690,7 +79,7 @@ void LLFloaterInventory::updateTitle()
 
 	LLStringUtil::format_map_t string_args;
 	string_args["[ITEM_COUNT]"] = item_count_string;
-	string_args["[FILTER]"] = mFilterText;
+	string_args["[FILTER]"] = mPanelMainInventory->getFilterText();
 
 	if (LLInventoryModel::backgroundFetchActive())
 	{
@@ -699,123 +88,42 @@ void LLFloaterInventory::updateTitle()
 	else
 	{
 		setTitle(getString("TitleCompleted", string_args));
-	}	
+	}
 }
 
-
 void LLFloaterInventory::changed(U32 mask)
 {
 	updateTitle();
 }
 
-//----------------------------------------------------------------------------
-// menu callbacks
-
-void LLFloaterInventory::doToSelected(const LLSD& userdata)
-{
-	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
-}
-
-void LLFloaterInventory::closeAllFolders()
-{
-	getPanel()->getRootFolder()->closeAllFolders();
-}
-
-void LLFloaterInventory::doCreate(const LLSD& userdata)
+LLInventoryPanel* LLFloaterInventory::getPanel()
 {
-	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
+	if (mPanelMainInventory)
+		return mPanelMainInventory->getPanel();
+	return NULL;
 }
 
-void LLFloaterInventory::resetFilters()
+// static
+LLFloaterInventory* LLFloaterInventory::showAgentInventory()
 {
-	LLFloaterInventoryFinder *finder = getFinder();
-	getActivePanel()->getFilter()->resetDefault();
-	if (finder)
+	LLFloaterInventory* iv = NULL;
+	if (!gAgent.cameraMouselook())
 	{
-		finder->updateElementsFromFilter();
+		iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD());
 	}
-
-	setFilterTextFromFilter();
+	return iv;
 }
 
-void LLFloaterInventory::setSortBy(const LLSD& userdata)
+// static
+LLFloaterInventory* LLFloaterInventory::getActiveInventory()
 {
-	std::string sort_field = userdata.asString();
-	if (sort_field == "name")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
-			
-		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
-	}
-	else if (sort_field == "date")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
-
-		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
-		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
-	}
-	else if (sort_field == "foldersalwaysbyname")
+	LLFloaterInventory* res = NULL;
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	S32 z_min = S32_MAX;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
 	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
-		{
-			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
-
-			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-	else if (sort_field == "systemfolderstotop")
-	{
-		U32 order = getActivePanel()->getSortOrder();
-		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
-		{
-			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
-		}
-		else
-		{
-			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
-
-			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
-		}
-		getActivePanel()->setSortOrder( order );
-	}
-}
-
-//----------------------------------------------------------------------------
-
-// static
-LLFloaterInventory* LLFloaterInventory::showAgentInventory()
-{
-	LLFloaterInventory* iv = NULL;
-	if (!gAgent.cameraMouselook())
-	{
-		iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD());
-	}
-	return iv;
-}
-
-// static
-LLFloaterInventory* LLFloaterInventory::getActiveInventory()
-{
-	LLFloaterInventory* res = NULL;
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	S32 z_min = S32_MAX;
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
-		if (iv)
+		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
+		if (iv)
 		{
 			S32 z_order = gFloaterView->getZOrder(iv);
 			if (z_order < z_min)
@@ -842,1115 +150,7 @@ void LLFloaterInventory::cleanup()
 	}
 }
 
-void LLFloaterInventory::toggleFindOptions()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
-	LLFloater *floater = getFinder();
-	if (!floater)
-	{
-		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
-		mFinderHandle = finder->getHandle();
-		finder->openFloater();
-		addDependentFloater(mFinderHandle);
-
-		// start background fetch of folders
-		gInventory.startBackgroundFetch();
-	}
-	else
-	{
-		floater->closeFloater();
-	}
-}
-
-// static
-BOOL LLFloaterInventory::filtersVisible(void* user_data)
-{
-	LLFloaterInventory* self = (LLFloaterInventory*)user_data;
-	if(!self) return FALSE;
-
-	return self->getFinder() != NULL;
-}
-
-void LLFloaterInventory::onClearSearch()
-{
-	LLFloater *finder = getFinder();
-	if (mActivePanel)
-	{
-		mActivePanel->setFilterSubString(LLStringUtil::null);
-		mActivePanel->setFilterTypes(0xffffffff);
-	}
-
-	if (finder)
-	{
-		LLFloaterInventoryFinder::selectAllTypes(finder);
-	}
-
-	// re-open folders that were initially open
-	if (mActivePanel)
-	{
-		mSavedFolderState->setApply(TRUE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		LLOpenFoldersWithSelection opener;
-		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
-		mActivePanel->getRootFolder()->scrollToShowSelection();
-	}
-}
-
-void LLFloaterInventory::onFilterEdit(const std::string& search_string )
-{
-	if (search_string == "")
-	{
-		onClearSearch();
-	}
-	if (!mActivePanel)
-	{
-		return;
-	}
-
-	gInventory.startBackgroundFetch();
-
-	std::string uppercase_search_string = search_string;
-	LLStringUtil::toUpper(uppercase_search_string);
-	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
-	{
-			// current filter and new filter empty, do nothing
-			return;
-	}
-
-	// save current folder open state if no filter currently applied
-	if (!mActivePanel->getRootFolder()->isFilterModified())
-	{
-		mSavedFolderState->setApply(FALSE);
-		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-	}
-
-	// set new filter string
-	mActivePanel->setFilterSubString(uppercase_search_string);
-}
-
-
- //static
- BOOL LLFloaterInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
- {
- 	LLFloaterInventory* active_view = NULL;
-	
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
-	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
-	{
-		LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter);
-		if (iv)
-		{
-			if (gFocusMgr.childHasKeyboardFocus(iv))
-			{
-				active_view = iv;
-				break;
-			}
- 		}
- 	}
-
- 	if (!active_view)
- 	{
- 		return FALSE;
- 	}
-
- 	std::string search_string(find_text);
-
- 	if (search_string.empty())
- 	{
- 		return FALSE;
- 	}
-
- 	if (active_view->mActivePanel &&
- 		active_view->mActivePanel->getRootFolder()->search(first_item, search_string, backward))
- 	{
- 		return TRUE;
- 	}
-
- 	return FALSE;
- }
-
-void LLFloaterInventory::onFilterSelected()
-{
-	// Find my index
-	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
-
-	if (!mActivePanel)
-	{
-		return;
-	}
-	LLInventoryFilter* filter = mActivePanel->getFilter();
-	LLFloaterInventoryFinder *finder = getFinder();
-	if (finder)
-	{
-		finder->changeFilter(filter);
-	}
-	if (filter->isActive())
-	{
-		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
-		gInventory.startBackgroundFetch();
-	}
-	setFilterTextFromFilter();
-}
-
-BOOL LLFloaterInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-										 EDragAndDropType cargo_type,
-										 void* cargo_data,
-										 EAcceptance* accept,
-										 std::string& tooltip_msg)
-{
-	// Check to see if we are auto scrolling from the last frame
-	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
-	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
-	if(mFilterTabs)
-	{
-		if(needsToScroll)
-		{
-			mFilterTabs->startDragAndDropDelayTimer();
-		}
-	}
-	
-	BOOL handled = LLFloater::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	return handled;
-}
-const std::string& get_item_icon_name(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point,
-							 BOOL item_is_multi )
-{
-	EInventoryIcon idx = OBJECT_ICON_NAME;
-	if ( item_is_multi )
-	{
-		idx = OBJECT_MULTI_ICON_NAME;
-	}
-	
-	switch(asset_type)
-	{
-	case LLAssetType::AT_TEXTURE:
-		if(LLInventoryType::IT_SNAPSHOT == inventory_type)
-		{
-			idx = SNAPSHOT_ICON_NAME;
-		}
-		else
-		{
-			idx = TEXTURE_ICON_NAME;
-		}
-		break;
-
-	case LLAssetType::AT_SOUND:
-		idx = SOUND_ICON_NAME;
-		break;
-	case LLAssetType::AT_CALLINGCARD:
-		if(attachment_point!= 0)
-		{
-			idx = CALLINGCARD_ONLINE_ICON_NAME;
-		}
-		else
-		{
-			idx = CALLINGCARD_OFFLINE_ICON_NAME;
-		}
-		break;
-	case LLAssetType::AT_LANDMARK:
-		if(attachment_point!= 0)
-		{
-			idx = LANDMARK_VISITED_ICON_NAME;
-		}
-		else
-		{
-			idx = LANDMARK_ICON_NAME;
-		}
-		break;
-	case LLAssetType::AT_SCRIPT:
-	case LLAssetType::AT_LSL_TEXT:
-	case LLAssetType::AT_LSL_BYTECODE:
-		idx = SCRIPT_ICON_NAME;
-		break;
-	case LLAssetType::AT_CLOTHING:
-		idx = CLOTHING_ICON_NAME;
-	case LLAssetType::AT_BODYPART :
-		if(LLAssetType::AT_BODYPART == asset_type)
-		{
-			idx = BODYPART_ICON_NAME;
-		}
-		switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point)
-		{
-		case WT_SHAPE:
-			idx = BODYPART_SHAPE_ICON_NAME;
-			break;
-		case WT_SKIN:
-			idx = BODYPART_SKIN_ICON_NAME;
-			break;
-		case WT_HAIR:
-			idx = BODYPART_HAIR_ICON_NAME;
-			break;
-		case WT_EYES:
-			idx = BODYPART_EYES_ICON_NAME;
-			break;
-		case WT_SHIRT:
-			idx = CLOTHING_SHIRT_ICON_NAME;
-			break;
-		case WT_PANTS:
-			idx = CLOTHING_PANTS_ICON_NAME;
-			break;
-		case WT_SHOES:
-			idx = CLOTHING_SHOES_ICON_NAME;
-			break;
-		case WT_SOCKS:
-			idx = CLOTHING_SOCKS_ICON_NAME;
-			break;
-		case WT_JACKET:
-			idx = CLOTHING_JACKET_ICON_NAME;
-			break;
-		case WT_GLOVES:
-			idx = CLOTHING_GLOVES_ICON_NAME;
-			break;
-		case WT_UNDERSHIRT:
-			idx = CLOTHING_UNDERSHIRT_ICON_NAME;
-			break;
-		case WT_UNDERPANTS:
-			idx = CLOTHING_UNDERPANTS_ICON_NAME;
-			break;
-		case WT_SKIRT:
-			idx = CLOTHING_SKIRT_ICON_NAME;
-			break;
-		case WT_ALPHA:
-			idx = CLOTHING_ALPHA_ICON_NAME;
-			break;
-		case WT_TATTOO:
-			idx = CLOTHING_TATTOO_ICON_NAME;
-			break;
-		default:
-			// no-op, go with choice above
-			break;
-		}
-		break;
-	case LLAssetType::AT_NOTECARD:
-		idx = NOTECARD_ICON_NAME;
-		break;
-	case LLAssetType::AT_ANIMATION:
-		idx = ANIMATION_ICON_NAME;
-		break;
-	case LLAssetType::AT_GESTURE:
-		idx = GESTURE_ICON_NAME;
-		break;
-	case LLAssetType::AT_FAVORITE:
-		//TODO - need bette idx
-		idx = LANDMARK_ICON_NAME;
-		break;
-	case LLAssetType::AT_LINK:
-		idx = LINKITEM_ICON_NAME;
-		break;
-	case LLAssetType::AT_LINK_FOLDER:
-		idx = LINKFOLDER_ICON_NAME;
-		break;
-	case LLAssetType::AT_MESH:
-		idx = MESH_ICON_NAME;
-		break;
-	default:
-		break;
-	}
-	
-	return ICON_NAME[idx];
-}
-
-LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point,
-							 BOOL item_is_multi)
-{
-	const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );
-	return LLUI::getUIImage(icon_name);
-}
-
-const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
-const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
-const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
-static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
-
-LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p)
-:	LLPanel(p),
-	mInventoryObserver(NULL),
-	mFolders(NULL),
-	mScroller(NULL),
-	mSortOrderSetting(p.sort_order_setting),
-	mInventory(p.inventory),
-	mAllowMultiSelect(p.allow_multi_select),
-	mHasInventoryConnection(false),
-	mStartFolderString(p.start_folder)
-,	mBuildDefaultHierarchy(true)
-,	mInvFVBridgeBuilder(NULL)
-{
-	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
-
-	// contex menu callbacks
-	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH));
-	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND));
-	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
-	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
-	
-	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
-	setBackgroundVisible(TRUE);
-	setBackgroundOpaque(TRUE);
-}
-
-BOOL LLInventoryPanel::postBuild()
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
-
-	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
-	
-	// create root folder
-	{
-		LLRect folder_rect(0,
-						   0,
-						   getRect().getWidth(),
-						   0);
-		LLFolderView::Params p;
-		p.name = getName();
-		p.rect = folder_rect;
-		p.parent_panel = this;
-		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
-		mFolders->setAllowMultiSelect(mAllowMultiSelect);
-	}
-
-	mCommitCallbackRegistrar.popScope();
-	
-	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
-	
-	// scroller
-	{
-		LLRect scroller_view_rect = getRect();
-		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
-		LLScrollContainer::Params p;
-		p.name("Inventory Scroller");
-		p.rect(scroller_view_rect);
-		p.follows.flags(FOLLOWS_ALL);
-		p.reserve_scroll_corner(true);
-		p.tab_stop(true);
-		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
-	}
-	addChild(mScroller);
-	mScroller->addChild(mFolders);
-	
-	mFolders->setScrollContainer(mScroller);
-
-	// set up the callbacks from the inventory we're viewing, and then
-	// build everything.
-	mInventoryObserver = new LLInventoryPanelObserver(this);
-	mInventory->addObserver(mInventoryObserver);
-
-	// determine the root folder, if any, so inventory contents show just the children
-	// of that folder (i.e. not including the folder itself).
-	const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString);
-
-	if ("inventory" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getRootFolderID();
-	}
-	else if ("library" == mStartFolderString)
-	{
-		mStartFolderID = gInventory.getLibraryRootFolderID();
-	}
-	else
-	{
-		mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
-	}
-
-	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
-	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-	}
-
-	// bit of a hack to make sure the inventory is open.
-	mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory");
-
-	if (mSortOrderSetting != INHERIT_SORT_ORDER)
-	{
-		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
-	}
-	else
-	{
-		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
-	}
-	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
-
-	return TRUE;
-}
-
-LLInventoryPanel::~LLInventoryPanel()
-{
-	// should this be a global setting?
-	if (mFolders)
-	{
-		U32 sort_order = mFolders->getSortOrder();
-		if (mSortOrderSetting != INHERIT_SORT_ORDER)
-		{
-			gSavedSettings.setU32(mSortOrderSetting, sort_order);
-		}
-	}
-
-	// LLView destructor will take care of the sub-views.
-	mInventory->removeObserver(mInventoryObserver);
-	delete mInventoryObserver;
-	mScroller = NULL;
-}
-
-LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
-void LLInventoryPanel::draw()
-{
-	// select the desired item (in case it wasn't loaded when the selection was requested)
-	mFolders->updateSelection();
-	LLPanel::draw();
-}
-
-void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
-{
-	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
-}	
-
-void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
-{
-	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
-}
-
-void LLInventoryPanel::setFilterSubString(const std::string& string)
-{
-	mFolders->getFilter()->setFilterSubString(string);
-}
-
-void LLInventoryPanel::setSortOrder(U32 order)
-{
-	mFolders->getFilter()->setSortOrder(order);
-	if (mFolders->getFilter()->isModified())
-	{
-		mFolders->setSortOrder(order);
-		// try to keep selection onscreen, even if it wasn't to start with
-		mFolders->scrollToShowSelection();
-	}
-}
-
-void LLInventoryPanel::setSinceLogoff(BOOL sl)
-{
-	mFolders->getFilter()->setDateRangeLastLogoff(sl);
-}
-
-void LLInventoryPanel::setHoursAgo(U32 hours)
-{
-	mFolders->getFilter()->setHoursAgo(hours);
-}
-
-void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
-{
-	mFolders->getFilter()->setShowFolderState(show);
-}
-
-LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
-{
-	return mFolders->getFilter()->getShowFolderState();
-}
-
-static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
-
-void LLInventoryPanel::modelChanged(U32 mask)
-{
-	LLFastTimer t2(FTM_REFRESH);
-
-	bool handled = false;
-
-	// inventory just initialized, do complete build
-	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
-	{
-		rebuildViewsFor(mStartFolderID);
-		mHasInventoryConnection = true;
-		return;
-	}
-
-	if(mask & LLInventoryObserver::LABEL)
-	{
-		handled = true;
-		// label change - empty out the display name for each object
-		// in this change set.
-		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-		std::set<LLUUID>::const_iterator id_end = changed_items.end();
-		LLFolderViewItem* view = NULL;
-		LLInvFVBridge* bridge = NULL;
-		for (;id_it != id_end; ++id_it)
-		{
-			view = mFolders->getItemByID(*id_it);
-			if(view)
-			{
-				// request refresh on this item (also flags for filtering)
-				bridge = (LLInvFVBridge*)view->getListener();
-				if(bridge)
-				{	// Clear the display name first, so it gets properly re-built during refresh()
-					bridge->clearDisplayName();
-				}
-				view->refresh();
-			}
-		}
-	}
-	if((mask & (LLInventoryObserver::STRUCTURE
-				| LLInventoryObserver::ADD
-				| LLInventoryObserver::REMOVE)) != 0)
-	{
-		handled = true;
-		// Record which folders are open by uuid.
-		LLInventoryModel* model = getModel();
-		if (model)
-		{
-			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
-
-			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
-			std::set<LLUUID>::const_iterator id_end = changed_items.end();
-			for (;id_it != id_end; ++id_it)
-			{
-				// sync view with model
-				LLInventoryObject* model_item = model->getObject(*id_it);
-				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
-
-				if (model_item)
-				{
-					if (!view_item)
-					{
-						// this object was just created, need to build a view for it
-						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
-						{
-							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
-						}
-						buildNewViews(*id_it);
-						
-						// select any newly created object
-						// that has the auto rename at top of folder
-						// root set
-						if(mFolders->getRoot()->needsAutoRename())
-						{
-							setSelection(*id_it, FALSE);
-						}
-					}
-					else
-					{
-						// this object was probably moved, check its parent
-						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
-						{
-							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << llendl;
-						}
-
-						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
-
-						// added check against NULL for cases when Inventory panel contains startFolder.
-						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
-						// this check is a fix for bug EXT-1859.
-						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
-						{
-							view_item->getParentFolder()->extractItem(view_item);
-							view_item->addToFolder(new_parent, mFolders);
-						}
-					}
-				}
-				else
-				{
-					if (view_item)
-					{
-						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
-						{
-							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
-						}
-						// item in view but not model, need to delete view
-						view_item->destroyView();
-					}
-					else
-					{
-						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
-					}
-				}
-			}
-		}
-	}
-
-	if (!handled)
-	{
-		// it's a small change that only requires a refresh.
-		// *TODO: figure out a more efficient way to do the refresh
-		// since it is expensive on large inventories
-		mFolders->refresh();
-	}
-}
-
-
-void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
-{
-	LLFolderViewItem* old_view = NULL;
-
-	// get old LLFolderViewItem
-	old_view = mFolders->getItemByID(id);
-	if (old_view && id.notNull())
-	{
-		old_view->destroyView();
-	}
-
-	buildNewViews(id);
-}
-
-void LLInventoryPanel::buildNewViews(const LLUUID& id)
-{
-	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
-	LLFolderViewItem* itemp = NULL;
-	LLInventoryObject* objectp = NULL;
-
-	// Don't add the start folder (the inventory panel will show contents
-	// beginning with the children of the starting folder, excluding the starting folder itself).
-	if (id != mStartFolderID)
-	{
-		objectp = gInventory.getObject(id);
-		if (objectp)
-		{		
-			const LLUUID &parent_id = objectp->getParentUUID();
-			// If this item's parent is the starting folder, then just add it to the top level (recall that 
-			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
-			// this case otherwise).
-			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
-				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
-
-			// This item exists outside the inventory's hierarchy, so don't add it.
-			if (!parent_folder)
-			{
-				return;
-			}
-
-			if (objectp->getType() <= LLAssetType::AT_NONE ||
-				objectp->getType() >= LLAssetType::AT_COUNT)
-			{
-				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
-					((S32) objectp->getType()) << llendl;
-				return;
-			}
-			
-			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
-					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
-			{
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
-																				objectp->getType(),
-																				LLInventoryType::IT_CATEGORY,
-																				this,
-																				objectp->getUUID());
-
-				if (new_listener)
-				{
-					LLFolderViewFolder::Params p;
-					p.name = new_listener->getDisplayName();
-					p.icon = new_listener->getIcon();
-					p.root = mFolders;
-					p.listener = new_listener;
-					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
-				
-					folderp->setItemSortOrder(mFolders->getSortOrder());
-					itemp = folderp;
-				}
-			}
-			else 
-			{
-				// Build new view for item
-				LLInventoryItem* item = (LLInventoryItem*)objectp;
-				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
-																				item->getActualType(),
-																				item->getInventoryType(),
-																				this,
-																				item->getUUID(),
-																				item->getFlags());
-
-				if (new_listener)
-				{
-					LLFolderViewItem::Params params;
-					params.name(new_listener->getDisplayName());
-					params.icon(new_listener->getIcon());
-					params.creation_date(new_listener->getCreationDate());
-					params.root(mFolders);
-					params.listener(new_listener);
-					params.rect(LLRect (0, 0, 0, 0));
-					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
-				}
-			}
-
-			if (itemp)
-			{
-				itemp->addToFolder(parent_folder, mFolders);
-			}
-		}
-	}
-
-	// If this is a folder, add the children of the folder and recursively add any 
-	// child folders.
-	if ((id == mStartFolderID) ||
-		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
-	{
-		LLViewerInventoryCategory::cat_array_t* categories;
-		LLViewerInventoryItem::item_array_t* items;
-
-		mInventory->lockDirectDescendentArrays(id, categories, items);
-		if(categories)
-		{
-			S32 count = categories->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryCategory* cat = categories->get(i);
-				buildNewViews(cat->getUUID());
-			}
-		}
-		if(items)
-		{
-			S32 count = items->count();
-			for(S32 i = 0; i < count; ++i)
-			{
-				LLInventoryItem* item = items->get(i);
-				buildNewViews(item->getUUID());
-			}
-		}
-		mInventory->unlockDirectDescendentArrays(id);
-	}
-}
-
-struct LLConfirmPurgeData
-{
-	LLUUID mID;
-	LLInventoryModel* mModel;
-};
-
-class LLIsNotWorn : public LLInventoryCollectFunctor
-{
-public:
-	LLIsNotWorn() {}
-	virtual ~LLIsNotWorn() {}
-	virtual bool operator()(LLInventoryCategory* cat,
-							LLInventoryItem* item)
-	{
-		return !gAgentWearables.isWearingItem(item->getUUID());
-	}
-};
-
-class LLOpenFolderByID : public LLFolderViewFunctor
-{
-public:
-	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
-	virtual ~LLOpenFolderByID() {}
-	virtual void doFolder(LLFolderViewFolder* folder)
-		{
-			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
-		}
-	virtual void doItem(LLFolderViewItem* item) {}
-protected:
-	const LLUUID& mID;
-};
-
-
-void LLInventoryPanel::openSelected()
-{
-	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
-	if(!folder_item) return;
-	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
-	if(!bridge) return;
-	bridge->openItem();
-}
-
-BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
-{
-	BOOL handled = LLView::handleHover(x, y, mask);
-	if(handled)
-	{
-		ECursorType cursor = getWindow()->getCursor();
-		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
-		{
-			// replace arrow cursor with arrow and hourglass cursor
-			getWindow()->setCursor(UI_CURSOR_WORKING);
-		}
-	}
-	else
-	{
-		getWindow()->setCursor(UI_CURSOR_ARROW);
-	}
-	return TRUE;
-}
-
-BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data,
-								   EAcceptance* accept,
-								   std::string& tooltip_msg)
-{
-
-	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
-
-	if (handled)
-	{
-		mFolders->setDragAndDropThisFrame();
-	}
-
-	return handled;
-}
-
-void LLInventoryPanel::onFocusLost()
-{
-	// inventory no longer handles cut/copy/paste/delete
-	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
-	{
-		LLEditMenuHandler::gEditMenuHandler = NULL;
-	}
-
-	LLPanel::onFocusLost();
-}
-
-void LLInventoryPanel::onFocusReceived()
-{
-	// inventory now handles cut/copy/paste/delete
-	LLEditMenuHandler::gEditMenuHandler = mFolders;
-
-	LLPanel::onFocusReceived();
-}
-
-
-void LLInventoryPanel::openAllFolders()
-{
-	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
-	mFolders->arrangeAll();
-}
-
-void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type)
-{
-	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
-	LLOpenFolderByID opener(category_id);
-	mFolders->applyFunctorRecursively(opener);
-}
-
-void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
-{
-	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
-	const LLInventoryObject *obj = gInventory.getObject(obj_id);
-	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
-	{
-		return;
-	}
-	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
-}
-
-void LLInventoryPanel::clearSelection()
-{
-	mFolders->clearSelection();
-}
-
-void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
-{
-	LLFolderView* fv = getRootFolder();
-	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
-	{
-		fv->setNeedsAutoRename(FALSE);
-		if (items.size()) // new asset is visible and selected
-		{
-			fv->startRenamingSelectedItem();
-		}
-	}
-	// Seraph - Put determineFolderType in here for ensemble typing?
-}
-
-//----------------------------------------------------------------------------
-
-void LLInventoryPanel::doToSelected(const LLSD& userdata)
-{
-	mFolders->doToSelected(&gInventory, userdata);
-}
-
-void LLInventoryPanel::doCreate(const LLSD& userdata)
-{
-	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
-}
-
-bool LLInventoryPanel::beginIMSession()
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string name;
-	static int session_num = 1;
-
-	LLDynamicArray<LLUUID> members;
-	EInstantMessage type = IM_SESSION_CONFERENCE_START;
-
-	std::set<LLUUID>::const_iterator iter;
-	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
-	{
-
-		LLUUID item = *iter;
-		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-			
-		if(folder_item) 
-		{
-			LLFolderViewEventListener* fve_listener = folder_item->getListener();
-			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
-			{
-
-				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
-				if(!bridge) return true;
-				LLViewerInventoryCategory* cat = bridge->getCategory();
-				if(!cat) return true;
-				name = cat->getName();
-				LLUniqueBuddyCollector is_buddy;
-				LLInventoryModel::cat_array_t cat_array;
-				LLInventoryModel::item_array_t item_array;
-				gInventory.collectDescendentsIf(bridge->getUUID(),
-												cat_array,
-												item_array,
-												LLInventoryModel::EXCLUDE_TRASH,
-												is_buddy);
-				S32 count = item_array.count();
-				if(count > 0)
-				{
-					LLFloaterReg::showInstance("communicate");
-					// create the session
-					LLAvatarTracker& at = LLAvatarTracker::instance();
-					LLUUID id;
-					for(S32 i = 0; i < count; ++i)
-					{
-						id = item_array.get(i)->getCreatorUUID();
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				}
-			}
-			else
-			{
-				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
-				if(!folder_item) return true;
-				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
-
-				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
-				{
-					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
-
-					if (inv_item)
-					{
-						LLAvatarTracker& at = LLAvatarTracker::instance();
-						LLUUID id = inv_item->getCreatorUUID();
-
-						if(at.isBuddyOnline(id))
-						{
-							members.put(id);
-						}
-					}
-				} //if IT_CALLINGCARD
-			} //if !IT_CATEGORY
-		}
-	} //for selected_items	
-
-	// the session_id is randomly generated UUID which will be replaced later
-	// with a server side generated number
-
-	if (name.empty())
-	{
-		name = llformat("Session %d", session_num++);
-	}
-
-	gIMMgr->addSession(name, type, members[0], members);
-		
-	return true;
-}
-
-bool LLInventoryPanel::attachObject(const LLSD& userdata)
-{
-	std::set<LLUUID> selected_items;
-	mFolders->getSelectionList(selected_items);
-
-	std::string joint_name = userdata.asString();
-	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
-	LLViewerJointAttachment* attachmentp = NULL;
-	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
-		 iter != avatarp->mAttachmentPoints.end(); )
-	{
-		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-		LLViewerJointAttachment* attachment = curiter->second;
-		if (attachment->getName() == joint_name)
-		{
-			attachmentp = attachment;
-			break;
-		}
-	}
-	if (attachmentp == NULL)
-	{
-		return true;
-	}
-
-	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
-		 set_iter != selected_items.end(); 
-		 ++set_iter)
-	{
-		const LLUUID &id = *set_iter;
-		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
-		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
-		{
-			rez_attachment(item, attachmentp);
-		}
-		else if(item && item->isComplete())
-		{
-			// must be in library. copy it to our inventory and put it on.
-			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
-			copy_inventory_item(gAgent.getID(),
-								item->getPermissions().getOwner(),
-								item->getUUID(),
-								LLUUID::null,
-								std::string(),
-								cb);
-		}
-	}
-	gFocusMgr.setKeyboardFocus(NULL);
-
-	return true;
-}
-
-
-//----------------------------------------------------------------------------
-
-// static DEBUG ONLY:
-void LLInventoryPanel::dumpSelectionInformation(void* user_data)
-{
-	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
-	iv->mFolders->dumpSelectionInformation();
-}
-
-BOOL LLInventoryPanel::getSinceLogoff()
-{
-	return mFolders->getFilter()->isSinceLogoff();
-}
-
-void example_param_block_usage()
+void LLFloaterInventory::onOpen(const LLSD& key)
 {
-	LLInventoryPanel::Params param_block;
-	param_block.name(std::string("inventory"));
-
-	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
-	param_block.allow_multi_select(true);
-	param_block.filter(LLInventoryPanel::Filter()
-			.sort_order(1)
-			.types(0xffff0000));
-	param_block.inventory(&gInventory);
-	param_block.has_border(true);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
-
-	param_block = LLInventoryPanel::Params();
-	param_block.name(std::string("inventory"));
-
-	//LLSD param_block_sd;
-	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
-	//param_block_sd["allow_multi_select"] = true;
-	//param_block_sd["filter"]["sort_order"] = 1;
-	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
-	//param_block_sd["has_border"] = true;
-
-	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
-
-	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+	LLFirstUse::useInventory();
 }
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index 4c9ac5d4c682de1723e371d943447b46b5f64bb4..c0de89bff22389a3b40adb3fa1ae5a9ddae8e247 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -31,366 +31,55 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLINVENTORYVIEW_H
-#define LL_LLINVENTORYVIEW_H
+#ifndef LL_LLFLOATERINVENTORY_H
+#define LL_LLFLOATERINVENTORY_H
 
-#include "llassetstorage.h"
-#include "lldarray.h"
 #include "llfloater.h"
-#include "llinventory.h"
-#include "llinventoryfilter.h"
-#include "llfolderview.h"
-#include "llinventorymodel.h"
-#include "lluictrlfactory.h"
-#include <set>
+#include "llfoldertype.h"
 
+class LLInventoryPanel;
+class LLPanelMainInventory;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLFloaterInventory
 //
-// This is the agent inventory _floater_.
-// It deals with the buttons and views used to navigate as
-// well as controls the behavior of the overall object.
+// This deals with the buttons and views used to navigate as
+// well as controlling the behavior of the overall object.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-class LLFolderViewItem;
-class LLInventoryFilter;
-class LLInventoryModel;
-class LLInvFVBridge;
-class LLInventoryFVBridgeBuilder;
-class LLMenuBarGL;
-class LLCheckBoxCtrl;
-class LLSpinCtrl;
-class LLScrollContainer;
-class LLTextBox;
-class LLIconCtrl;
-class LLSaveFolderState;
-class LLFilterEditor;
-class LLTabContainer;
-
-class LLInventoryPanel : public LLPanel
+class LLFloaterInventory : public LLFloater
 {
-public:
-	static const std::string DEFAULT_SORT_ORDER;
-	static const std::string RECENTITEMS_SORT_ORDER;
-	static const std::string INHERIT_SORT_ORDER;
-
-	struct Filter : public LLInitParam::Block<Filter>
-	{
-		Optional<U32>			sort_order;
-		Optional<U32>			types;
-		Optional<std::string>	search_string;
-
-		Filter()
-		:	sort_order("sort_order"),
-			types("types", 0xffffffff),
-			search_string("search_string")
-		{}
-	};
-
-	struct Params 
-	:	public LLInitParam::Block<Params, LLPanel::Params>
-	{
-		Optional<std::string>				sort_order_setting;
-		Optional<LLInventoryModel*>			inventory;
-		Optional<bool>						allow_multi_select;
-		Optional<Filter>					filter;
-		Optional<std::string>               start_folder;
-
-		Params()
-		:	sort_order_setting("sort_order_setting"),
-			inventory("", &gInventory),
-			allow_multi_select("allow_multi_select", true),
-			filter("filter"),
-			start_folder("start_folder")
-		{}
-	};
-
-protected:
-	LLInventoryPanel(const Params&);
-	friend class LLUICtrlFactory;
-
-public:
-	virtual ~LLInventoryPanel();
-
-	LLInventoryModel* getModel() { return mInventory; }
-
-	BOOL postBuild();
-
-	// LLView methods
-	void draw();
-	BOOL handleHover(S32 x, S32 y, MASK mask);
-	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-								   EDragAndDropType cargo_type,
-								   void* cargo_data,
-								   EAcceptance* accept,
-								   std::string& tooltip_msg);
-	// LLUICtrl methods
-	 /*virtual*/ void onFocusLost();
-	 /*virtual*/ void onFocusReceived();
-
-	// Call this method to set the selection.
-	void openAllFolders();
-	void openDefaultFolderForType(LLAssetType::EType);
-	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
-	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
-	void clearSelection();
-	LLInventoryFilter* getFilter() { return mFolders->getFilter(); }
-	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
-	U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
-	void setFilterPermMask(PermissionMask filter_perm_mask);
-	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
-	void setFilterSubString(const std::string& string);
-	const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
-	void setSortOrder(U32 order);
-	U32 getSortOrder() { return mFolders->getSortOrder(); }
-	void setSinceLogoff(BOOL sl);
-	void setHoursAgo(U32 hours);
-	BOOL getSinceLogoff();
-	
-	void setShowFolderState(LLInventoryFilter::EFolderShow show);
-	LLInventoryFilter::EFolderShow getShowFolderState();
-	void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
-	// This method is called when something has changed about the inventory.
-	void modelChanged(U32 mask);
-	LLFolderView* getRootFolder() { return mFolders; }
-	LLScrollContainer* getScrollableContainer() { return mScroller; }
-	
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-	
-	// Callbacks
-	void doToSelected(const LLSD& userdata);
-	void doCreate(const LLSD& userdata);
-	bool beginIMSession();
-	bool attachObject(const LLSD& userdata);
-	
-	// DEBUG ONLY:
-	static void dumpSelectionInformation(void* user_data);
-
-	void openSelected();
-	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); }
-	
-protected:
-	// Given the id and the parent, build all of the folder views.
-	void rebuildViewsFor(const LLUUID& id);
-	virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719
-
-protected:
-	LLInventoryModel*			mInventory;
-	LLInventoryObserver*		mInventoryObserver;
-	BOOL 						mAllowMultiSelect;
-	std::string					mSortOrderSetting;
-
-//private: // Can not make these private - needed by llinventorysubtreepanel
-	LLFolderView*				mFolders;
-	std::string                 mStartFolderString;
-
-	/**
-	 * Contains UUID of Inventory item from which hierarchy should be built.
-	 * Can be set with the "start_folder" xml property.
-	 * Default is LLUUID::null that means total Inventory hierarchy.
-	 */
-	LLUUID						mStartFolderID;
-	LLScrollContainer*			mScroller;
-	bool						mHasInventoryConnection;
-
-	/**
-	 * Flag specified if default inventory hierarchy should be created in postBuild()
-	 */
-	bool						mBuildDefaultHierarchy;
-
-	LLUUID						mRootInventoryItemUUID;
-
-	/**
-	 * Pointer to LLInventoryFVBridgeBuilder.
-	 *
-	 * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with 
-	 * another implementation.
-	 * Take into account it will not be deleted by LLInventoryPanel itself.
-	 */
-	const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
-
-};
-
-class LLFloaterInventory;
-
-class LLFloaterInventoryFinder : public LLFloater
-{
-public:
-	LLFloaterInventoryFinder( LLFloaterInventory* inventory_view);
-	virtual void draw();
-	/*virtual*/	BOOL	postBuild();
-	void changeFilter(LLInventoryFilter* filter);
-	void updateElementsFromFilter();
-	BOOL getCheckShowEmpty();
-	BOOL getCheckSinceLogoff();
-
-	static void onTimeAgo(LLUICtrl*, void *);
-	static void onCheckSinceLogoff(LLUICtrl*, void *);
-	static void onCloseBtn(void* user_data);
-	static void selectAllTypes(void* user_data);
-	static void selectNoTypes(void* user_data);
-
-protected:
-	LLFloaterInventory*	mFloaterInventory;
-	LLSpinCtrl*			mSpinSinceDays;
-	LLSpinCtrl*			mSpinSinceHours;
-	LLInventoryFilter*	mFilter;
-};
-
-class LLFloaterInventory : public LLFloater, LLInventoryObserver
-{
-friend class LLFloaterInventoryFinder;
-
 public:
 	LLFloaterInventory(const LLSD& key);
 	~LLFloaterInventory();
 
-	/*virtual*/ void changed(U32 mask);
-
-	 BOOL postBuild();
-
-	//
-	// Misc functions
-	//
-	void setFilterTextFromFilter() { mFilterText = mActivePanel->getFilter()->getFilterText(); }
-	void startSearch();
-	
-	// This method makes sure that an inventory view exists, is
-	// visible, and has focus. The view chosen is returned.
-	static LLFloaterInventory* showAgentInventory();
+	BOOL postBuild();
 
 	// Return the active inventory view if there is one. Active is
 	// defined as the inventory that is the closest to the front, and
 	// is visible.
 	static LLFloaterInventory* getActiveInventory();
 
-	// This method calls showAgentInventory() if no views are visible,
-	// or hides/destroyes them all if any are visible.
-	static void toggleVisibility();
-	static void toggleVisibility(void*) { toggleVisibility(); }
+	// This method makes sure that an inventory view exists, is
+	// visible, and has focus. The view chosen is returned.
+	static LLFloaterInventory* showAgentInventory();
 
 	// Final cleanup, destroy all open inventory views.
 	static void cleanup();
 
-	// LLView & LLFloater functionality
-	virtual void onOpen(const LLSD& key);
-	virtual void draw();
-	virtual BOOL handleKeyHere(KEY key, MASK mask);
-
-	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-		EDragAndDropType cargo_type,
-		void* cargo_data,
-		EAcceptance* accept,
-		std::string& tooltip_msg);
-
-
-	LLInventoryPanel* getPanel() { return mActivePanel; }
-	LLInventoryPanel* getActivePanel() { return mActivePanel; }
-
-	static BOOL filtersVisible(void* user_data);
-	void onClearSearch();
-	static void onFoldersByName(void *user_data);
-	static BOOL checkFoldersByName(void *user_data);
-	void onFilterEdit(const std::string& search_string );
-	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
-	void onFilterSelected();
-
-	const std::string getFilterSubString() { return mActivePanel->getFilterSubString(); }
-	void setFilterSubString(const std::string& string) { mActivePanel->setFilterSubString(string); }
-	
-	// menu callbacks
-	void doToSelected(const LLSD& userdata);
-	void closeAllFolders();
-	void doCreate(const LLSD& userdata);
-	void resetFilters();
-	void setSortBy(const LLSD& userdata);
-	
-	// HACK: Until we can route this info through the instant message hierarchy
-	static BOOL sWearNewClothing;
-	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction
-
-	void toggleFindOptions();
-
-	LLFloaterInventoryFinder* getFinder() { return (LLFloaterInventoryFinder*)mFinderHandle.get(); }
+	// Inherited functionality
+	/*virtual*/ void changed(U32 mask);
+	/*virtual*/ void draw();
+	/*virtual*/ void onOpen(const LLSD& key);
 
+	LLInventoryPanel* getPanel();
 protected:
-	LLFilterEditor*				mFilterEditor;
-	LLTabContainer*				mFilterTabs;
-	LLHandle<LLFloater>			mFinderHandle;
-	LLInventoryPanel*			mActivePanel;
-	LLSaveFolderState*			mSavedFolderState;
-
-	std::string					mFilterText;
-
-private:
 	void updateTitle();
+private:
+	LLPanelMainInventory* mPanelMainInventory;
 };
 
-class LLSelectFirstFilteredItem : public LLFolderViewFunctor
-{
-public:
-	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
-	virtual ~LLSelectFirstFilteredItem() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-	BOOL wasItemSelected() { return mItemSelected; }
-protected:
-	BOOL	mItemSelected;
-};
-
-class LLOpenFilteredFolders : public LLFolderViewFunctor
-{
-public:
-	LLOpenFilteredFolders()  {}
-	virtual ~LLOpenFilteredFolders() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-};
-
-class LLSaveFolderState : public LLFolderViewFunctor
-{
-public:
-	LLSaveFolderState() : mApply(FALSE) {}
-	virtual ~LLSaveFolderState() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item) {}
-	void setApply(BOOL apply);
-	void clearOpenFolders() { mOpenFolders.clear(); }
-protected:
-	std::set<LLUUID> mOpenFolders;
-	BOOL mApply;
-};
-
-class LLOpenFoldersWithSelection : public LLFolderViewFunctor
-{
-public:
-	LLOpenFoldersWithSelection() {}
-	virtual ~LLOpenFoldersWithSelection() {}
-	virtual void doFolder(LLFolderViewFolder* folder);
-	virtual void doItem(LLFolderViewItem* item);
-};
-
-///----------------------------------------------------------------------------
-/// Function declarations, constants, enums, and typedefs
-///----------------------------------------------------------------------------
-
-// useful functions with the inventory view
-
-class LLInventoryCategory;
-class LLInventoryItem;
-
-const std::string& get_item_icon_name(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point, 
-							 BOOL item_is_multi );
-
-LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
-							 LLInventoryType::EType inventory_type,
-							 U32 attachment_point, 
-							 BOOL item_is_multi );
-
-#endif // LL_LLINVENTORYVIEW_H
+#endif // LL_LLFLOATERINVENTORY_H
 
 
 
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index bdf9842b015ec8288cf50389062d7476d5626533..015a947d9179a730f4b993a650c256e9907bbd14 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1519,7 +1519,9 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		}
 
 		// Placeholder for name.
-		item_params.columns.add().font(FONT).column("name");
+		std::string name;
+		gCacheName->getFullName(owner_id, name);		
+		item_params.columns.add().value(name).font(FONT).column("name");
 
 		object_count_str = llformat("%d", object_count);
 		item_params.columns.add().value(object_count_str).font(FONT).column("count");
@@ -1743,7 +1745,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
 	mClearBtn(NULL),
 	mMatureCtrl(NULL),
 	mPushRestrictionCtrl(NULL),
-	mPublishHelpButton(NULL),
 	mParcel(parcel)
 {
 }
@@ -1812,14 +1813,9 @@ BOOL LLPanelLandOptions::postBuild()
 	mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck");
 	childSetCommitCallback("MatureCheck", onCommitAny, this);
 	
-	mPublishHelpButton = getChild<LLButton>("?");
-	mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
-
 	if (gAgent.wantsPGOnly())
 	{
 		// Disable these buttons if they are PG (Teen) users
-		mPublishHelpButton->setVisible(FALSE);
-		mPublishHelpButton->setEnabled(FALSE);
 		mMatureCtrl->setVisible(FALSE);
 		mMatureCtrl->setEnabled(FALSE);
 	}
@@ -1912,7 +1908,6 @@ void LLPanelLandOptions::refresh()
 		mClearBtn->setEnabled(FALSE);
 
 		mMatureCtrl->setEnabled(FALSE);
-		mPublishHelpButton->setEnabled(FALSE);
 	}
 	else
 	{
@@ -1988,13 +1983,9 @@ void LLPanelLandOptions::refresh()
 		mSetBtn->setEnabled( can_change_landing_point );
 		mClearBtn->setEnabled( can_change_landing_point );
 
-		mPublishHelpButton->setEnabled( can_change_identity );
-
 		if (gAgent.wantsPGOnly())
 		{
 			// Disable these buttons if they are PG (Teen) users
-			mPublishHelpButton->setVisible(FALSE);
-			mPublishHelpButton->setEnabled(FALSE);
 			mMatureCtrl->setVisible(FALSE);
 			mMatureCtrl->setEnabled(FALSE);
 		}
@@ -2247,28 +2238,6 @@ void LLPanelLandOptions::onClickClear(void* userdata)
 	self->refresh();
 }
 
-// static
-void LLPanelLandOptions::onClickPublishHelp(void*)
-{
-	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
-	LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel();
-	llassert(region); // Region should never be null.
-
-	bool can_change_identity = region && parcel ? 
-		LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) &&
-		! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false;
-
-	if(! can_change_identity)
-	{
-		LLNotifications::instance().add("ClickPublishHelpLandDisabled");
-	}
-	else
-	{
-		LLNotifications::instance().add("ClickPublishHelpLand");
-	}
-}
-
-
 
 //---------------------------------------------------------------------------
 // LLPanelLandAccess
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 749c3951477b7df1004884bf775f2f0e4df26e21..f7fb978c2a1d318c106e96e70092a121c635ec18 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -320,7 +320,6 @@ class LLPanelLandOptions
 	static void onCommitAny(LLUICtrl* ctrl, void *userdata);
 	static void onClickSet(void* userdata);
 	static void onClickClear(void* userdata);
-	static void onClickPublishHelp(void*);
 
 private:
 	LLCheckBoxCtrl*	mCheckEditObjects;
@@ -345,7 +344,6 @@ class LLPanelLandOptions
 
 	LLCheckBoxCtrl		*mMatureCtrl;
 	LLCheckBoxCtrl		*mPushRestrictionCtrl;
-	LLButton			*mPublishHelpButton;
 
 	LLSafeHandle<LLParcelSelection>&	mParcel;
 };
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 0c9a759f32036b3db475c2b604e6137426cd5679..3fe711a1664d4f1c972271a7755b33033cfe7afe 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -50,12 +50,27 @@
 #include "lltextbox.h"
 #include "llviewermenu.h"
 
+//
+// Constants
+//
+const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f;
+
 //
 // Member functions
 //
 
 LLFloaterMap::LLFloaterMap(const LLSD& key) 
-	: LLFloater(key)
+	: LLFloater(key),
+	  mPopupMenu(NULL),
+	  mTextBoxEast(NULL),
+	  mTextBoxNorth(NULL),
+	  mTextBoxWest(NULL),
+	  mTextBoxSouth(NULL),
+	  mTextBoxSouthEast(NULL),
+	  mTextBoxNorthEast(NULL),
+	  mTextBoxNorthWest(NULL),
+	  mTextBoxSouthWest(NULL),
+	  mMap(NULL)
 {
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE);
 }
@@ -92,6 +107,8 @@ BOOL LLFloaterMap::postBuild()
 		mPopupMenu->setItemEnabled ("Stop Tracking", false);
 	}
 
+	updateMinorDirections();
+
 	// Get the drag handle all the way in back
 	sendChildToBack(getDragHandle());
 
@@ -139,6 +156,23 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )
 		llround(map_half_height - text_half_height + radius * sin( rotation )) );
 }
 
+void LLFloaterMap::updateMinorDirections()
+{
+	if (mTextBoxNorthEast == NULL)
+	{
+		return;
+	}
+
+	// Hide minor directions if they cover too much of the map
+	bool show_minors = mTextBoxNorthEast->getRect().getHeight() < MAP_MINOR_DIR_THRESHOLD *
+		llmin(getRect().getWidth(), getRect().getHeight());
+
+	mTextBoxNorthEast->setVisible(show_minors);
+	mTextBoxNorthWest->setVisible(show_minors);
+	mTextBoxSouthWest->setVisible(show_minors);
+	mTextBoxSouthEast->setVisible(show_minors);
+}
+
 // virtual
 void LLFloaterMap::draw()
 {
@@ -180,17 +214,23 @@ void LLFloaterMap::draw()
 	LLFloater::draw();
 }
 
+void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	LLFloater::reshape(width, height, called_from_parent);
+	updateMinorDirections();
+}
+
 void LLFloaterMap::handleZoom(const LLSD& userdata)
 {
 	std::string level = userdata.asString();
 	
 	F32 scale = 0.0f;
 	if (level == std::string("close"))
-		scale = MAP_SCALE_MAX;
+		scale = LLNetMap::MAP_SCALE_MAX;
 	else if (level == std::string("medium"))
-		scale = MAP_SCALE_MID;
+		scale = LLNetMap::MAP_SCALE_MID;
 	else if (level == std::string("far"))
-		scale = MAP_SCALE_MIN;
+		scale = LLNetMap::MAP_SCALE_MIN;
 	if (scale != 0.0f)
 	{
 		gSavedSettings.setF32("MiniMapScale", scale );
diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h
index 501777ed0787fec381509c344931e6c6100ee286..6c9138c6a7ee99bb4d3c2e6e087ee0460b920833 100644
--- a/indra/newview/llfloatermap.h
+++ b/indra/newview/llfloatermap.h
@@ -51,12 +51,14 @@ class LLFloaterMap : public LLFloater
 	/*virtual*/ BOOL 	postBuild();
 	/*virtual*/ BOOL	handleDoubleClick( S32 x, S32 y, MASK mask );
 	/*virtual*/ BOOL	handleRightMouseDown( S32 x, S32 y, MASK mask );
+	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	/*virtual*/ void	draw();
 	
 private:
 	void handleZoom(const LLSD& userdata);
 	void handleStopTracking (const LLSD& userdata);
 	void setDirectionPos( LLTextBox* text_box, F32 rotation );
+	void updateMinorDirections();
 	
 	LLMenuGL*		mPopupMenu;
 
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index d941f24f49e0ca81c338306eebb48b51f22974ca..44e68d77455df757c92a665c13c395fc9fa465f3 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -145,13 +145,18 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()
 //static 
 void LLFloaterMediaSettings::apply()
 {
-	
     LLSD settings;
+	sInstance->mPanelMediaSettingsGeneral->preApply();
     sInstance->mPanelMediaSettingsGeneral->getValues( settings );
-    sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+	sInstance->mPanelMediaSettingsSecurity->preApply();
+	sInstance->mPanelMediaSettingsSecurity->getValues( settings );
+	sInstance->mPanelMediaSettingsPermissions->preApply();
     sInstance->mPanelMediaSettingsPermissions->getValues( settings );
 	LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA );
     LLSelectMgr::getInstance()->selectionSetMediaData(settings);
+	sInstance->mPanelMediaSettingsGeneral->postApply();
+	sInstance->mPanelMediaSettingsSecurity->postApply();
+	sInstance->mPanelMediaSettingsPermissions->postApply();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index ed7d2c71eaab9c89e15130abbaf31ad4d6f5be00..b7296518d460dddc3066068cb8171b8c7ea908c1 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -176,7 +176,7 @@ void LLFloaterNameDesc::onBtnOK( )
 	upload_new_resource(mFilenameAndPath, // file
 			    childGetValue("name_form").asString(), 
 			    childGetValue("description_form").asString(), 
-			    0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE,
+			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 			    display_name, callback, expected_upload_cost, nruserdata);
 	closeFloater(false);
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index aa82dc34b74a56965db27bfc9be6b4805b526843..e277aba493c67fc2739e00fd0671cca4dfba7eb9 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -32,7 +32,7 @@
 
 /*
  * Shows the contents of an object.
- * A floater wrapper for llpanelinventory
+ * A floater wrapper for LLPanelObjectInventory
  */
 
 #include "llviewerprecompiledheaders.h"
@@ -47,7 +47,8 @@
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
 #include "llinventorymodel.h"
-#include "llpanelinventory.h"
+#include "llinventorypanel.h"
+#include "llpanelobjectinventory.h"
 #include "llfloaterreg.h"
 #include "llselectmgr.h"
 #include "lluiconstants.h"
@@ -58,7 +59,7 @@
 
 LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key)
 :	LLFloater(key),
-	mPanelInventory(NULL),
+	mPanelInventoryObject(NULL),
 	mDirty(TRUE)
 {
 //	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml");
@@ -74,7 +75,7 @@ LLFloaterOpenObject::~LLFloaterOpenObject()
 BOOL LLFloaterOpenObject::postBuild()
 {
 	childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this
-	mPanelInventory = getChild<LLPanelInventory>("object_contents");
+	mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents");
 	return TRUE;
 }
 
@@ -96,7 +97,7 @@ void LLFloaterOpenObject::onOpen(const LLSD& key)
 }
 void LLFloaterOpenObject::refresh()
 {
-	mPanelInventory->refresh();
+	mPanelInventoryObject->refresh();
 
 	std::string name;
 	BOOL enabled;
@@ -157,14 +158,14 @@ void LLFloaterOpenObject::moveToInventory(bool wear)
 	if (wear)
 	{
 		parent_category_id = gInventory.findCategoryUUIDForType(
-			LLAssetType::AT_CLOTHING);
+			LLFolderType::FT_CLOTHING);
 	}
 	else
 	{
 		parent_category_id = gInventory.getRootFolderID();
 	}
 	LLUUID category_id = gInventory.createNewCategory(parent_category_id, 
-		LLAssetType::AT_NONE, 
+		LLFolderType::FT_NONE, 
 		name);
 
 	LLCatAndWear* data = new LLCatAndWear;
diff --git a/indra/newview/llfloateropenobject.h b/indra/newview/llfloateropenobject.h
index a61cc04941f5ffcbd9d25774f082edac9bac9d4f..10d96b7ea3ae87f1cf8b962b1f9868318988bed9 100644
--- a/indra/newview/llfloateropenobject.h
+++ b/indra/newview/llfloateropenobject.h
@@ -41,7 +41,7 @@
 #include "llfloater.h"
 
 class LLObjectSelection;
-class LLPanelInventory;
+class LLPanelObjectInventory;
 
 class LLFloaterOpenObject
 : public LLFloater
@@ -77,7 +77,7 @@ class LLFloaterOpenObject
 	
 protected:
 
-	LLPanelInventory*	mPanelInventory;
+	LLPanelObjectInventory*	mPanelInventoryObject;
 	LLSafeHandle<LLObjectSelection> mObjectSelection;
 	BOOL mDirty;
 };
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index 88811d06fe229e07ca31a9545b6a3eed9c303dba..c2389e73a06ee6dc45b67f2bc0aebc510885c3e8 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -444,13 +444,11 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id,
 {
 	if (is_group)
 	{
-		childSetVisible("payee_group",true);
-		childSetVisible("payee_resident",false);
+		setTitle(getString("payee_group"));
 	}
 	else
 	{
-		childSetVisible("payee_group",false);
-		childSetVisible("payee_resident",true);
+		setTitle(getString("payee_resident"));
 	}
 	
 	childSetTextArg("payee_name", "[FIRST]", firstname);
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 938370b732ada65e55d6739432357141f3b59136..ae1a99e5fc4a0db35491176f49cac7bf3590d3a5 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -291,7 +291,7 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data,
 // static
 void LLFloaterPostcard::updateUserInfo(const std::string& email)
 {
-	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("postcard");
 	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
 		 iter != inst_list.end(); ++iter)
 	{
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 8b3391726a7fab80e84b21a74ed38d2f7f666027..2af1313db45d15a3296ef715cdfb73a597deaf46 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -339,7 +339,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mCommitCallbackRegistrar.add("Pref.ClickDisablePopup",		boost::bind(&LLFloaterPreference::onClickDisablePopup, this));	
 	mCommitCallbackRegistrar.add("Pref.LogPath",				boost::bind(&LLFloaterPreference::onClickLogPath, this));
 	mCommitCallbackRegistrar.add("Pref.Logging",				boost::bind(&LLFloaterPreference::onCommitLogging, this));
-	mCommitCallbackRegistrar.add("Pref.OpenHelp",				boost::bind(&LLFloaterPreference::onOpenHelp, this));	
 	mCommitCallbackRegistrar.add("Pref.UpdateMeterText",		boost::bind(&LLFloaterPreference::updateMeterText, this, _1));	
 	mCommitCallbackRegistrar.add("Pref.HardwareSettings",       boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));	
 	mCommitCallbackRegistrar.add("Pref.HardwareDefaults",       boost::bind(&LLFloaterPreference::setHardwareDefaults, this));	
@@ -608,12 +607,6 @@ void LLFloaterPreference::onBtnOK()
 	LLPanelLogin::refreshLocation( false );
 }
 
-void LLFloaterPreference::onOpenHelp()
-{
-	const char* xml_alert = "GraphicsPreferencesHelp";
-	LLNotifications::instance().add(this->contextualNotification(xml_alert));
-}
-
 // static 
 void LLFloaterPreference::onBtnApply( )
 {
@@ -1043,11 +1036,15 @@ void LLFloaterPreference::onClickSetKey()
 void LLFloaterPreference::setKey(KEY key)
 {
 	childSetValue("modifier_combo", LLKeyboard::stringFromKey(key));
+	// update the control right away since we no longer wait for apply
+	getChild<LLUICtrl>("modifier_combo")->onCommit();
 }
 
 void LLFloaterPreference::onClickSetMiddleMouse()
 {
 	childSetValue("modifier_combo", "MiddleMouse");
+	// update the control right away since we no longer wait for apply
+	getChild<LLUICtrl>("modifier_combo")->onCommit();
 }
 
 void LLFloaterPreference::onClickSkipDialogs()
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 34723b8c7e3c2e480f476d4d63eec0e8b3773f2d..b1ad0348c0de2b60c8ab16fa91923ff365271eaf 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -84,7 +84,6 @@ class LLFloaterPreference : public LLFloater
 	void		onBtnOK();
 	void		onBtnCancel();
 	void		onBtnApply();
-	void		onOpenHelp();
 
 //	void		onClickClearCache();
 	void		onClickBrowserClearCache();
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 11544f5b7b58780180ce9022df5bd14c7ac5c5cc..32229bd85045a5d58a099764c03be62ef5bb0427 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -179,6 +179,8 @@ BOOL LLFloaterRegionInfo::postBuild()
 	LLPanelRegionInfo* panel;
 	panel = new LLPanelRegionGeneralInfo;
 	mInfoPanels.push_back(panel);
+	panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub",	boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
+	
 	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
@@ -544,14 +546,10 @@ void LLPanelRegionInfo::initCtrl(const std::string& name)
 	getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this));
 }
 
-void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert));
-}
-
-void LLPanelRegionInfo::onClickHelp(std::string xml_alert)
+void LLPanelRegionInfo::onClickManageTelehub()
 {
-	LLNotifications::instance().add(xml_alert);
+	LLFloaterReg::hideInstance("region_info");
+	LLFloaterReg::showInstance("telehubs");
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -589,22 +587,10 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	initCtrl("restrict_pushobject");
 	initCtrl("block_parcel_search_check");
 
-	initHelpBtn("terraform_help",		"HelpRegionBlockTerraform");
-	initHelpBtn("fly_help",				"HelpRegionBlockFly");
-	initHelpBtn("damage_help",			"HelpRegionAllowDamage");
-	initHelpBtn("agent_limit_help",		"HelpRegionAgentLimit");
-	initHelpBtn("object_bonus_help",	"HelpRegionObjectBonus");
-	initHelpBtn("access_help",			"HelpRegionMaturity");
-	initHelpBtn("restrict_pushobject_help",		"HelpRegionRestrictPushObject");
-	initHelpBtn("land_resell_help",	"HelpRegionLandResell");
-	initHelpBtn("parcel_changes_help", "HelpParcelChanges");
-	initHelpBtn("parcel_search_help", "HelpRegionSearch");
-
 	childSetAction("kick_btn", onClickKick, this);
 	childSetAction("kick_all_btn", onClickKickAll, this);
 	childSetAction("im_btn", onClickMessage, this);
 //	childSetAction("manage_telehub_btn", onClickManageTelehub, this);
-	mCommitCallbackRegistrar.add("RegionInfo.Cancel",	boost::bind(&LLPanelRegionGeneralInfo::onClickManageTelehub, this));
 
 	return LLPanelRegionInfo::postBuild();
 }
@@ -712,11 +698,7 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
 	return false;
 }
 
-void LLPanelRegionGeneralInfo::onClickManageTelehub()
-{
-	LLFloaterReg::hideInstance("region_info");
-	LLFloaterReg::showInstance("telehubs");
-}
+
 
 // setregioninfo
 // strings[0] = 'Y' - block terraform, 'N' - not
@@ -809,13 +791,6 @@ BOOL LLPanelRegionDebugInfo::postBuild()
 	initCtrl("disable_collisions_check");
 	initCtrl("disable_physics_check");
 
-	initHelpBtn("disable_scripts_help",		"HelpRegionDisableScripts");
-	initHelpBtn("disable_collisions_help",	"HelpRegionDisableCollisions");
-	initHelpBtn("disable_physics_help",		"HelpRegionDisablePhysics");
-	initHelpBtn("top_colliders_help",		"HelpRegionTopColliders");
-	initHelpBtn("top_scripts_help",			"HelpRegionTopScripts");
-	initHelpBtn("restart_help",				"HelpRegionRestart");
-
 	childSetAction("choose_avatar_btn", onClickChooseAvatar, this);
 	childSetAction("return_btn", onClickReturn, this);
 	childSetAction("top_colliders_btn", onClickTopColliders, this);
@@ -1182,15 +1157,6 @@ BOOL LLPanelRegionTerrainInfo::postBuild()
 {
 	LLPanelRegionInfo::postBuild();
 
-	initHelpBtn("water_height_help",	"HelpRegionWaterHeight");
-	initHelpBtn("terrain_raise_help",	"HelpRegionTerrainRaise");
-	initHelpBtn("terrain_lower_help",	"HelpRegionTerrainLower");
-	initHelpBtn("upload_raw_help",		"HelpRegionUploadRaw");
-	initHelpBtn("download_raw_help",	"HelpRegionDownloadRaw");
-	initHelpBtn("use_estate_sun_help",	"HelpRegionUseEstateSun");
-	initHelpBtn("fixed_sun_help",		"HelpRegionFixedSun");
-	initHelpBtn("bake_terrain_help",	"HelpRegionBakeTerrain");
-
 	initCtrl("water_height_spin");
 	initCtrl("terrain_raise_spin");
 	initCtrl("terrain_lower_spin");
@@ -2103,20 +2069,6 @@ BOOL LLPanelEstateInfo::postBuild()
 	getChild<LLUICtrl>("abuse_email_address")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAnything, this));
 	getChild<LLLineEditor>("abuse_email_address")->setKeystrokeCallback(onChangeText, this);
 
-	initHelpBtn("estate_manager_help",			"HelpEstateEstateManager");
-	initHelpBtn("use_global_time_help",			"HelpEstateUseGlobalTime");
-	initHelpBtn("fixed_sun_help",				"HelpEstateFixedSun");
-	initHelpBtn("WLEditSkyHelp",				"HelpEditSky");
-	initHelpBtn("WLEditDayCycleHelp",			"HelpEditDayCycle");
-
-	initHelpBtn("externally_visible_help",		"HelpEstateExternallyVisible");
-	initHelpBtn("allow_direct_teleport_help",	"HelpEstateAllowDirectTeleport");
-	initHelpBtn("allow_resident_help",			"HelpEstateAllowResident");
-	initHelpBtn("allow_group_help",				"HelpEstateAllowGroup");
-	initHelpBtn("ban_resident_help",			"HelpEstateBanResident");
-	initHelpBtn("abuse_email_address_help",     "HelpEstateAbuseEmailAddress");
-	initHelpBtn("voice_chat_help",              "HelpEstateVoiceChat");
-
 	// set up the use global time checkbox
 	getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this));
 	getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this));
@@ -2694,7 +2646,6 @@ bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
 // virtual 
 BOOL LLPanelEstateCovenant::postBuild()
 {
-	initHelpBtn("covenant_help",		"HelpEstateCovenant");
 	mEstateNameText = getChild<LLTextBox>("estate_name_text");
 	mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
 	mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 95833af8a107f3bf9c7c8e4a5c6468a421260073..a3b91223b78bed0785923fcaf73af96104e99f8b 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -123,12 +123,10 @@ class LLPanelRegionInfo : public LLPanel
 	void enableButton(const std::string& btn_name, BOOL enable = TRUE);
 	void disableButton(const std::string& btn_name);
 	
+	void onClickManageTelehub();
+	
 protected:
 	void initCtrl(const std::string& name);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
-	// Callback for all help buttons, data is name of XML alert to show.
-	void onClickHelp(std::string xml_alert);
 	
 	// Returns TRUE if update sent and apply button should be
 	// disabled.
@@ -152,6 +150,7 @@ class LLPanelRegionInfo : public LLPanel
 
 class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
 {
+	
 public:
 	LLPanelRegionGeneralInfo()
 		:	LLPanelRegionInfo()	{}
@@ -161,16 +160,16 @@ class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
 	
 	// LLPanel
 	virtual BOOL postBuild();
+	
 protected:
 	virtual BOOL sendUpdate();
-	
 	static void onClickKick(void* userdata);
 	static void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);
 	static void onClickKickAll(void* userdata);
 	bool onKickAllCommit(const LLSD& notification, const LLSD& response);
 	static void onClickMessage(void* userdata);
 	bool onMessageCommit(const LLSD& notification, const LLSD& response);
-	void onClickManageTelehub();
+
 };
 
 /////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 70a3ad5252d4fb926ceff3fd54c60aeacfdc3e1b..1002697fe56f32667a50842194038e133c58c7c1 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -770,7 +770,7 @@ void LLFloaterReporter::takeScreenshot()
 	if (COMPLAINT_REPORT == mReportType)
 	{
 		mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
-		mResourceDatap->mPreferredLocation = LLAssetType::EType(-2);
+		mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION);
 	}
 	else
 	{
@@ -789,8 +789,8 @@ void LLFloaterReporter::takeScreenshot()
 
 	// store in the image list so it doesn't try to fetch from the server
 	LLPointer<LLViewerFetchedTexture> image_in_list = 
-		LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, FALSE, LLViewerTexture::FETCHED_TEXTURE);
-	image_in_list->createGLTexture(0, raw);
+		LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE);
+	image_in_list->createGLTexture(0, raw, 0, TRUE, LLViewerTexture::OTHER);
 	
 	// the texture picker then uses that texture
 	LLTexturePicker* texture = getChild<LLTextureCtrl>("screenshot");
@@ -838,7 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data,
 	}
 
 	EReportType report_type = UNKNOWN_REPORT;
-	if (data->mPreferredLocation == -2)
+	if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION)
 	{
 		report_type = COMPLAINT_REPORT;
 	}
diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
index 3bf1848efb7643c9459f929fa64e05e71cbaf953..eeea71cc4cdb481a3a9bbc67f6bab2a438911184 100644
--- a/indra/newview/llfloaterscriptdebug.cpp
+++ b/indra/newview/llfloaterscriptdebug.cpp
@@ -106,7 +106,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
 
 	if (objectp)
 	{
-		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, TRUE));
+		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI));
 		floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]);
 	}
 	else
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index bd9798c18e144c33fd037dd05c30951c2dbca779..97c573ddea516ecd6f3b777a8c2ffe9605965ccd 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -34,8 +34,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llfloatersearch.h"
 #include "llmediactrl.h"
-#include "llagent.h"
-
+#include "lllogininstance.h"
+#include "lluri.h"
 
 LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
 	LLFloater(key),
@@ -116,15 +116,11 @@ void LLFloaterSearch::search(const LLSD &key)
 
 	// append the search query string
 	std::string search_text = key.has("id") ? key["id"].asString() : "";
-	url += std::string("?q=") + search_text;
+	url += std::string("?q=") + LLURI::escape(search_text);
 
-	// append the maturity and teen capabilities for this agent
-	BOOL godlike = gAgent.isGodlike();
-	bool mature_enabled = gAgent.canAccessMature() || godlike;
-	bool adult_enabled = gAgent.canAccessAdult() || godlike;
-	std::string mature = (mature_enabled) ? "True" : "False";
-	std::string teen = (!adult_enabled) ? "True" : "False";
-	url += "&t=" + teen + "&m=" + mature;
+	// append the permissions token that login.cgi gave us
+	LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
+	url += "&p=" + search_token.asString();
 
 	// and load the URL in the web view
 	mBrowser->navigateTo(url);
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 235e8192186ee2097727a7dd8c7679d5d5647966..e570072803016deff8f1398ccaed0274d29e4566 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -101,6 +101,8 @@ S32 BORDER_WIDTH = 6;
 const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
 const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
 
+static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");
+
 ///----------------------------------------------------------------------------
 /// Class LLSnapshotLivePreview 
 ///----------------------------------------------------------------------------
@@ -980,7 +982,7 @@ void LLSnapshotLivePreview::saveTexture()
 				    "Snapshot : " + pos_string,
 				    "Taken by " + who_took_it + " at " + pos_string,
 				    0,
-				    LLAssetType::AT_SNAPSHOT_CATEGORY,
+				    LLFolderType::FT_SNAPSHOT_CATEGORY,
 				    LLInventoryType::IT_SNAPSHOT,
 				    PERM_ALL,  // Note: Snapshots to inventory is a special case of content upload
 				    PERM_NONE, // that ignores the user's premissions preferences and continues to
@@ -1373,8 +1375,10 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,
 void LLFloaterSnapshot::Impl::onClickDiscard(void* data)
 {
 	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+	
 	if (view)
 	{
+		view->getParent()->setMouseOpaque(FALSE);
 		view->closeFloater();
 	}
 }
@@ -2040,10 +2044,12 @@ BOOL LLFloaterSnapshot::postBuild()
 	LLSnapshotLivePreview::Params p;
 	p.rect(full_screen_rect);
 	LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p);
-	getRootView()->removeChild(gSnapshotFloaterView);
+	LLView* parent_view = gSnapshotFloaterView->getParent();
+	
+	parent_view->removeChild(gSnapshotFloaterView);
 	// make sure preview is below snapshot floater
-	getRootView()->addChild(previewp);
-	getRootView()->addChild(gSnapshotFloaterView);
+	parent_view->addChild(previewp);
+	parent_view->addChild(gSnapshotFloaterView);
 	
 	//move snapshot floater to special purpose snapshotfloaterview
 	gFloaterView->removeChild(this);
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 5fee84190b9b383402629167b54560fc0cfe95d5..3aef15a35c0848a0b87889147d2277aedef98be1 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -54,7 +54,7 @@
 #include "llpanelcontents.h"
 #include "llpanelface.h"
 #include "llpanelland.h"
-#include "llpanelinventory.h"
+#include "llpanelobjectinventory.h"
 #include "llpanelobject.h"
 #include "llpanelvolume.h"
 #include "llpanelpermissions.h"
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 2fe21f28de1b008563570233d9e15244dfdcd531..663bd232f7466df2a50ed0d7841accb5fd205f11 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -670,6 +670,15 @@ void LLFloaterUIPreview::refreshList()
 		}
 	}
 
+	found = TRUE;
+	while(found)				// for every sidepanel file that matches the pattern
+	{
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "sidepanel_*.xml", name, FALSE)))	// get next file matching pattern
+		{
+			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
+		}
+	}
+
 	if(!mFileList->isEmpty())	// if there were any matching files, just select the first one (so we don't have to worry about disabling buttons when no entry is selected)
 	{
 		mFileList->selectFirstItem();
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index aca9198f59ac152d0536bfa4f2e52d44d5d14bfc..43024a4bd03fd3ae7178fda4dc29feb774d0cf73 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -49,6 +49,9 @@
 #include "lluictrlfactory.h"
 
 
+static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
+
+
 LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
 	: LLPanel()
 {
@@ -82,8 +85,25 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
 	return TRUE;
 }
 
+// virtual
+void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility )
+{
+	if (new_visibility)
+	{
+		initialize();	
+	}
+	else
+	{
+		cleanup();
+		// when closing this window, turn of visiblity control so that 
+		// next time preferences is opened we don't suspend voice
+		gSavedSettings.setBOOL("ShowDeviceSettings", FALSE);
+	}
+}
 void LLPanelVoiceDeviceSettings::draw()
 {
+	refresh();
+
 	// let user know that volume indicator is not yet available
 	bool is_in_tuning_mode = gVoiceClient->inTuningMode();
 	childSetVisible("wait_text", !is_in_tuning_mode);
diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h
index f1603dc4144a6c656d2bbc1700445efd37af7645..d67283d0a224d5a4357bbeb4cb97c086998a3806 100644
--- a/indra/newview/llfloatervoicedevicesettings.h
+++ b/indra/newview/llfloatervoicedevicesettings.h
@@ -50,6 +50,8 @@ class LLPanelVoiceDeviceSettings : public LLPanel
 	void initialize();
 	void cleanup();
 
+	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
+	
 protected:
 	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
 	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index 72c82c178b6f6e0fb714775638b03044abb7ce75..a0fe42bf61763ed48f2c220c6bd64fdb94c8fa52 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -110,23 +110,6 @@ BOOL LLFloaterWater::postBuild()
 }
 void LLFloaterWater::initCallbacks(void) {
 
-	// help buttons
-	initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor");
-	initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity");
-	initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod");
-	initHelpBtn("WaterGlowHelp", "HelpWaterGlow");	
-	initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale");
-	initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale");
-	initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset");
-
-	initHelpBtn("WaterBlurMultiplierHelp", "HelpWaterBlurMultiplier");
-	initHelpBtn("WaterScaleBelowHelp", "HelpWaterScaleBelow");
-	initHelpBtn("WaterScaleAboveHelp", "HelpWaterScaleAbove");
-
-	initHelpBtn("WaterNormalMapHelp", "HelpWaterNormalMap");
-	initHelpBtn("WaterWave1Help", "HelpWaterWave1");
-	initHelpBtn("WaterWave2Help", "HelpWaterWave2");
-
 	LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
 
 	getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, &param_mgr->mFogColor));
@@ -173,16 +156,6 @@ void LLFloaterWater::initCallbacks(void) {
 	getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1));
 }
 
-void LLFloaterWater::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterWater::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWater::onClickHelp, this, xml_alert));
-}
-
 bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response)
 {
 	std::string text = response["message"].asString();
diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloaterwater.h
index 08c630c69e3e45bb27a6af27455a4120f2919bc5..0ea2436dbea4a5e1bfb8b41be5d7e082051cf6d7 100644
--- a/indra/newview/llfloaterwater.h
+++ b/indra/newview/llfloaterwater.h
@@ -59,10 +59,6 @@ class LLFloaterWater : public LLFloater
 	/// initialize all
 	void initCallbacks(void);
 
-	// help button stuff
-	void onClickHelp(std::string xml_alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
 	bool newPromptCallback(const LLSD& notification, const LLSD& response);
 
 	/// general purpose callbacks for dealing with color controllers
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index 02979acdd72a291a1f2b0c8b9ee02f0f56fae83e..60494f3cce4c88609ff22fd10db54dccc3023a78 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -119,36 +119,6 @@ BOOL LLFloaterWindLight::postBuild()
 }
 void LLFloaterWindLight::initCallbacks(void) {
 
-	// help buttons
-	initHelpBtn("WLBlueHorizonHelp", "HelpBlueHorizon");
-	initHelpBtn("WLHazeHorizonHelp", "HelpHazeHorizon");
-	initHelpBtn("WLBlueDensityHelp", "HelpBlueDensity");
-	initHelpBtn("WLHazeDensityHelp", "HelpHazeDensity");
-
-	initHelpBtn("WLDensityMultHelp", "HelpDensityMult");
-	initHelpBtn("WLDistanceMultHelp", "HelpDistanceMult");
-	initHelpBtn("WLMaxAltitudeHelp", "HelpMaxAltitude");
-
-	initHelpBtn("WLSunlightColorHelp", "HelpSunlightColor");
-	initHelpBtn("WLAmbientHelp", "HelpSunAmbient");
-	initHelpBtn("WLSunGlowHelp", "HelpSunGlow");
-	initHelpBtn("WLTimeOfDayHelp", "HelpTimeOfDay");
-	initHelpBtn("WLEastAngleHelp", "HelpEastAngle");
-
-	initHelpBtn("WLSceneGammaHelp", "HelpSceneGamma");
-	initHelpBtn("WLStarBrightnessHelp", "HelpStarBrightness");
-
-	initHelpBtn("WLCloudColorHelp", "HelpCloudColor");
-	initHelpBtn("WLCloudDetailHelp", "HelpCloudDetail");
-	initHelpBtn("WLCloudDensityHelp", "HelpCloudDensity");
-	initHelpBtn("WLCloudCoverageHelp", "HelpCloudCoverage");
-
-	initHelpBtn("WLCloudScaleHelp", "HelpCloudScale");
-	initHelpBtn("WLCloudScrollXHelp", "HelpCloudScrollX");
-	initHelpBtn("WLCloudScrollYHelp", "HelpCloudScrollY");
-
-	initHelpBtn("WLClassicCloudsHelp", "HelpClassicClouds");
-
 	LLWLParamManager * param_mgr = LLWLParamManager::instance();
 
 	// blue horizon
@@ -237,16 +207,6 @@ void LLFloaterWindLight::initCallbacks(void) {
 	getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1));
 }
 
-void LLFloaterWindLight::onClickHelp(std::string xml_alert)
-{
-	LLNotifications::instance().add(contextualNotification(xml_alert));
-}
-
-void LLFloaterWindLight::initHelpBtn(const std::string& name, const std::string& xml_alert)
-{
-	getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWindLight::onClickHelp, this, xml_alert));
-}
-
 bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response)
 {
 	std::string text = response["message"].asString();
diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h
index 56c2c6623b1e0d197416496b31c23cb28d196781..ed9322c4509eab5028b1d2c99de5937ecb3a919d 100644
--- a/indra/newview/llfloaterwindlight.h
+++ b/indra/newview/llfloaterwindlight.h
@@ -57,10 +57,6 @@ class LLFloaterWindLight : public LLFloater
 	/// initialize all
 	void initCallbacks(void);
 
-	// help button stuff
-	void onClickHelp(std::string alert);
-	void initHelpBtn(const std::string& name, const std::string& xml_alert);
-
 	bool newPromptCallback(const LLSD& notification, const LLSD& response);
 
 	/// general purpose callbacks for dealing with color controllers
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index b7e8835fb885b09ea506a196602932d1a0437f0d..7d2eb98111f497a1cc87d1286a13f7b220c734be 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -45,6 +45,7 @@
 #include "llcallingcard.h"
 #include "llcombobox.h"
 #include "llviewercontrol.h"
+#include "llcommandhandler.h"
 #include "lldraghandle.h"
 #include "llfirstuse.h"
 #include "llfloaterreg.h"		// getTypedInstance()
@@ -55,7 +56,6 @@
 #include "llregionhandle.h"
 #include "llscrolllistctrl.h"
 #include "llslurl.h"
-#include "lltabcontainer.h"
 #include "lltextbox.h"
 #include "lltracker.h"
 #include "lltrans.h"
@@ -63,7 +63,9 @@
 #include "llviewermenu.h"
 #include "llviewerregion.h"
 #include "llviewerstats.h"
+#include "llviewertexture.h"
 #include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llworldmapview.h"
 #include "lluictrlfactory.h"
 #include "llappviewer.h"
@@ -79,6 +81,12 @@
 //---------------------------------------------------------------------------
 static const F32 MAP_ZOOM_TIME = 0.2f;
 
+// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
+// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
+// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
+// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
+static const S32 MAX_VISIBLE_REGIONS = 512;
+
 enum EPanDirection
 {
 	PAN_UP,
@@ -96,6 +104,35 @@ static const F32 SIM_COORD_DEFAULT = 128.f;
 // Globals
 //---------------------------------------------------------------------------
 
+// handle secondlife:///app/worldmap/{NAME}/{COORDS} URLs
+class LLWorldMapHandler : public LLCommandHandler
+{
+public:
+	// requires trusted browser to trigger
+	LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_THROTTLE) { }
+
+	bool handle(const LLSD& params, const LLSD& query_map,
+				LLMediaCtrl* web)
+	{
+		if (params.size() == 0)
+		{
+			return false;
+		}
+
+		const std::string region_name = params[0].asString();
+		S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
+		S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
+		S32 z = (params.size() > 3) ? params[3].asInteger() : 0;
+
+		LLFloaterWorldMap::getInstance()->trackURL(region_name, x, y, z);
+		LLFloaterReg::showInstance("world_map", "center");
+
+		return true;
+	}
+};
+LLWorldMapHandler gWorldMapHandler;
+
+
 LLFloaterWorldMap* gFloaterWorldMap = NULL;
 
 class LLMapInventoryObserver : public LLInventoryObserver
@@ -160,11 +197,11 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	gFloaterWorldMap = this;
 	
 	mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL);
-	mFactoryMap["terrain_mapview"] = LLCallbackMap(createWorldMapView, NULL);
 	
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE);
 	mCommitCallbackRegistrar.add("WMap.Location",		boost::bind(&LLFloaterWorldMap::onLocationCommit, this));
 	mCommitCallbackRegistrar.add("WMap.AvatarCombo",	boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
+	mCommitCallbackRegistrar.add("WMap.Landmark",		boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this));
 	mCommitCallbackRegistrar.add("WMap.SearchResult",	boost::bind(&LLFloaterWorldMap::onCommitSearchResult, this));
 	mCommitCallbackRegistrar.add("WMap.CommitLocation",	boost::bind(&LLFloaterWorldMap::onCommitLocation, this));
 	mCommitCallbackRegistrar.add("WMap.GoHome",			boost::bind(&LLFloaterWorldMap::onGoHome, this));	
@@ -183,17 +220,7 @@ void* LLFloaterWorldMap::createWorldMapView(void* data)
 
 BOOL LLFloaterWorldMap::postBuild()
 {
-	mTabs = getChild<LLTabContainer>("maptab");
-	if (!mTabs) return FALSE;
-
-	mTabs->setCommitCallback(boost::bind(&LLFloaterWorldMap::onCommitBackground, this));
-
-	// The following callback syncs the worlmap tabs with the images.
-	// Commented out since it was crashing when LLWorldMap became a singleton.
-	// We should be fine without it but override the onOpen method and put it 
-	// there if it turns out to be needed. -MG
-	//
-	//onCommitBackground();
+	mPanel = getChild<LLPanel>("objects_mapview");
 
 	LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo");
 	if (avatar_combo)
@@ -221,8 +248,8 @@ BOOL LLFloaterWorldMap::postBuild()
 		landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
 	}
 
-	mCurZoomVal = log(gMapScale)/log(2.f);
-	childSetValue("zoom slider", gMapScale);
+	mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
+	childSetValue("zoom slider", LLWorldMapView::sMapScale);
 
 	setDefaultBtn(NULL);
 
@@ -235,7 +262,7 @@ BOOL LLFloaterWorldMap::postBuild()
 LLFloaterWorldMap::~LLFloaterWorldMap()
 {
 	// All cleaned up by LLView destructor
-	mTabs = NULL;
+	mPanel = NULL;
 
 	// Inventory deletes all observers on shutdown
 	mInventory = NULL;
@@ -268,7 +295,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 	mIsClosing = FALSE;
 
 	LLWorldMapView* map_panel;
-	map_panel = (LLWorldMapView*)mTabs->getCurrentPanel();
+	map_panel = (LLWorldMapView*)gFloaterWorldMap->mPanel;
 	map_panel->clearLastClick();
 
 	{
@@ -279,15 +306,8 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		}
 		map_panel->updateVisibleBlocks();
 
-		// Reload the agent positions when we show the window
-		LLWorldMap::getInstance()->eraseItems();
-
-		// Reload any maps that may have changed
-		LLWorldMap::getInstance()->clearSimFlags();
-
-		const S32 panel_num = mTabs->getCurrentPanelIndex();
-		const bool request_from_sim = true;
-		LLWorldMap::getInstance()->setCurrentLayer(panel_num, request_from_sim);
+		// Reload items as they may have changed
+		LLWorldMap::getInstance()->reloadItems();
 
 		// We may already have a bounding box for the regions of the world,
 		// so use that to adjust the view.
@@ -297,7 +317,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		LLFirstUse::useMap();
 
 		// Start speculative download of landmarks
-		LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		gInventory.startBackgroundFetch(landmark_folder_id);
 
 		childSetFocus("location", TRUE);
@@ -321,12 +341,9 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 // static
 void LLFloaterWorldMap::reloadIcons(void*)
 {
-	LLWorldMap::getInstance()->eraseItems();
-
-	LLWorldMap::getInstance()->sendMapLayerRequest();
+	LLWorldMap::getInstance()->reloadItems();
 }
 
-
 // virtual
 BOOL LLFloaterWorldMap::handleHover(S32 x, S32 y, MASK mask)
 {
@@ -358,12 +375,6 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
 void LLFloaterWorldMap::reshape( S32 width, S32 height, BOOL called_from_parent )
 {
 	LLFloater::reshape( width, height, called_from_parent );
-
-	// Might have changed size of world display area
-	// JC: Technically, this is correct, but it makes the slider "pop"
-	// if you resize the window, then draw the slider.  Just leaving it
-	// the way it was when you opened the window seems better.
-	// adjustZoomSliderBounds();
 }
 
 
@@ -427,7 +438,7 @@ void LLFloaterWorldMap::draw()
 		{
 			F64 seconds = LLTimer::getElapsedSeconds();
 			double value = fmod(seconds, 2);
-			value = 0.5 + 0.5*cos(value * 3.14159f);
+			value = 0.5 + 0.5*cos(value * F_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
 			childSetColor("location_icon", loading_color);
 		}
@@ -445,7 +456,7 @@ void LLFloaterWorldMap::draw()
 
 	childSetEnabled("Teleport", (BOOL)tracking_status);
 //	childSetEnabled("Clear", (BOOL)tracking_status);
-	childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->mIsTrackingUnknownLocation);
+	childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
 	childSetEnabled("copy_slurl", (mSLURL.size() > 0) );
 
 	setMouseOpaque(TRUE);
@@ -465,6 +476,18 @@ void LLFloaterWorldMap::draw()
 	mCurZoomVal = lerp(mCurZoomVal, (F32)childGetValue("zoom slider").asReal(), interp);
 	F32 map_scale = 256.f*pow(2.f, mCurZoomVal);
 	LLWorldMapView::setScale( map_scale );
+
+	// Enable/disable checkboxes depending on the zoom level
+	// If above threshold level (i.e. low res) -> Disable all checkboxes
+	// If under threshold level (i.e. high res) -> Enable all checkboxes
+	bool enable = LLWorldMapView::showRegionInfo();
+	childSetEnabled("people_chk", enable);
+	childSetEnabled("infohub_chk", enable);
+	childSetEnabled("telehub_chk", enable);
+	childSetEnabled("land_for_sale_chk", enable);
+	childSetEnabled("event_chk", enable);
+	childSetEnabled("event_mature_chk", enable);
+	childSetEnabled("event_adult_chk", enable);
 	
 	LLFloater::draw();
 }
@@ -553,14 +576,14 @@ void LLFloaterWorldMap::trackLandmark( const LLUUID& landmark_item_id )
 void LLFloaterWorldMap::trackEvent(const LLItemInfo &event_info)
 {
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
-	LLTracker::trackLocation(event_info.mPosGlobal, event_info.mName, event_info.mToolTip, LLTracker::LOCATION_EVENT);
+	LLTracker::trackLocation(event_info.getGlobalPosition(), event_info.getName(), event_info.getToolTip(), LLTracker::LOCATION_EVENT);
 	setDefaultBtn("Teleport");
 }
 
 void LLFloaterWorldMap::trackGenericItem(const LLItemInfo &item)
 {
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
-	LLTracker::trackLocation(item.mPosGlobal, item.mName, item.mToolTip, LLTracker::LOCATION_ITEM);
+	LLTracker::trackLocation(item.getGlobalPosition(), item.getName(), item.getToolTip(), LLTracker::LOCATION_ITEM);
 	setDefaultBtn("Teleport");
 }
 
@@ -569,29 +592,27 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
 	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
 	if (!sim_info)
 	{
-		LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
-		LLWorldMap::getInstance()->mInvalidLocation = FALSE;
-		LLWorldMap::getInstance()->mUnknownLocation = pos_global;
+		// We haven't found a region for that point yet, leave the tracking to the world map
+		LLWorldMap::getInstance()->setTracking(pos_global);
 		LLTracker::stopTracking(NULL);
 		S32 world_x = S32(pos_global.mdV[0] / 256);
 		S32 world_y = S32(pos_global.mdV[1] / 256);
-		LLWorldMap::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
+		LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true);
 		setDefaultBtn("");
 		return;
 	}
-	if (sim_info->mAccess == SIM_ACCESS_DOWN)
+	if (sim_info->isDown())
 	{
-		// Down sim. Show the blue circle of death!
-		LLWorldMap::getInstance()->mIsTrackingUnknownLocation = TRUE;
-		LLWorldMap::getInstance()->mUnknownLocation = pos_global;
-		LLWorldMap::getInstance()->mInvalidLocation = TRUE;
+		// Down region. Show the blue circle of death!
+		// i.e. let the world map that this and tell it it's invalid
+		LLWorldMap::getInstance()->setTracking(pos_global);
+		LLWorldMap::getInstance()->setTrackingInvalid();
 		LLTracker::stopTracking(NULL);
 		setDefaultBtn("");
 		return;
 	}
 
-	std::string sim_name;
-	LLWorldMap::getInstance()->simNameFromPosGlobal( pos_global, sim_name );
+	std::string sim_name = sim_info->getName();
 	F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
 	F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
 	std::string full_name = llformat("%s (%d, %d, %d)", 
@@ -603,9 +624,7 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
 	std::string tooltip("");
 	mTrackedStatus = LLTracker::TRACKING_LOCATION;
 	LLTracker::trackLocation(pos_global, full_name, tooltip);
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
+	LLWorldMap::getInstance()->cancelTracking();		// The floater is taking over the tracking
 
 	setDefaultBtn("Teleport");
 }
@@ -718,9 +737,9 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
 
 		// pass sim name to combo box
 		gFloaterWorldMap->mCompletingRegionName = region_name;
-		LLWorldMap::getInstance()->sendNamedRegionRequest(region_name);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name);
 		LLStringUtil::toLower(gFloaterWorldMap->mCompletingRegionName);
-		LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
+		LLWorldMap::getInstance()->setTrackingCommit();
 	}
 }
 
@@ -787,19 +806,12 @@ void LLFloaterWorldMap::buildAvatarIDList()
 
     // Delete all but the "None" entry
 	S32 list_size = list->getItemCount();
-	while (list_size > 1)
+	if (list_size > 1)
 	{
-		list->selectNthItem(1);
+		list->selectItemRange(1, -1);
 		list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
-		--list_size;
 	}
 
-	LLSD default_column;
-	default_column["name"] = "friend name";
-	default_column["label"] = "Friend Name";
-	default_column["width"] = 500;
-	list->addColumn(default_column);
-
 	// Get all of the calling cards for avatar that are currently online
 	LLCollectMappableBuddies collector;
 	LLAvatarTracker::instance().applyFunctor(collector);
@@ -820,10 +832,7 @@ void LLFloaterWorldMap::buildAvatarIDList()
 void LLFloaterWorldMap::buildLandmarkIDLists()
 {
 	LLCtrlListInterface *list = childGetListInterface("landmark combo");
-	if (!list)
-	{
-		return;
-	}
+	if (!list) return;
 
     // Delete all but the "None" entry
 	S32 list_size = list->getItemCount();
@@ -864,7 +873,6 @@ void LLFloaterWorldMap::buildLandmarkIDLists()
 		mLandmarkAssetIDList.put( item->getAssetUUID() );
 		mLandmarkItemIDList.put( item->getUUID() );
 	}
-	list->sortByColumn(std::string("landmark name"), TRUE);
 
 	list->selectFirstItem();
 }
@@ -901,7 +909,7 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
 	{
 		childSetValue("spin z", 0);
 	}
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
+	LLWorldMap::getInstance()->cancelTracking();
 	mCompletingRegionName = "";
 }
 
@@ -937,18 +945,16 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
 // can see the whole world, plus a little.
 void LLFloaterWorldMap::adjustZoomSliderBounds()
 {
-	// World size in regions
-	S32 world_width_regions	 = LLWorldMap::getInstance()->getWorldWidth() / REGION_WIDTH_UNITS;
-	S32 world_height_regions = LLWorldMap::getInstance()->getWorldHeight() / REGION_WIDTH_UNITS;
-
-	// Pad the world size a little bit, so we have a nice border on
-	// the edge
-	world_width_regions++;
-	world_height_regions++;
+	// Merov: we switched from using the "world size" (which varies depending where the user went) to a fixed
+	// width of 512 regions max visible at a time. This makes the zoom slider works in a consistent way across
+	// sessions and doesn't prevent the user to pan the world if it was to grow a lot beyond that limit.
+	// Currently (01/26/09), this value allows the whole grid to be visible in a 1024x1024 window.
+	S32 world_width_regions	 = MAX_VISIBLE_REGIONS;
+	S32 world_height_regions = MAX_VISIBLE_REGIONS;
 
 	// Find how much space we have to display the world
 	LLWorldMapView* map_panel;
-	map_panel = (LLWorldMapView*)mTabs->getCurrentPanel();
+	map_panel = (LLWorldMapView*)mPanel;
 	LLRect view_rect = map_panel->getRect();
 
 	// View size in pixels
@@ -1161,15 +1167,15 @@ void LLFloaterWorldMap::onLocationCommit()
 
 	LLStringUtil::toLower(str);
 	mCompletingRegionName = str;
-	LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
+	LLWorldMap::getInstance()->setTrackingCommit();
 	if (str.length() >= 3)
 	{
-		LLWorldMap::getInstance()->sendNamedRegionRequest(str);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
 	}
 	else
 	{
 		str += "#";
-		LLWorldMap::getInstance()->sendNamedRegionRequest(str);
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(str);
 	}
 }
 
@@ -1177,8 +1183,8 @@ void LLFloaterWorldMap::onClearBtn()
 {
 	mTrackedStatus = LLTracker::TRACKING_NOTHING;
 	LLTracker::stopTracking((void *)(intptr_t)TRUE);
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	mSLURL = "";				// Clear the SLURL since it's invalid
+	LLWorldMap::getInstance()->cancelTracking();
+	mSLURL = "";					// Clear the SLURL since it's invalid
 	mSetToUserPosition = TRUE;	// Revert back to the current user position
 }
 
@@ -1230,9 +1236,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
 			pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();
 		}
 	}
-	else if(LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+	else if(LLWorldMap::getInstance()->isTracking())
 	{
-		pos_global = LLWorldMap::getInstance()->mUnknownLocation - gAgent.getCameraPositionGlobal();;
+		pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();;
 	}
 	else
 	{
@@ -1240,8 +1246,8 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate)
 		pos_global.clearVec();
 	}
 
-	LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sPixelsPerMeter)), 
-							-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sPixelsPerMeter)),
+	LLWorldMapView::setPan( -llfloor((F32)(pos_global.mdV[VX] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)), 
+							-llfloor((F32)(pos_global.mdV[VY] * (F64)LLWorldMapView::sMapScale / REGION_WIDTH_METERS)),
 							!animate);
 	mWaitingForTracker = FALSE;
 }
@@ -1399,13 +1405,6 @@ void LLFloaterWorldMap::flyToAvatar()
 	}
 }
 
-void LLFloaterWorldMap::onCommitBackground()
-{
-	// Find my index
-	S32 index = mTabs->getCurrentPanelIndex();
-	LLWorldMap::getInstance()->setCurrentLayer(index);
-}
-
 void LLFloaterWorldMap::updateSims(bool found_null_sim)
 {
 	if (mCompletingRegionName == "")
@@ -1422,24 +1421,23 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 	
 	S32 num_results = 0;
 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		std::string sim_name = info->mName;
-		std::string sim_name_lower = sim_name;
+		LLSimInfo* info = it->second;
+		std::string sim_name_lower = info->getName();
 		LLStringUtil::toLower(sim_name_lower);
 
 		if (sim_name_lower.substr(0, name_length) == mCompletingRegionName)
 		{
 			if (sim_name_lower == mCompletingRegionName)
 			{
-				match = sim_name;
+				match = info->getName();
 			}
 			
 			LLSD value;
-			value["id"] = sim_name;
+			value["id"] = info->getName();
 			value["columns"][0]["column"] = "sim_name";
-			value["columns"][0]["value"] = sim_name;
+			value["columns"][0]["value"] = info->getName();
 			list->addElement(value);
 			num_results++;
 		}
@@ -1496,15 +1494,13 @@ void LLFloaterWorldMap::onCommitSearchResult()
 	LLStringUtil::toLower(sim_name);
 
 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	for (it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		std::string info_sim_name = info->mName;
-		LLStringUtil::toLower(info_sim_name);
+		LLSimInfo* info = it->second;
 
-		if (sim_name == info_sim_name)
+		if (info->isName(sim_name))
 		{
-			LLVector3d pos_global = from_region_handle( info->mHandle );
+			LLVector3d pos_global = info->getGlobalOrigin();
 			F64 local_x = childGetValue("spin x");
 			F64 local_y = childGetValue("spin y");
 			F64 local_z = childGetValue("spin z");
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 20a8e6d32179685c466c362e66627fcd6ba4ef95..7feebb583d8ec81e01dd73aa229b44821a9589af 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -96,7 +96,7 @@ class LLFloaterWorldMap : public LLFloater
 	static const LLUUID& getHomeID() { return sHomeID; }
 
 	// A z_attenuation of 0.0f collapses the distance into the X-Y plane
-	F32			getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
+	F32				getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
 
 	void			clearLocationSelection(BOOL clear_ui = FALSE);
 	void			clearAvatarSelection(BOOL clear_ui = FALSE);
@@ -121,8 +121,6 @@ class LLFloaterWorldMap : public LLFloater
 	void			onAvatarComboPrearrange();
 	void		    onAvatarComboCommit();
 
-	void			onCommitBackground();
-
 	void			onComboTextEntry( );
 	void			onSearchTextEntry( LLLineEditor* ctrl );
 
@@ -155,10 +153,10 @@ class LLFloaterWorldMap : public LLFloater
 
 	void			cacheLandmarkPosition();
 
-protected:
-	LLTabContainer*	mTabs;
+private:
+	LLPanel*			mPanel;		// Panel displaying the map
 
-	// Sets gMapScale, in pixels per region
+	// Ties to LLWorldMapView::sMapScale, in pixels per region
 	F32						mCurZoomVal;
 	LLFrameTimer			mZoomTimer;
 
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index de18e7475288f1c9c0c8a8e11f5e1317fa3dd8cb..7863c373c62348b9d203083c8f33772a4a3f6496 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -38,6 +38,7 @@
 #include "llinventorybridge.h"
 #include "llinventoryclipboard.h" // *TODO: remove this once hack below gone.
 #include "llinventoryfilter.h"
+#include "llinventoryfunctions.h"
 #include "llfoldertype.h"
 #include "llfloaterinventory.h"// hacked in for the bonus context menu items.
 #include "llkeyboard.h"
@@ -54,6 +55,7 @@
 #include "llviewermenu.h"
 #include "lluictrlfactory.h"
 #include "llviewercontrol.h"
+#include "llviewerfoldertype.h"
 #include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llfloaterproperties.h"
@@ -1107,7 +1109,7 @@ void LLFolderView::propertiesSelectedItems( void )
 	}
 }
 
-void LLFolderView::changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type)
+void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type)
 {
 	LLFolderBridge *folder_bridge = LLFolderBridge::sSelf;
 
@@ -1957,7 +1959,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
 	if (action.length() > change_folder_string.length() && 
 		(action.compare(0,change_folder_string.length(),"change_folder_type_") == 0))
 	{
-		LLAssetType::EType new_folder_type = LLFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
+		LLFolderType::EType new_folder_type = LLViewerFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length()));
 		changeType(model, new_folder_type);
 		return true;
 	}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index ebfb4efde2db06471cc2fec292cd4e8ec682bb32..0bd65b5f909474e183015cc4e747fd56b4150f43 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -192,7 +192,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	void propertiesSelectedItems( void );
 
 	// change the folder type
-	void changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type);
+	void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type);
 
 	void autoOpenItem(LLFolderViewFolder* item);
 	void closeAutoOpenedFolders();
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index ff38da279a52c3dfdb403c45d5918bcd5fa6f950..60ece75ceadd565485ab0f97dbe6263cadc336b6 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -32,6 +32,7 @@
 #define LLFOLDERVIEWEVENTLISTENER_H
 
 #include "lldarray.h"	// JAMESDEBUG convert to std::vector
+#include "llfoldertype.h"
 #include "llfontgl.h"	// just for StyleFlags enum
 #include "llpointer.h"
 
@@ -57,7 +58,7 @@ class LLFolderViewEventListener
 	virtual const LLUUID& getUUID() const = 0;
 	virtual time_t getCreationDate() const = 0;	// UTC seconds
 	virtual PermissionMask getPermissionMask() const = 0;
-	virtual LLAssetType::EType getPreferredType() const = 0;
+	virtual LLFolderType::EType getPreferredType() const = 0;
 	virtual LLPointer<LLUIImage> getIcon() const = 0;
 	virtual LLFontGL::StyleFlags getLabelStyle() const = 0;
 	virtual std::string getLabelSuffix() const = 0;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index f83a426cdab91b6802c7f2ebc58a09e8252c4215..6fdaefd21ab9030eb3c1f3ec8463ec492de9c448 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -248,13 +248,13 @@ void LLFolderViewItem::refreshFromListener()
 	if(mListener)
 	{
 		mLabel = mListener->getDisplayName();
-		LLAssetType::EType preferred_type = mListener->getPreferredType();
+		LLFolderType::EType preferred_type = mListener->getPreferredType();
 
 		// *TODO: to be removed when database supports multi language. This is a
 		// temporary attempt to display the inventory folder in the user locale.
 		// mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
 		//		it uses the same way to find localized string
-		if (LLAssetType::lookupIsProtectedCategoryType(preferred_type))
+		if (LLFolderType::lookupIsProtectedType(preferred_type))
 		{
 			LLTrans::findString(mLabel, "InvFolder " + mLabel);
 		};
@@ -1753,7 +1753,7 @@ bool LLFolderViewFolder::isTrash() const
 {
 	if (mAmTrash == LLFolderViewFolder::UNKNOWN)
 	{
-		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
+		mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH;
 	}
 	return mAmTrash == LLFolderViewFolder::TRASH;
 }
@@ -2167,7 +2167,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
 	const LLUUID &cat_uuid = getListener()->getUUID();
 	const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);
-	if (cat && cat->getPreferredType() == LLAssetType::AT_OUTFIT)
+	if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
 	{
 		getListener()->performAction(NULL, NULL,"replaceoutfit");
 		return TRUE;
@@ -2490,7 +2490,7 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
 		&& b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
 	{
 
-		static LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID();
 		LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID();
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index fbcaeee01f224be9faecf2784c4a08f5ec58875c..1ff2566dca235c17fff0b3b7fb726ee0ab60dafd 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -91,8 +91,44 @@ const LLUUID& get_folder_uuid(const LLUUID& parentFolderUUID, LLInventoryCollect
 	return LLUUID::null;
 }
 
+
+// LLViewerInventoryCategory::fetchDescendents has it own period of fetching.
+// for now it is FETCH_TIMER_EXPIRY = 10.0f; So made our period a bit more.
+const F32 FETCH_FRIENDS_DESCENDENTS_PERIOD = 11.0f;
+
+
+/**
+ * Intended to call passed callback after the specified period of time.
+ *
+ * Implemented to fix an issue when Inventory folders are in incomplete state. See EXT-2061, EXT-1935, EXT-813.
+ * For now it uses to periodically sync Inventory Friends/All folder with a Agent's Friends List
+ * until it is complete.
+ */ 
+class FriendListUpdater : public LLEventTimer
+{
+public:
+	typedef boost::function<bool()> callback_t;
+
+	FriendListUpdater(callback_t cb, F32 period)
+		:	LLEventTimer(period)
+		,	mCallback(cb)
+	{
+		mEventTimer.start();
+	}
+
+	virtual BOOL tick() // from LLEventTimer
+	{
+		return mCallback();
+	}
+
+private:
+	callback_t		mCallback;
+};
+
+
 // LLFriendCardsManager Constructor / Destructor
 LLFriendCardsManager::LLFriendCardsManager()
+: mFriendsAllFolderCompleted(true)
 {
 	LLAvatarTracker::instance().addObserver(this);
 }
@@ -135,14 +171,14 @@ const LLUUID LLFriendCardsManager::extractAvatarID(const LLUUID& avatarID)
 // and this method must be called before any actions with friend list
 void LLFriendCardsManager::ensureFriendFoldersExist()
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	LLUUID friendFolderUUID = findFriendFolderUUIDImpl();
 
 	if (friendFolderUUID.isNull())
 	{
 		friendFolderUUID = gInventory.createNewCategory(callingCardsFolderID,
-			LLAssetType::AT_CALLINGCARD, get_friend_folder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_folder_name());
 	}
 
 	LLUUID friendAllSubfolderUUID = findFriendAllSubfolderUUIDImpl();
@@ -150,7 +186,7 @@ void LLFriendCardsManager::ensureFriendFoldersExist()
 	if (friendAllSubfolderUUID.isNull())
 	{
 		friendAllSubfolderUUID = gInventory.createNewCategory(friendFolderUUID,
-			LLAssetType::AT_CALLINGCARD, get_friend_all_subfolder_name());
+			LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name());
 	}
 }
 
@@ -269,7 +305,7 @@ bool LLFriendCardsManager::isAnyFriendCategory(const LLUUID& catID) const
 	return TRUE == gInventory.isObjectDescendentOf(catID, friendFolderID);
 }
 
-void LLFriendCardsManager::syncFriendsFolder()
+bool LLFriendCardsManager::syncFriendsFolder()
 {
 	//lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" if they are absent
 	LLFriendCardsManager::instance().ensureFriendFoldersExist();
@@ -297,11 +333,35 @@ void LLFriendCardsManager::syncFriendsFolder()
 	// 2. Add missing Friend Cards for friends
 	LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
 	llinfos << "try to build friends, count: " << all_buddies.size() << llendl; 
+	mFriendsAllFolderCompleted = true;
 	for(; buddy_it != all_buddies.end(); ++buddy_it)
 	{
 		const LLUUID& buddy_id = (*buddy_it).first;
 		addFriendCardToInventory(buddy_id);
 	}
+
+	if (!mFriendsAllFolderCompleted)
+	{
+		forceFriendListIsLoaded(findFriendAllSubfolderUUIDImpl());
+
+		static bool timer_started = false;
+		if (!timer_started)
+		{
+			lldebugs << "Create and start timer to sync Inventory Friends All folder with Friends list" << llendl;
+
+			// do not worry about destruction of the FriendListUpdater. 
+			// It will be deleted by LLEventTimer::updateClass when FriendListUpdater::tick() returns true.
+			new FriendListUpdater(boost::bind(&LLFriendCardsManager::syncFriendsFolder, this),
+				FETCH_FRIENDS_DESCENDENTS_PERIOD);
+		}
+		timer_started = true;
+	}
+	else
+	{
+		lldebugs << "Friends/All Inventory folder is synchronized with the Agent's Friends List" << llendl;
+	}
+
+	return mFriendsAllFolderCompleted;
 }
 
 void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBuddiesMap) const
@@ -351,7 +411,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud
 /************************************************************************/
 const LLUUID& LLFriendCardsManager::findFriendFolderUUIDImpl() const
 {
-	LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+	const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 	std::string friendFolderName = get_friend_folder_name();
 
@@ -459,9 +519,11 @@ bool LLFriendCardsManager::addFriendCardToInventory(const LLUUID& avatarID)
 	}
 
 	LLUUID friendListFolderID = findFriendAllSubfolderUUIDImpl();
-	if (shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID))
+	if (friendListFolderID.notNull() && shouldBeAdded && !invModel->isCategoryComplete(friendListFolderID))
 	{
+		mFriendsAllFolderCompleted = false;
 		shouldBeAdded = false;
+		lldebugs << "Friends/All category is not completed" << llendl; 
 	}
 	if (shouldBeAdded)
 	{
@@ -520,4 +582,11 @@ void LLFriendCardsManager::onFriendListUpdate(U32 changed_mask)
 	}
 }
 
+void LLFriendCardsManager::forceFriendListIsLoaded(const LLUUID& folder_id) const
+{
+	bool fetching_inventory = gInventory.fetchDescendentsOf(folder_id);
+	lldebugs << "Trying to fetch descendants of Friends/All Inventory folder, fetched: "
+		<< fetching_inventory << llendl;
+}
+
 // EOF
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index 6ada3428311c03b52528cca05022a1f2683cf62a..feea05bc1dcc8cc3df219590686a48c344d2aee4 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -89,8 +89,10 @@ class LLFriendCardsManager
 
 	/**
 	 *	Synchronizes content of the Calling Card/Friends/All Global Inventory folder with Agent's Friend List
+	 *
+	 *	@return true - if folder is already synchronized, false otherwise.
 	 */
-	void syncFriendsFolder();
+	bool syncFriendsFolder();
 
 	/*!
 	 * \brief
@@ -144,11 +146,20 @@ class LLFriendCardsManager
 
 	void onFriendListUpdate(U32 changed_mask);
 
+	/**
+	 * Force fetching of the Inventory folder specified by passed folder's LLUUID.
+	 *
+	 * It only sends request to server, server reply should be processed in other place.
+	 * Because request can be sent via UDP we need to periodically check if request was completed with success.
+	 */
+	void forceFriendListIsLoaded(const LLUUID& folder_id) const;
+
 
 private:
 	typedef std::set<LLUUID> avatar_uuid_set_t;
 
 	avatar_uuid_set_t mBuddyIDSet;
+	bool mFriendsAllFolderCompleted;
 };
 
 #endif // LL_LLFRIENDCARD_H
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index c46eedbef24224fcb187a1c84e56dfce1ffa092f..e60bde9fd8911afb72cccfee1393849f09733d6b 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -43,6 +43,7 @@
 #include "llimview.h" // for gIMMgr
 #include "llsidetray.h"
 #include "llstatusbar.h"	// can_afford_transaction()
+#include "llimfloater.h"
 
 //
 // Globals
@@ -279,10 +280,14 @@ void LLGroupActions::startChat(const LLUUID& group_id)
 	LLGroupData group_data;
 	if (gAgent.getGroupData(group_id, group_data))
 	{
-		gIMMgr->addSession(
+		LLUUID session_id = gIMMgr->addSession(
 			group_data.mName,
 			IM_SESSION_GROUP_START,
 			group_id);
+		if (session_id != LLUUID::null)
+		{
+			LLIMFloater::show(session_id);
+		}
 		make_ui_sound("UISndStartIM");
 	}
 	else
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 2e2b2d51011b0043145c19ddad595e1a6e500a7c..010ed23918d1560c4df17e4cee36f346299bfbe3 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -183,6 +183,11 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
 	item->childSetVisible("info_btn", false);
 	item->setGroupIconVisible(mShowIcons);
 
+	if (id.isNull())
+	{
+		item->childSetVisible("profile_btn", false);
+	}
+
 	addItem(item, id, pos);
 
 //	setCommentVisible(false);
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index 027cd2ab077023b58173b402da2779dc4835a23e..261d9f1df7882dbd1943ce8909e4d8fee00419f1 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -71,20 +71,6 @@ void LLHUDView::draw()
 	LLView::draw();
 }
 
-
-// public
-const LLColor4& LLHUDView::colorFromType(S32 type)
-{
-	switch (type)
-	{
-	case 0:
-		return LLColor4::green;
-	default:
-		return LLColor4::black;
-	}
-}
-
-
 /*virtual*/
 BOOL LLHUDView::handleMouseDown(S32 x, S32 y, MASK mask)
 {
diff --git a/indra/newview/llhudview.h b/indra/newview/llhudview.h
index 05ff9c8596bbeaeecbd1b22fd438194c3ec8ee9f..0946e2c5c8314ba4e59d5adccd4505fb89fa8c02 100644
--- a/indra/newview/llhudview.h
+++ b/indra/newview/llhudview.h
@@ -47,8 +47,6 @@ class LLHUDView
 
 	virtual void draw();
 
-	const LLColor4& colorFromType(S32 type);
-
 protected:
 	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
 };
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index dee86f4a222504ac1f0e6192de6ddea54bb0f4ce..a634a1b0fd05d17878e07f13d99f33e9db866c97 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -106,6 +106,8 @@ void LLIMFloater::onFocusReceived()
 // virtual
 void LLIMFloater::onClose(bool app_quitting)
 {
+	if (!gIMMgr->hasSession(mSessionID)) return;
+	
 	setTyping(false);
 	gIMMgr->leaveSession(mSessionID);
 }
@@ -113,7 +115,7 @@ void LLIMFloater::onClose(bool app_quitting)
 /* static */
 void LLIMFloater::newIMCallback(const LLSD& data){
 	
-	if (data["num_unread"].asInteger() > 0)
+	if (data["num_unread"].asInteger() > 0 || data["from_id"].asUUID().isNull())
 	{
 		LLUUID session_id = data["session_id"].asUUID();
 
@@ -223,6 +225,7 @@ BOOL LLIMFloater::postBuild()
 	// enable line history support for instant message bar
 	mInputEditor->setEnableLineHistory(TRUE);
 	
+	
 	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );
 	mInputEditor->setFocusLostCallback( boost::bind(onInputEditorFocusLost, _1, this) );
 	mInputEditor->setKeystrokeCallback( onInputEditorKeystroke, this );
@@ -230,11 +233,17 @@ BOOL LLIMFloater::postBuild()
 	mInputEditor->setRevertOnEsc( FALSE );
 	mInputEditor->setReplaceNewlinesWithSpaces( FALSE );
 
+	std::string session_name(LLIMModel::instance().getName(mSessionID));
+
+	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + session_name);
+
+	LLStringUtil::toUpper(session_name);
+	setTitle(session_name);
+
 	childSetCommitCallback("chat_editor", onSendMsg, this);
 	
 	mChatHistory = getChild<LLChatHistory>("chat_history");
-		
-	setTitle(LLIMModel::instance().getName(mSessionID));
+
 	setDocked(true);
 
 	mTypingStart = LLTrans::getString("IM_typing_start_string");
@@ -489,7 +498,8 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void*
 	// Allow enabling the LLIMFloater input editor only if session can accept text
 	LLIMModel::LLIMSession* im_session =
 		LLIMModel::instance().findIMSession(self->mSessionID);
-	if( im_session && im_session->mTextIMPossible )
+	//TODO: While disabled lllineeditor can receive focus we need to check if it is enabled (EK)
+	if( im_session && im_session->mTextIMPossible && !self->mInputEditor->getEnabled())
 	{
 		//in disconnected state IM input editor should be disabled
 		self->mInputEditor->setEnabled(!gDisconnected);
@@ -579,6 +589,32 @@ void LLIMFloater::processIMTyping(const LLIMInfo* im_info, BOOL typing)
 	}
 }
 
+void LLIMFloater::processAgentListUpdates(const LLSD& body)
+{
+	if ( !body.isMap() ) return;
+
+	if ( body.has("agent_updates") && body["agent_updates"].isMap() )
+	{
+		LLSD agent_data = body["agent_updates"].get(gAgentID.asString());
+		if (agent_data.isMap() && agent_data.has("info"))
+		{
+			LLSD agent_info = agent_data["info"];
+
+			if (agent_info.has("mutes"))
+			{
+				BOOL moderator_muted_text = agent_info["mutes"]["text"].asBoolean(); 
+				mInputEditor->setEnabled(!moderator_muted_text);
+				std::string label;
+				if (moderator_muted_text)
+					label = LLTrans::getString("IM_muted_text_label");
+				else
+					label = LLTrans::getString("IM_to_label") + " " + LLIMModel::instance().getName(mSessionID);
+				mInputEditor->setLabel(label);
+			}
+		}
+	}
+}
+
 void LLIMFloater::processSessionUpdate(const LLSD& session_update)
 {
 	// *TODO : verify following code when moderated mode will be implemented
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index f5edb3188abb10cbb8c8dbbc0765fa4c2d604ae9..065441b18895a1a5018b6b8f0952ca90340de0ee 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -90,6 +90,7 @@ class LLIMFloater : public LLTransientDockableFloater
 
 	void onVisibilityChange(const LLSD& new_visibility);
 	void processIMTyping(const LLIMInfo* im_info, BOOL typing);
+	void processAgentListUpdates(const LLSD& body);
 	void processSessionUpdate(const LLSD& session_update);
 
 	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index c4beb666ea7241549f65a57597790387d5efdf27..0b8b5935f874000a0a7f1b3afc31979c830fa917 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -70,6 +70,7 @@
 #include "llpanelimcontrolpanel.h"
 #include "llrecentpeople.h"
 #include "llresmgr.h"
+#include "lltooldraganddrop.h"
 #include "lltrans.h"
 #include "lltabcontainer.h"
 #include "llviewertexteditor.h"
@@ -320,6 +321,9 @@ void LLFloaterIMPanel::draw()
 
 	// hide/show start call and end call buttons
 	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID);
+	if (!voice_channel)
+		return;
+
 	childSetVisible("end_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED);
 	childSetVisible("start_call_btn", LLVoiceClient::voiceEnabled() && voice_channel->getState() < LLVoiceChannel::STATE_CALL_STARTED);
 	childSetEnabled("start_call_btn", enable_connect);
@@ -769,10 +773,13 @@ void LLFloaterIMPanel::onVisibilityChange(const LLSD& new_visibility)
 	}
 	
 	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionUUID);
-	if (new_visibility.asBoolean() && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED)
-		LLFloaterReg::showInstance("voice_call", mSessionUUID);
-	else
-		LLFloaterReg::hideInstance("voice_call", mSessionUUID);
+	if (voice_channel && voice_channel->getState() == LLVoiceChannel::STATE_CONNECTED)
+	{
+		if (new_visibility.asBoolean())
+			LLFloaterReg::showInstance("voice_call", mSessionUUID);
+		else
+			LLFloaterReg::hideInstance("voice_call", mSessionUUID);
+	}
 }
 
 void LLFloaterIMPanel::sendMsg()
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 66a3e3e85c03df90ee9f53e379ffd983eb6e8beb..8fb7027e82c90ea5d160c52bb64c078223f31f3e 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -134,7 +134,6 @@ void LLIMModel::setActiveSessionID(const LLUUID& session_id)
 LLIMModel::LLIMModel() 
 {
 	addNewMsgCallback(LLIMFloater::newIMCallback);
-	addNoUnreadMsgsCallback(LLIMFloater::newIMCallback);
 	addNewMsgCallback(toast_callback);
 }
 
@@ -316,7 +315,7 @@ void LLIMModel::testMessages()
 	bot2_id.generate(from);
 	LLUUID bot2_session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, bot2_id);
 	newSession(bot2_session_id, from, IM_NOTHING_SPECIAL, bot2_id);
-	addMessage(bot2_session_id, from, bot2_id, "Test Message: Can I haz bear? ");
+	addMessage(bot2_session_id, from, bot2_id, "Test Message: Hello there, I have a question. Can I bother you for a second? ");
 	addMessage(bot2_session_id, from, bot2_id, "Test Message: OMGWTFBBQ.");
 }
 
@@ -440,7 +439,8 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co
 	addToHistory(session_id, from, from_id, utf8_text);
 	if (log2file) logToFile(session_id, from, from_id, utf8_text);
 
-	session->mNumUnread++;
+	//we do not count system messages
+	if (from_id.notNull()) session->mNumUnread++;
 
 	// notify listeners
 	LLSD arg;
@@ -1192,10 +1192,14 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 		}
 		else
 		{
-			gIMMgr->addSession(
+			LLUUID session_id = gIMMgr->addSession(
 				mPayload["session_name"].asString(),
 				type,
 				session_id);
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 
 			std::string url = gAgent.getRegion()->getCapability(
 				"ChatSessionRequest");
@@ -1279,10 +1283,14 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
 			}
 			else
 			{
-				gIMMgr->addSession(
+				LLUUID session_id = gIMMgr->addSession(
 					payload["session_name"].asString(),
 					type,
 					session_id);
+				if (session_id != LLUUID::null)
+				{
+					LLIMFloater::show(session_id);
+				}
 
 				std::string url = gAgent.getRegion()->getCapability(
 					"ChatSessionRequest");
@@ -1350,13 +1358,6 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
 LLIMMgr::LLIMMgr() :
 	mIMReceived(FALSE)
 {
-	static bool registered_dialog = false;
-	if (!registered_dialog)
-	{
-		LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
-		registered_dialog = true;
-	}
-
 	mPendingInvitations = LLSD::emptyMap();
 	mPendingAgentListUpdates = LLSD::emptyMap();
 }
@@ -1555,6 +1556,10 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name,
 							const std::string& caller_uri)
 {
 	LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
 
 	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
 	if (speaker_mgr)
@@ -1604,7 +1609,6 @@ LLUUID LLIMMgr::addSession(
 		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);
 	}
 
-	LLIMFloater::show(session_id);
 
 	//*TODO remove this "floater" thing when Communicate Floater's gone
 	LLFloaterIMPanel* floater = findFloaterBySession(session_id);
@@ -1849,6 +1853,29 @@ void LLIMMgr::clearPendingInvitation(const LLUUID& session_id)
 	}
 }
 
+void LLIMMgr::processAgentListUpdates(const LLUUID& session_id, const LLSD& body)
+{
+	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
+	if ( im_floater )
+	{
+		im_floater->processAgentListUpdates(body);
+	}
+	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
+	if (speaker_mgr)
+	{
+		speaker_mgr->updateSpeakers(body);
+	}
+	else
+	{
+		//we don't have a speaker manager yet..something went wrong
+		//we are probably receiving an update here before
+		//a start or an acceptance of an invitation.  Race condition.
+		gIMMgr->addPendingAgentListUpdates(
+			session_id,
+			body);
+	}
+}
+
 LLSD LLIMMgr::getPendingAgentListUpdates(const LLUUID& session_id)
 {
 	if ( mPendingAgentListUpdates.has(session_id.asString()) )
@@ -2233,20 +2260,7 @@ class LLViewerChatterBoxSessionAgentListUpdates : public LLHTTPNode
 		const LLSD& input) const
 	{
 		const LLUUID& session_id = input["body"]["session_id"].asUUID();
-		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
-		if (speaker_mgr)
-		{
-			speaker_mgr->updateSpeakers(input["body"]);
-		}
-		else
-		{
-			//we don't have a speaker manager yet..something went wrong
-			//we are probably receiving an update here before
-			//a start or an acceptance of an invitation.  Race condition.
-			gIMMgr->addPendingAgentListUpdates(
-				input["body"]["session_id"].asUUID(),
-				input["body"]);
-		}
+		gIMMgr->processAgentListUpdates(session_id, input["body"]);
 	}
 };
 
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index f986d9dcdbe07cf31c77b5f75a470dcb8665a9ac..bd55bd2c30632ae9f5edb44f280698eaef7068e8 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -66,7 +66,10 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 		EInstantMessage mType;
 		LLUUID mOtherParticipantID;
 		std::vector<LLUUID> mInitialTargetIDs;
+
+		//does NOT include system messages
 		S32 mNumUnread;
+
 		std::list<LLSD> mMsgs;
 
 		LLVoiceChannel* mVoiceChannel;
@@ -315,6 +318,7 @@ class LLIMMgr : public LLSingleton<LLIMMgr>
 
 	void clearPendingInvitation(const LLUUID& session_id);
 
+	void processAgentListUpdates(const LLUUID& session_id, const LLSD& body);
 	LLSD getPendingAgentListUpdates(const LLUUID& session_id);
 	void addPendingAgentListUpdates(
 		const LLUUID& sessioN_id,
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 99580d091899efc1c6be099496eed7be27581446..8dc7833f6aceb4db012aacec8e4aa91bc4e96781 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -47,6 +47,7 @@
 #include "llstartup.h"
 #include "llviewermenu.h"
 #include "llvoiceclient.h"
+#include "llviewerobjectlist.h"
 
 // Linden libraries
 #include "llfloater.h"
@@ -107,9 +108,13 @@ class LLInspectAvatar : public LLInspect
 	void onClickPay();
 	void onClickBlock();
 	void onClickReport();
+	void onClickFreeze();
+	void onClickEject();
 	void onClickZoomIn();  
 	void onClickFindOnMap();
 	bool onVisibleFindOnMap();
+	bool onVisibleFreezeEject();
+	bool onVisibleZoomIn();
 	void onClickMuteVolume();
 	void onVolumeChange(const LLSD& data);
 	
@@ -185,16 +190,24 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 {
 	mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile",	boost::bind(&LLInspectAvatar::onClickViewProfile, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.AddFriend",	boost::bind(&LLInspectAvatar::onClickAddFriend, this));	
-	mCommitCallbackRegistrar.add("InspectAvatar.IM",	boost::bind(&LLInspectAvatar::onClickIM, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.IM",
+		boost::bind(&LLInspectAvatar::onClickIM, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Teleport",	boost::bind(&LLInspectAvatar::onClickTeleport, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Block",	boost::bind(&LLInspectAvatar::onClickBlock, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.Freeze",
+		boost::bind(&LLInspectAvatar::onClickFreeze, this));	
+	mCommitCallbackRegistrar.add("InspectAvatar.Eject",
+		boost::bind(&LLInspectAvatar::onClickEject, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.Report",	boost::bind(&LLInspectAvatar::onClickReport, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.FindOnMap",	boost::bind(&LLInspectAvatar::onClickFindOnMap, this));	
 	mCommitCallbackRegistrar.add("InspectAvatar.ZoomIn", boost::bind(&LLInspectAvatar::onClickZoomIn, this));
 	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap",	boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this));	
-
+	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject",	
+		boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));	
+	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleZoomIn", 
+		boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
 
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -298,7 +311,21 @@ void LLInspectAvatar::requestUpdate()
 	// You can't re-add someone as a friend if they are already your friend
 	bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL;
 	bool is_self = (mAvatarID == gAgentID);
-	childSetEnabled("add_friend_btn", !is_friend && !is_self);
+	if (is_self)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
+	else if (is_friend)
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(false);
+		getChild<LLUICtrl>("im_btn")->setVisible(true);
+	}
+	else
+	{
+		getChild<LLUICtrl>("add_friend_btn")->setVisible(true);
+		getChild<LLUICtrl>("im_btn")->setVisible(false);
+	}
 
 	// Use an avatar_icon even though the image id will come down with the
 	// avatar properties because the avatar_icon code maintains a cache of icons
@@ -437,13 +464,13 @@ void LLInspectAvatar::nameUpdatedCallback(
 void LLInspectAvatar::onClickAddFriend()
 {
 	LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickViewProfile()
 {
-	// hide inspector when showing profile
-	setFocus(FALSE);
 	LLAvatarActions::showProfile(mAvatarID);
+	closeFloater();
 }
 
 bool LLInspectAvatar::onVisibleFindOnMap()
@@ -451,24 +478,38 @@ bool LLInspectAvatar::onVisibleFindOnMap()
 	return gAgent.isGodlike() || is_agent_mappable(mAvatarID);
 }
 
+bool LLInspectAvatar::onVisibleFreezeEject()
+{
+	return enable_freeze_eject( LLSD(mAvatarID) );
+}
+
+bool LLInspectAvatar::onVisibleZoomIn()
+{
+	return gObjectList.findObject(mAvatarID);
+}
+
 void LLInspectAvatar::onClickIM()
 { 
 	LLAvatarActions::startIM(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickTeleport()
 {
 	LLAvatarActions::offerTeleport(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickInviteToGroup()
 {
 	LLAvatarActions::inviteToGroup(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickPay()
 {
 	LLAvatarActions::pay(mAvatarID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickBlock()
@@ -476,11 +517,25 @@ void LLInspectAvatar::onClickBlock()
 	LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT);
 	LLMuteList::getInstance()->add(mute);
 	LLPanelBlockedList::showPanelAndSelect(mute.mID);
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickReport()
 {
 	LLFloaterReporter::showFromObject(mAvatarID);
+	closeFloater();
+}
+
+void LLInspectAvatar::onClickFreeze()
+{
+	handle_avatar_freeze( LLSD(mAvatarID) );
+	closeFloater();
+}
+
+void LLInspectAvatar::onClickEject()
+{
+	handle_avatar_eject( LLSD(mAvatarID) );
+	closeFloater();
 }
 
 void LLInspectAvatar::onClickZoomIn() 
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 050a61c79b266f567f03f9cde619e865e52e7e0c..e3780f93ff69e4a709c353de64b7c46d2aa2b273 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -112,6 +112,7 @@ class LLInspectObject : public LLInspect
 	LLUUID				mObjectID;
 	S32					mObjectFace;
 	viewer_media_t		mMediaImpl;
+	LLMediaEntry*       mMediaEntry;
 	LLSafeHandle<LLObjectSelection> mObjectSelection;
 };
 
@@ -120,7 +121,8 @@ LLInspectObject::LLInspectObject(const LLSD& sd)
 	mObjectID(NULL),			// set in onOpen()
 	mObjectFace(0),
 	mObjectSelection(NULL),
-	mMediaImpl(NULL)
+	mMediaImpl(NULL),
+	mMediaEntry(NULL)
 {
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -231,11 +233,11 @@ void LLInspectObject::onOpen(const LLSD& data)
 		if (!tep)
 			return;
 		
-		const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
-		if(!mep)
+		mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL;
+		if(!mMediaEntry)
 			return;
 		
-		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
 	}
 }
 
@@ -282,11 +284,11 @@ void LLInspectObject::update()
 	if (!tep)
 		return;
 	
-	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
-	if(!mep)
+	mMediaEntry = tep->hasMedia() ? tep->getMediaData() : NULL;
+	if(!mMediaEntry)
 		return;
 	
-	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
 	
 	updateMediaCurrentURL();
 	updateSecureBrowsing();
@@ -430,14 +432,17 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)
 
 void LLInspectObject::updateMediaCurrentURL()
 {	
+	if(!mMediaEntry)
+		return;
 	LLTextBox* textbox = getChild<LLTextBox>("object_media_url");
 	std::string media_url = "";
 	textbox->setValue(media_url);
 	textbox->setToolTip(media_url);
+	LLStringUtil::format_map_t args;
 	
 	if(mMediaImpl.notNull() && mMediaImpl->hasMedia())
 	{
-		LLStringUtil::format_map_t args;
+		
 		LLPluginClassMedia* media_plugin = NULL;
 		media_plugin = mMediaImpl->getMediaPlugin();
 		if(media_plugin)
@@ -451,15 +456,17 @@ void LLInspectObject::updateMediaCurrentURL()
 				args["[CurrentURL]"] =  media_plugin->getLocation();
 			}
 			media_url = LLTrans::getString("CurrentURL", args);
-			textbox->setText(media_url);
-			textbox->setToolTip(media_url);
+
 		}
 	}
-	else
+	else if(mMediaEntry->getCurrentURL() != "")
 	{
-		textbox->setText(media_url);
-		textbox->setToolTip(media_url);
+		args["[CurrentURL]"] = mMediaEntry->getCurrentURL();
+		media_url = LLTrans::getString("CurrentURL", args);
 	}
+
+	textbox->setText(media_url);
+	textbox->setToolTip(media_url);
 }
 
 void LLInspectObject::updateCreator(LLSelectNode* nodep)
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index dcd1339ad098c3071796ce6dd2cd5c6c83530855..70e2daad0d57a5097eb33f3dd5d16b3bfcb11645 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -62,7 +62,9 @@
 #include "llavataractions.h"
 #include "llgesturemgr.h"
 #include "lliconctrl.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llinventoryclipboard.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
@@ -76,6 +78,7 @@
 #include "llscrollcontainer.h"
 #include "llimview.h"
 #include "lltooldraganddrop.h"
+#include "llviewerfoldertype.h"
 #include "llviewertexturelist.h"
 #include "llviewerinventory.h"
 #include "llviewerobjectlist.h"
@@ -83,6 +86,7 @@
 #include "llvoavatar.h"
 #include "llwearable.h"
 #include "llwearablelist.h"
+#include "llviewerassettype.h"
 #include "llviewermessage.h"
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
@@ -93,6 +97,7 @@
 #include "llfloateropenobject.h"
 #include "lltrans.h"
 #include "llappearancemgr.h"
+#include "llimfloater.h"
 
 using namespace LLOldEvents;
 
@@ -202,9 +207,9 @@ PermissionMask LLInvFVBridge::getPermissionMask() const
 }
 
 // virtual
-LLAssetType::EType LLInvFVBridge::getPreferredType() const
+LLFolderType::EType LLInvFVBridge::getPreferredType() const
 {
-	return LLAssetType::AT_NONE;
+	return LLFolderType::FT_NONE;
 }
 
 
@@ -277,7 +282,14 @@ void LLInvFVBridge::cutToClipboard()
 // *TODO: make sure this does the right thing
 void LLInvFVBridge::showProperties()
 {
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	// Disable old properties floater; this is replaced by the sidepanel.
+	/*
 	LLFloaterReg::showInstance("properties", mUUID);
+	*/
 }
 
 void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
@@ -335,7 +347,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
 	LLMessageSystem* msg = gMessageSystem;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = NULL;
 	LLViewerInventoryCategory* cat = NULL;
 	std::vector<LLUUID> move_ids;
@@ -500,7 +512,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
 			}
 		}
 		const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
-		if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType()))
+		if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -508,7 +520,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
 	return TRUE;
 }
 
-void hideContextEntries(LLMenuGL& menu,
+void hide_context_entries(LLMenuGL& menu, 
 						const std::vector<std::string> &entries_to_show,
 						const std::vector<std::string> &disabled_entries)
 {
@@ -523,7 +535,7 @@ void hideContextEntries(LLMenuGL& menu,
 		LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor);
 		if ((name == "More") && branchp)
 		{
-			hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries);
+			hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries);
 		}
 
 
@@ -600,6 +612,12 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
 	{
 		disabled_items.push_back(std::string("Delete"));
 	}
+
+	// If multiple items are selected, disable properties (if it exists).
+	if ((flags & FIRST_SELECTED_ITEM) == 0)
+	{
+		disabled_items.push_back(std::string("Properties"));
+	}
 }
 
 void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -623,7 +641,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 
 		getClipboardEntries(true, items, disabled_items, flags);
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 // *TODO: remove this
@@ -635,7 +653,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 
 	if(obj)
 	{
-		*type = LLAssetType::lookupDragAndDropType(obj->getActualType());
+		*type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType());
 		if(*type == DAD_NONE)
 		{
 			return FALSE;
@@ -676,7 +694,7 @@ BOOL LLInvFVBridge::isInTrash() const
 {
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return model->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -689,7 +707,7 @@ BOOL LLInvFVBridge::isLinkedObjectInTrash() const
 	{
 		LLInventoryModel* model = getInventoryModel();
 		if(!model) return FALSE;
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id);
 	}
 	return FALSE;
@@ -707,7 +725,7 @@ BOOL LLInvFVBridge::isCOFFolder() const
 {
 	const LLInventoryModel* model = getInventoryModel();
 	if(!model) return TRUE;
-	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+	const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 	if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id))
 	{
 		return TRUE;
@@ -1042,7 +1060,7 @@ void LLItemBridge::restoreItem()
 	if(item)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		const LLUUID new_parent = model->findCategoryUUIDForType(item->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 		// do not restamp on restore.
 		LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE);
 	}
@@ -1075,7 +1093,7 @@ void LLItemBridge::restoreToWorld()
 	}
 
 	// Check if it's in the trash. (again similar to the normal rez logic)
-	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id))
 	{
 		remove_from_inventory = TRUE;
@@ -1270,7 +1288,7 @@ BOOL LLItemBridge::removeItem()
 	LLPreview::hide(mUUID, TRUE);
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLViewerInventoryItem* item = getItem();
 
 	// if item is not already in trash
@@ -1363,7 +1381,7 @@ BOOL LLFolderBridge::isItemMovable() const
 	LLInventoryObject* obj = getInventoryObject();
 	if(obj)
 	{
-		return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType()));
+		return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()));
 	}
 	return FALSE;
 }
@@ -1399,7 +1417,7 @@ BOOL LLFolderBridge::isItemRemovable()
 		return FALSE;
 	}
 
-	if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+	if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 	{
 		return FALSE;
 	}
@@ -1412,7 +1430,7 @@ BOOL LLFolderBridge::isItemRemovable()
 	for( i = 0; i < descendent_categories.count(); i++ )
 	{
 		LLInventoryCategory* category = descendent_categories[i];
-		if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+		if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 		{
 			return FALSE;
 		}
@@ -1589,20 +1607,20 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 		const LLUUID& cat_id = inv_cat->getUUID();
 
 		// Is the destination the trash?
-		const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id)
 				|| model->isObjectDescendentOf(mUUID, trash_id);
-		BOOL is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType()));
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()));
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
 			// BAP - restrictions?
 			is_movable = true;
 		}
 
-		if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE))
+		if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE))
 		{
 			is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604
 		}
@@ -1614,7 +1632,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 			for( i = 0; i < descendent_categories.count(); i++ )
 			{
 				LLInventoryCategory* category = descendent_categories[i];
-				if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType()))
+				if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
 				{
 					// ...can't move "special folders" like Textures
 					is_movable = FALSE;
@@ -1847,8 +1865,8 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
 		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
 		// BAP remove AT_NONE support after ensembles are fully working?
 		return (linked_category &&
-				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
-				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
+				((linked_category->getPreferredType() == LLFolderType::FT_NONE) ||
+				 (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType()))));
 	}
 }
 
@@ -2122,6 +2140,7 @@ void LLFolderBridge::openItem()
 	lldebugs << "LLFolderBridge::openItem()" << llendl;
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
+	if(mUUID.isNull()) return;
 	bool fetching_inventory = model->fetchDescendentsOf(mUUID);
 	// Only change folder type if we have the folder contents.
 	if (!fetching_inventory)
@@ -2150,7 +2169,7 @@ void LLFolderBridge::determineFolderType()
 BOOL LLFolderBridge::isItemRenameable() const
 {
 	LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory();
-	if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())
+	if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())
 	   && (cat->getOwnerID() == gAgent.getID()))
 	{
 		return TRUE;
@@ -2165,15 +2184,15 @@ void LLFolderBridge::restoreItem()
 	if(cat)
 	{
 		LLInventoryModel* model = getInventoryModel();
-		LLUUID new_parent = model->findCategoryUUIDForType(cat->getType());
+		const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(cat->getType()));
 		// do not restamp children on restore
 		LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE);
 	}
 }
 
-LLAssetType::EType LLFolderBridge::getPreferredType() const
+LLFolderType::EType LLFolderBridge::getPreferredType() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2186,7 +2205,7 @@ LLAssetType::EType LLFolderBridge::getPreferredType() const
 // Icons for folders are based on the preferred type
 LLUIImagePtr LLFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(cat)
 	{
@@ -2195,7 +2214,7 @@ LLUIImagePtr LLFolderBridge::getIcon() const
 	return getIcon(preferred_type);
 }
 
-LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type)
+LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type)
 {
 	// we only have one folder image now
 	return LLUI::getUIImage("Inv_FolderClosed");
@@ -2237,7 +2256,7 @@ BOOL LLFolderBridge::removeItem()
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return FALSE;
 
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 
 	// Look for any gestures and deactivate them
 	LLInventoryModel::cat_array_t	descendent_categories;
@@ -2355,11 +2374,11 @@ void LLFolderBridge::folderOptionsMenu()
 	if(!model) return;
 
 	const LLInventoryCategory* category = model->getCategory(mUUID);
-	LLAssetType::EType type = category->getPreferredType();
-	const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type);
+	LLFolderType::EType type = category->getPreferredType();
+	const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type);
 	// BAP change once we're no longer treating regular categories as ensembles.
-	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
-										  LLAssetType::lookupIsEnsembleCategoryType(type));
+	const bool is_ensemble = category && (type == LLFolderType::FT_NONE ||
+										  LLFolderType::lookupIsEnsembleType(type));
 
 	// calling card related functionality for folders.
 
@@ -2400,7 +2419,7 @@ void LLFolderBridge::folderOptionsMenu()
 		}
 		mItems.push_back(std::string("Take Off Items"));
 	}
-	hideContextEntries(*mMenu, mItems, disabled_items);
+	hide_context_entries(*mMenu, mItems, disabled_items);
 }
 
 BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type)
@@ -2425,8 +2444,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 //	std::vector<std::string> disabled_items;
 	LLInventoryModel* model = getInventoryModel();
 	if(!model) return;
-	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
-	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+	const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+	const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 
 	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
 	mDisabledItems.clear(); //adding code to clear out disabled members from previous
@@ -2456,7 +2475,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	else if(isAgentInventory()) // do not allow creating in library
 	{
 		LLViewerInventoryCategory *cat =  getCategory();
-
 		// BAP removed protected check to re-enable standard ops in untyped folders.
 		// Not sure what the right thing is to do here.
 		if (!isCOFFolder() && cat /*&&
@@ -2473,7 +2491,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			mItems.push_back(std::string("Change Type"));
 
 			LLViewerInventoryCategory *cat = getCategory();
-			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
+			if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
 			{
 				mDisabledItems.push_back(std::string("Change Type"));
 			}
@@ -2483,7 +2501,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		else
 		{
 			// Want some but not all of the items from getClipboardEntries for outfits.
-			if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT)
+			if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT)
 			{
 				mItems.push_back(std::string("Rename"));
 				mItems.push_back(std::string("Delete"));
@@ -2539,7 +2557,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		mItems.push_back(std::string("--no options--"));
 		mDisabledItems.push_back(std::string("--no options--"));
 	}
-	hideContextEntries(menu, mItems, mDisabledItems);
+	hide_context_entries(menu, mItems, mDisabledItems);
 }
 
 BOOL LLFolderBridge::hasChildren() const
@@ -2620,7 +2638,7 @@ void LLFolderBridge::createNewCategory(void* user_data)
 	if(!model) return;
 	LLUUID id;
 	id = model->createNewCategory(bridge->getUUID(),
-								  LLAssetType::AT_NONE,
+								  LLFolderType::FT_NONE,
 								  LLStringUtil::null);
 	model->notifyObservers();
 
@@ -2705,7 +2723,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type)
 // Separate function so can be called by global menu as well as right-click
 // menu.
 // static
-void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
+void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type)
 {
 	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);
 	LLAssetType::EType asset_type = wearable->getAssetType();
@@ -2848,17 +2866,17 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			break;
 
 		case LLAssetType::AT_CATEGORY:
-			is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType());
+			is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
 			break;
 		default:
 			break;
 		}
 
-		LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
+		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
+		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 
 		if(is_movable && move_is_into_trash)
 		{
@@ -2888,7 +2906,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 				.isObjDirectDescendentOfCategory (inv_item, getCategory());
 		}
 
-		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+		const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 
 		// we can move item inside a folder only if this folder is Favorites. See EXT-719
 		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
@@ -3088,6 +3106,49 @@ void LLTextureBridge::openItem()
 	}
 }
 
+void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	if(isInTrash())
+	{
+		items.push_back(std::string("Purge Item"));
+		if (!isItemRemovable())
+		{
+			disabled_items.push_back(std::string("Purge Item"));
+		}
+
+		items.push_back(std::string("Restore Item"));
+	}
+	else
+	{
+		items.push_back(std::string("Open"));
+		items.push_back(std::string("Properties"));
+
+		getClipboardEntries(true, items, disabled_items, flags);
+
+		items.push_back(std::string("Texture Separator"));
+		items.push_back(std::string("Save As"));
+	}
+	hide_context_entries(menu, items, disabled_items);	
+}
+
+// virtual
+void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if ("save_as" == action)
+	{
+		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+		LLPreviewTexture* preview_texture = LLFloaterReg::findTypedInstance<LLPreviewTexture>("preview_texture", mUUID);
+		if (preview_texture)
+		{
+			preview_texture->openToSave();
+		}
+	}
+	else LLItemBridge::performAction(folder, model, action);
+}
+
 // +=================================================+
 // |        LLSoundBridge                            |
 // +=================================================+
@@ -3136,7 +3197,7 @@ void LLSoundBridge::openSoundPreview(void* which)
 
 void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 {
-	lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
+	lldebugs << "LLSoundBridge::buildContextMenu()" << llendl;
 	std::vector<std::string> items;
 	std::vector<std::string> disabled_items;
 
@@ -3161,7 +3222,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	items.push_back(std::string("Sound Separator"));
 	items.push_back(std::string("Sound Play"));
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 // +=================================================+
@@ -3218,7 +3279,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		disabled_items.push_back(std::string("About Landmark"));
 	}
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 // Convenience function for the two functions below.
@@ -3348,7 +3409,11 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
 		{
 			std::string callingcard_name;
 			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
-			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+			LLUUID session_id = gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
 		}
 	}
 	else if ("lure" == action)
@@ -3447,7 +3512,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			disabled_items.push_back(std::string("Conference Chat"));
 		}
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,
@@ -3677,7 +3742,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		items.push_back(std::string("Activate"));
 		items.push_back(std::string("Deactivate"));
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 // +=================================================+
@@ -3717,7 +3782,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	items.push_back(std::string("Animation Play"));
 	items.push_back(std::string("Animation Audition"));
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 
 }
 
@@ -3862,6 +3927,11 @@ void LLObjectBridge::openItem()
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
 	}
 
+	LLSD key;
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+	// Disable old properties floater; this is replaced by the sidepanel.
 	/*
 	LLFloaterReg::showInstance("properties", mUUID);
 	*/
@@ -4073,7 +4143,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			}
 		}
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 BOOL LLObjectBridge::renameItem(const std::string& new_name)
@@ -4486,7 +4556,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			}
 		}
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 // Called from menus
@@ -4785,7 +4855,7 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	}
 
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 
@@ -4998,7 +5068,7 @@ void	LLLSLTextBridgeAction::doIt()
 BOOL LLWearableBridgeAction::isInTrash() const
 {
 	if(!mModel) return FALSE;
-	LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	return mModel->isObjectDescendentOf(mUUID, trash_id);
 }
 
@@ -5135,7 +5205,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			disabled_items.push_back(std::string("Delete"));
 		}
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 
@@ -5149,7 +5219,7 @@ std::string LLLinkFolderBridge::sPrefix("Link: ");
 
 LLUIImagePtr LLLinkFolderBridge::getIcon() const
 {
-	LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+	LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 	if (LLViewerInventoryItem *item = getItem())
 	{
 		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory())
@@ -5186,7 +5256,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			disabled_items.push_back(std::string("Delete"));
 		}
 	}
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 95a5f97e7bfebe7e65e80598228e686bea9f2d4f..f9bd91f141e3c39956b1e3edd71264db796e3fa3 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -41,6 +41,7 @@
 #include "llfoldervieweventlistener.h"
 
 class LLInventoryPanel;
+class LLMenuGL;
 
 enum EInventoryIcon
 {
@@ -123,7 +124,7 @@ class LLInventoryPanelObserver : public LLInventoryObserver
 };
 
 const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);
-void hideContextEntries(LLMenuGL& menu, 
+void hide_context_entries(LLMenuGL& menu, 
 						const std::vector<std::string> &entries_to_show,
 						const std::vector<std::string> &disabled_entries);
 
@@ -160,7 +161,7 @@ class LLInvFVBridge : public LLFolderViewEventListener
 	virtual const std::string& getName() const;
 	virtual const std::string& getDisplayName() const;
 	virtual PermissionMask getPermissionMask() const;
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual time_t getCreationDate() const;
 	virtual LLFontGL::StyleFlags getLabelStyle() const
 	{
@@ -299,9 +300,9 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual void selectItem();
 	virtual void restoreItem();
 
-	virtual LLAssetType::EType getPreferredType() const;
+	virtual LLFolderType::EType getPreferredType() const;
 	virtual LLUIImagePtr getIcon() const;
-	static LLUIImagePtr getIcon(LLAssetType::EType asset_type);
+	static LLUIImagePtr getIcon(LLFolderType::EType preferred_type);
 
 	virtual BOOL renameItem(const std::string& new_name);
 	virtual BOOL removeItem();
@@ -322,7 +323,7 @@ class LLFolderBridge : public LLInvFVBridge
 	virtual BOOL copyToClipboard() const;
 	
 	static void createWearable(LLFolderBridge* bridge, EWearableType type);
-	static void createWearable(LLUUID parent_folder_id, EWearableType type);
+	static void createWearable(const LLUUID &parent_folder_id, EWearableType type);
 
 	LLViewerInventoryCategory* getCategory() const;
 
@@ -384,6 +385,8 @@ class LLTextureBridge : public LLItemBridge
 public:
 	virtual LLUIImagePtr getIcon() const;
 	virtual void openItem();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
 
 protected:
 	LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) :
@@ -840,5 +843,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
 
 void teleport_via_landmark(const LLUUID& asset_id);
 
+// Utility function to hide all entries except those in the list
+void hide_context_entries(LLMenuGL& menu, 
+		const std::vector<std::string> &entries_to_show, 
+		const std::vector<std::string> &disabled_entries);
 
 #endif // LL_LLINVENTORYBRIDGE_H
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..75218e98e0ae22c4a532d4b8223abef5140ad913
--- /dev/null
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -0,0 +1,340 @@
+/** 
+ * @file llfloaterinventory.cpp
+ * @brief Implementation of the inventory view and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llinventoryfunctions.h"
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "llinventorypanel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+
+BOOL LLInventoryState::sWearNewClothing = FALSE;
+LLUUID LLInventoryState::sWearNewClothingTransactionID;
+
+void LLSaveFolderState::setApply(BOOL apply)
+{
+	mApply = apply; 
+	// before generating new list of open folders, clear the old one
+	if(!apply) 
+	{
+		clearOpenFolders(); 
+	}
+}
+
+void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
+	if(mApply)
+	{
+		// we're applying the open state
+		LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+		if(!bridge) return;
+		LLUUID id(bridge->getUUID());
+		if(mOpenFolders.find(id) != mOpenFolders.end())
+		{
+			folder->setOpen(TRUE);
+		}
+		else
+		{
+			// keep selected filter in its current state, this is less jarring to user
+			if (!folder->isSelected())
+			{
+				folder->setOpen(FALSE);
+			}
+		}
+	}
+	else
+	{
+		// we're recording state at this point
+		if(folder->isOpen())
+		{
+			LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+			if(!bridge) return;
+			mOpenFolders.insert(bridge->getUUID());
+		}
+	}
+}
+
+void LLOpenFilteredFolders::doItem(LLFolderViewItem *item)
+{
+	if (item->getFiltered())
+	{
+		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+void LLOpenFilteredFolders::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getFiltered() && folder->getParentFolder())
+	{
+		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+	// if this folder didn't pass the filter, and none of its descendants did
+	else if (!folder->getFiltered() && !folder->hasFilteredDescendants())
+	{
+		folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_NO);
+	}
+}
+
+void LLSelectFirstFilteredItem::doItem(LLFolderViewItem *item)
+{
+	if (item->getFiltered() && !mItemSelected)
+	{
+		item->getRoot()->setSelection(item, FALSE, FALSE);
+		if (item->getParentFolder())
+		{
+			item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+		item->getRoot()->scrollToShowSelection();
+		mItemSelected = TRUE;
+	}
+}
+
+void LLSelectFirstFilteredItem::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getFiltered() && !mItemSelected)
+	{
+		folder->getRoot()->setSelection(folder, FALSE, FALSE);
+		if (folder->getParentFolder())
+		{
+			folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+		folder->getRoot()->scrollToShowSelection();
+		mItemSelected = TRUE;
+	}
+}
+
+void LLOpenFoldersWithSelection::doItem(LLFolderViewItem *item)
+{
+	if (item->getParentFolder() && item->isSelected())
+	{
+		item->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder)
+{
+	if (folder->getParentFolder() && folder->isSelected())
+	{
+		folder->getParentFolder()->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+	}
+}
+
+const std::string& get_item_icon_name(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point,
+							 BOOL item_is_multi )
+{
+	EInventoryIcon idx = OBJECT_ICON_NAME;
+	if ( item_is_multi )
+	{
+		idx = OBJECT_MULTI_ICON_NAME;
+	}
+	
+	switch(asset_type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		if(LLInventoryType::IT_SNAPSHOT == inventory_type)
+		{
+			idx = SNAPSHOT_ICON_NAME;
+		}
+		else
+		{
+			idx = TEXTURE_ICON_NAME;
+		}
+		break;
+
+	case LLAssetType::AT_SOUND:
+		idx = SOUND_ICON_NAME;
+		break;
+	case LLAssetType::AT_CALLINGCARD:
+		if(attachment_point!= 0)
+		{
+			idx = CALLINGCARD_ONLINE_ICON_NAME;
+		}
+		else
+		{
+			idx = CALLINGCARD_OFFLINE_ICON_NAME;
+		}
+		break;
+	case LLAssetType::AT_LANDMARK:
+		if(attachment_point!= 0)
+		{
+			idx = LANDMARK_VISITED_ICON_NAME;
+		}
+		else
+		{
+			idx = LANDMARK_ICON_NAME;
+		}
+		break;
+	case LLAssetType::AT_SCRIPT:
+	case LLAssetType::AT_LSL_TEXT:
+	case LLAssetType::AT_LSL_BYTECODE:
+		idx = SCRIPT_ICON_NAME;
+		break;
+	case LLAssetType::AT_CLOTHING:
+		idx = CLOTHING_ICON_NAME;
+	case LLAssetType::AT_BODYPART :
+		if(LLAssetType::AT_BODYPART == asset_type)
+		{
+			idx = BODYPART_ICON_NAME;
+		}
+		switch(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point)
+		{
+		case WT_SHAPE:
+			idx = BODYPART_SHAPE_ICON_NAME;
+			break;
+		case WT_SKIN:
+			idx = BODYPART_SKIN_ICON_NAME;
+			break;
+		case WT_HAIR:
+			idx = BODYPART_HAIR_ICON_NAME;
+			break;
+		case WT_EYES:
+			idx = BODYPART_EYES_ICON_NAME;
+			break;
+		case WT_SHIRT:
+			idx = CLOTHING_SHIRT_ICON_NAME;
+			break;
+		case WT_PANTS:
+			idx = CLOTHING_PANTS_ICON_NAME;
+			break;
+		case WT_SHOES:
+			idx = CLOTHING_SHOES_ICON_NAME;
+			break;
+		case WT_SOCKS:
+			idx = CLOTHING_SOCKS_ICON_NAME;
+			break;
+		case WT_JACKET:
+			idx = CLOTHING_JACKET_ICON_NAME;
+			break;
+		case WT_GLOVES:
+			idx = CLOTHING_GLOVES_ICON_NAME;
+			break;
+		case WT_UNDERSHIRT:
+			idx = CLOTHING_UNDERSHIRT_ICON_NAME;
+			break;
+		case WT_UNDERPANTS:
+			idx = CLOTHING_UNDERPANTS_ICON_NAME;
+			break;
+		case WT_SKIRT:
+			idx = CLOTHING_SKIRT_ICON_NAME;
+			break;
+		case WT_ALPHA:
+			idx = CLOTHING_ALPHA_ICON_NAME;
+			break;
+		case WT_TATTOO:
+			idx = CLOTHING_TATTOO_ICON_NAME;
+			break;
+		default:
+			// no-op, go with choice above
+			break;
+		}
+		break;
+	case LLAssetType::AT_NOTECARD:
+		idx = NOTECARD_ICON_NAME;
+		break;
+	case LLAssetType::AT_ANIMATION:
+		idx = ANIMATION_ICON_NAME;
+		break;
+	case LLAssetType::AT_GESTURE:
+		idx = GESTURE_ICON_NAME;
+		break;
+	case LLAssetType::AT_LINK:
+		idx = LINKITEM_ICON_NAME;
+		break;
+	case LLAssetType::AT_LINK_FOLDER:
+		idx = LINKFOLDER_ICON_NAME;
+		break;
+	default:
+		break;
+	}
+	
+	return ICON_NAME[idx];
+}
+
+LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point,
+							 BOOL item_is_multi)
+{
+	const std::string& icon_name = get_item_icon_name(asset_type, inventory_type, attachment_point, item_is_multi );
+	return LLUI::getUIImage(icon_name);
+}
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
new file mode 100644
index 0000000000000000000000000000000000000000..95cc68ddbe1712a1220459391ba3a61adb9d4972
--- /dev/null
+++ b/indra/newview/llinventoryfunctions.h
@@ -0,0 +1,136 @@
+/** 
+ * @file llinventoryfunctions.h
+ * @brief Miscellaneous inventory-related functions and classes
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYFUNCTIONS_H
+#define LL_LLINVENTORYFUNCTIONS_H
+
+#include "llassetstorage.h"
+#include "lldarray.h"
+#include "llfloater.h"
+#include "llinventory.h"
+#include "llinventoryfilter.h"
+#include "llfolderview.h"
+#include "llinventorymodel.h"
+#include "lluictrlfactory.h"
+#include <set>
+
+
+class LLFolderViewItem;
+class LLInventoryFilter;
+class LLInventoryModel;
+class LLInventoryPanel;
+class LLInvFVBridge;
+class LLInventoryFVBridgeBuilder;
+class LLMenuBarGL;
+class LLCheckBoxCtrl;
+class LLSpinCtrl;
+class LLScrollContainer;
+class LLTextBox;
+class LLIconCtrl;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// This is a collection of miscellaneous functions and classes
+// that don't fit cleanly into any other class header.
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLInventoryState
+{
+public:
+	// HACK: Until we can route this info through the instant message hierarchy
+	static BOOL sWearNewClothing;
+	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction	
+};
+
+class LLSelectFirstFilteredItem : public LLFolderViewFunctor
+{
+public:
+	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
+	virtual ~LLSelectFirstFilteredItem() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+	BOOL wasItemSelected() { return mItemSelected; }
+protected:
+	BOOL	mItemSelected;
+};
+
+class LLOpenFilteredFolders : public LLFolderViewFunctor
+{
+public:
+	LLOpenFilteredFolders()  {}
+	virtual ~LLOpenFilteredFolders() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+};
+
+class LLSaveFolderState : public LLFolderViewFunctor
+{
+public:
+	LLSaveFolderState() : mApply(FALSE) {}
+	virtual ~LLSaveFolderState() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item) {}
+	void setApply(BOOL apply);
+	void clearOpenFolders() { mOpenFolders.clear(); }
+protected:
+	std::set<LLUUID> mOpenFolders;
+	BOOL mApply;
+};
+
+class LLOpenFoldersWithSelection : public LLFolderViewFunctor
+{
+public:
+	LLOpenFoldersWithSelection() {}
+	virtual ~LLOpenFoldersWithSelection() {}
+	virtual void doFolder(LLFolderViewFolder* folder);
+	virtual void doItem(LLFolderViewItem* item);
+};
+
+const std::string& get_item_icon_name(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point, 
+							 BOOL item_is_multi );
+
+LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
+							 LLInventoryType::EType inventory_type,
+							 U32 attachment_point, 
+							 BOOL item_is_multi );
+
+#endif // LL_LLINVENTORYFUNCTIONS_H
+
+
+
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 1d7cbde0d5655932477a1df6107a255fb4a2c956..4b7e364cf9364812fa3f4911f5dc62717796f4a6 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -46,7 +46,10 @@
 #include "llfloater.h"
 #include "llfocusmgr.h"
 #include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
+#include "llviewerfoldertype.h"
 #include "llviewerinventory.h"
 #include "llviewermessage.h"
 #include "llviewerwindow.h"
@@ -78,6 +81,10 @@ BOOL LLInventoryModel::sTimelyFetchPending = FALSE;
 LLFrameTimer LLInventoryModel::sFetchTimer;
 S16 LLInventoryModel::sBulkFetchCount = 0;
 
+// Increment this if the inventory contents change in a non-backwards-compatible way.
+// For viewer 2, the addition of link items makes a pre-viewer-2 cache incorrect.
+const S32 LLInventoryModel::sCurrentInvCacheVersion = 2;
+
 // RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue
 static std::deque<LLUUID> sFetchQueue;
 
@@ -314,7 +321,7 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id)
 // specifies 'type' as what it defaults to containing. The category is
 // not necessarily only for that type. *NOTE: This will create a new
 // inventory category on the fly if one does not exist.
-LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool create_folder)
+const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder)
 {
 	const LLUUID &rv = findCatUUID(t);
 	if(rv.isNull() && isInventoryUsable() && create_folder)
@@ -330,10 +337,10 @@ LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool crea
 
 // Internal method which looks for a category with the specified
 // preferred type. Returns LLUUID::null if not found.
-const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) const
+const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const
 {
 	const LLUUID &root_id = gInventory.getRootFolderID();
-	if(LLAssetType::AT_CATEGORY == preferred_type)
+	if(LLFolderType::FT_CATEGORY == preferred_type)
 	{
 		return root_id;
 	}
@@ -361,7 +368,7 @@ const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) c
 // version will take care of details like what the name should be
 // based on preferred type. Returns the UUID of the new category.
 LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
-										   LLAssetType::EType preferred_type,
+										   LLFolderType::EType preferred_type,
 										   const std::string& pname)
 {
 	LLUUID id;
@@ -371,9 +378,9 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 		return id;
 	}
 
-	if(preferred_type == LLAssetType::AT_SIMSTATE)
+	if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup())
 	{
-		lldebugs << "Attempt to create simstate category." << llendl;
+		lldebugs << "Attempt to create undefined category." << llendl;
 		return id;
 	}
 
@@ -385,7 +392,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
 	}
 	else
 	{
-		name.assign(LLAssetType::lookupCategoryName(preferred_type));
+		name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type));
 	}
 
 	// Add the category to the internal representation
@@ -449,7 +456,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 	// Start with categories
 	if(!include_trash)
 	{
-		const LLUUID trash_id = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(trash_id.notNull() && (trash_id == id))
 			return;
 	}
@@ -483,7 +490,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
 			if (item->getActualType() == LLAssetType::AT_LINK_FOLDER)
 			{
 				LLViewerInventoryCategory *linked_cat = item->getLinkedCategory();
-				if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT)
+				if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT)
 					// BAP - was 
 					// LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType()))
 					// Change back once ensemble typing is in place.
@@ -663,7 +670,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 
 		if(item->getParentUUID().isNull())
 		{
-			LLUUID category_id = findCategoryUUIDForType(new_item->getType());
+			const LLUUID category_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType()));
 			new_item->setParent(category_id);
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id);
 			if( item_array )
@@ -687,7 +694,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 			LLUUID parent_id = item->getParentUUID();
 			if(parent_id == CATEGORIZE_LOST_AND_FOUND_ID)
 			{
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 			}
 			item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
@@ -700,7 +707,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 				// Whoops! No such parent, make one.
 				llinfos << "Lost item: " << new_item->getUUID() << " - "
 						<< new_item->getName() << llendl;
-				parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+				parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 				new_item->setParent(parent_id);
 				item_array = get_ptr_in_map(mParentChildItemTree, parent_id);
 				if(item_array)
@@ -1182,7 +1189,7 @@ void LLInventoryModel::mock(const LLUUID& root_id)
 		root_id,
 		LLUUID::null,
 		LLAssetType::AT_CATEGORY,
-		LLAssetType::lookupCategoryName(LLAssetType::AT_ROOT_CATEGORY),
+		LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY),
 		gAgent.getID());
 	addCategory(cat);
 	gInventory.buildParentChildMap();
@@ -1264,6 +1271,8 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str
 
 bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id)
 {
+	if(folder_id.isNull()) return false;
+	
 	LLViewerInventoryCategory* cat = getCategory(folder_id);
 	if(!cat)
 	{
@@ -1340,7 +1349,7 @@ void  fetchDescendentsResponder::result(const LLSD& content)
 				    item_it != folder_sd["items"].endArray();
 				    ++item_it)
 			    {	
-                    LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+                    const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
                     if (lost_uuid.notNull())
                     {
 				        LLSD item = *item_it;
@@ -1820,17 +1829,25 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
 void LLInventoryModel::addItem(LLViewerInventoryItem* item)
 {
 	//llinfos << "LLInventoryModel::addItem()" << llendl;
+
+	
+	// This can happen if assettype enums change.  This can be a backwards compatibility issue 
+	// in some viewer prototypes prior to when the AT_LINK enum changed from 23 to 24.
+	if ((item->getType() == LLAssetType::AT_NONE)
+		|| LLAssetType::lookup(item->getType()) == LLAssetType::badLookup())
+	{
+		llwarns << "Got bad asset type for item ( name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ), ignoring." << llendl;
+		return;
+	}
 	if(item)
 	{
 		// This condition means that we tried to add a link without the baseobj being in memory.
 		// The item will show up as a broken link.
 		if (item->getIsBrokenLink())
 		{
-			llwarns << "Add link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " )  parent: " << item->getParentUUID() << llendl;
-//			llassert_always(FALSE); // DO NOT MERGE THIS IN.  This is an AVP debugging line.  If this line triggers, it means that you just loaded in a broken link.  Unless that happens because you actually deleted a baseobj without deleting the link, it's indicative of a serious problem (likely with your inventory) and should be diagnosed.
+			llinfos << "Adding broken link ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " )  parent: " << item->getParentUUID() << llendl;
 		}
 		mItemMap[item->getUUID()] = item;
-		//mInventory[item->getUUID()] = item;
 	}
 }
 
@@ -2047,11 +2064,11 @@ bool LLInventoryModel::loadSkeleton(
 			cat->setUUID(folder_id.asUUID());
 			cat->setParent(parent_id.asUUID());
 
-			LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+			LLFolderType::EType preferred_type = LLFolderType::FT_NONE;
 			LLSD type_default = (*it)["type_default"];
 			if(type_default.isDefined())
             {
-				preferred_type = (LLAssetType::EType)type_default.asInteger();
+				preferred_type = (LLFolderType::EType)type_default.asInteger();
             }
             cat->setPreferredType(preferred_type);
 			cat->setVersion(version.asInteger());
@@ -2098,7 +2115,8 @@ bool LLInventoryModel::loadSkeleton(
 				llinfos << "Unable to gunzip " << gzip_filename << llendl;
 			}
 		}
-		if(loadFromFile(inventory_filename, categories, items))
+		bool is_cache_obsolete = false;
+		if(loadFromFile(inventory_filename, categories, items, is_cache_obsolete))
 		{
 			// We were able to find a cache of files. So, use what we
 			// found to generate a set of categories we should add. We
@@ -2172,7 +2190,7 @@ bool LLInventoryModel::loadSkeleton(
 						// This can happen if the linked object's baseobj is removed from the cache but the linked object is still in the cache.
 						if (item->getIsBrokenLink())
 						{
-							llinfos << "Attempted to cached link item without baseobj present ( itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) " << llendl;
+							llinfos << "Attempted to add cached link item without baseobj present ( name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ).  Ignoring and invalidating " << cat->getName() << " . " << llendl;
 							invalid_categories.insert(cit->second);
 							continue;
 						}
@@ -2233,6 +2251,12 @@ bool LLInventoryModel::loadSkeleton(
 			// clean up the gunzipped file.
 			LLFile::remove(inventory_filename);
 		}
+		if(is_cache_obsolete)
+		{
+			// If out of date, remove the gzipped file too.
+			llwarns << "Inv cache out of date, removing" << llendl;
+			LLFile::remove(gzip_filename);
+		}
 		categories.clear(); // will unref and delete entries
 	}
 
@@ -2398,12 +2422,12 @@ void LLInventoryModel::buildParentChildMap()
 					<< cat->getName() << llendl;
 			++lost;
 			// plop it into the lost & found.
-			LLAssetType::EType pref = cat->getPreferredType();
-			if(LLAssetType::AT_NONE == pref)
+			LLFolderType::EType pref = cat->getPreferredType();
+			if(LLFolderType::FT_NONE == pref)
 			{
-				cat->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+				cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			}
-			else if(LLAssetType::AT_CATEGORY == pref)
+			else if(LLFolderType::FT_CATEGORY == pref)
 			{
 				// it's the root
 				cat->setParent(LLUUID::null);
@@ -2462,7 +2486,7 @@ void LLInventoryModel::buildParentChildMap()
 			++lost;
 			// plop it into the lost & found.
 			//
-			item->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND));
+			item->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			// move it later using a special message to move items. If
 			// we update server here, the client might crash.
 			//item->updateServer();
@@ -2483,7 +2507,7 @@ void LLInventoryModel::buildParentChildMap()
 		llwarns << "Found " << lost << " lost items." << llendl;
 		LLMessageSystem* msg = gMessageSystem;
 		BOOL start_new_message = TRUE;
-		LLUUID lnf = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it)
 		{
 			if(start_new_message)
@@ -2631,7 +2655,8 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const
 // static
 bool LLInventoryModel::loadFromFile(const std::string& filename,
 									LLInventoryModel::cat_array_t& categories,
-									LLInventoryModel::item_array_t& items)
+									LLInventoryModel::item_array_t& items,
+									bool &is_cache_obsolete)
 {
 	if(filename.empty())
 	{
@@ -2648,11 +2673,32 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 	// *NOTE: This buffer size is hard coded into scanf() below.
 	char buffer[MAX_STRING];		/*Flawfinder: ignore*/
 	char keyword[MAX_STRING];		/*Flawfinder: ignore*/
+	char value[MAX_STRING];			/*Flawfinder: ignore*/
+	is_cache_obsolete = true;  		// Obsolete until proven current
 	while(!feof(file) && fgets(buffer, MAX_STRING, file)) 
 	{
-		sscanf(buffer, " %254s", keyword);	/* Flawfinder: ignore */
-		if(0 == strcmp("inv_category", keyword))
+		sscanf(buffer, " %126s %126s", keyword, value);	/* Flawfinder: ignore */
+		if(0 == strcmp("inv_cache_version", keyword))
 		{
+			S32 version;
+			int succ = sscanf(value,"%d",&version);
+			if ((1 == succ) && (version == sCurrentInvCacheVersion))
+			{
+				// Cache is up to date
+				is_cache_obsolete = false;
+				continue;
+			}
+			else
+			{
+				// Cache is out of date
+				break;
+			}
+		}
+		else if(0 == strcmp("inv_category", keyword))
+		{
+			if (is_cache_obsolete)
+				break;
+			
 			LLPointer<LLViewerInventoryCategory> inv_cat = new LLViewerInventoryCategory(LLUUID::null);
 			if(inv_cat->importFileLocal(file))
 			{
@@ -2666,6 +2712,9 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 		}
 		else if(0 == strcmp("inv_item", keyword))
 		{
+			if (is_cache_obsolete)
+				break;
+
 			LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
 			if( inv_item->importFileLocal(file) )
 			{
@@ -2697,6 +2746,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
 		}
 	}
 	fclose(file);
+	if (is_cache_obsolete)
+		return false;
 	return true;
 }
 
@@ -2718,6 +2769,7 @@ bool LLInventoryModel::saveToFile(const std::string& filename,
 		return false;
 	}
 
+	fprintf(file, "\tinv_cache_version\t%d\n",sCurrentInvCacheVersion);
 	S32 count = categories.count();
 	S32 i;
 	for(i = 0; i < count; ++i)
@@ -2936,7 +2988,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
 		lastfolder = tfolder;
 		tfolder->unpackMessage(msg, _PREHASH_FolderData, i);
 		// make sure it's not a protected folder
-		tfolder->setPreferredType(LLAssetType::AT_NONE);
+		tfolder->setPreferredType(LLFolderType::FT_NONE);
 		folders.push_back(tfolder);
 		// examine update for changes.
 		LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID());
@@ -3174,13 +3226,13 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
 	// The incoming inventory could span more than one BulkInventoryUpdate packet,
 	// so record the transaction ID for this purchase, then wear all clothing
 	// that comes in as part of that transaction ID.  JC
-	if (LLFloaterInventory::sWearNewClothing)
+	if (LLInventoryState::sWearNewClothing)
 	{
-		LLFloaterInventory::sWearNewClothingTransactionID = tid;
-		LLFloaterInventory::sWearNewClothing = FALSE;
+		LLInventoryState::sWearNewClothingTransactionID = tid;
+		LLInventoryState::sWearNewClothing = FALSE;
 	}
 
-	if (tid == LLFloaterInventory::sWearNewClothingTransactionID)
+	if (tid == LLInventoryState::sWearNewClothingTransactionID)
 	{
 		count = wearable_ids.size();
 		for (i = 0; i < count; ++i)
@@ -3323,31 +3375,31 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**)
 
 //----------------------------------------------------------------------------
 
-// Trash: LLAssetType::AT_TRASH, "ConfirmEmptyTrash"
-// Lost&Found: LLAssetType::AT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
+// Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash"
+// Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"
 
-bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type)
+bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
 	if (option == 0) // YES
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
 	return false;
 }
 
-void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetType::EType folder_type)
+void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderType::EType preferred_type)
 {
 	if (!notification.empty())
 	{
 		LLNotifications::instance().add(notification, LLSD(), LLSD(),
-										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, folder_type));
+										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type));
 	}
 	else
 	{
-		LLUUID folder_id = findCategoryUUIDForType(folder_type);
+		const LLUUID folder_id = findCategoryUUIDForType(preferred_type);
 		purgeDescendentsOf(folder_id);
 		notifyObservers();
 	}
@@ -3358,7 +3410,7 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetTy
 void LLInventoryModel::removeItem(const LLUUID& item_id)
 {
 	LLViewerInventoryItem* item = getItem(item_id);
-	const LLUUID new_parent = findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item && item->getParentUUID() != new_parent)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index d51460b374c67aea7144e8b287fa63c596189cc9..faf026887a91f2a90da901f12ab0aa0849ebd143 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -34,6 +34,7 @@
 #define LL_LLINVENTORYMODEL_H
 
 #include "llassettype.h"
+#include "llfoldertype.h"
 #include "lldarray.h"
 #include "llframetimer.h"
 #include "llhttpclient.h"
@@ -280,7 +281,7 @@ class LLInventoryModel
 
 	// SDK: Added flag to specify whether the folder should be created if not found.  This fixes the horrible
 	// multiple trash can bug.
-	LLUUID findCategoryUUIDForType(LLAssetType::EType preferred_type, bool create_folder = true);
+	const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true);
 
 	// Call this method when it's time to update everyone on a new
 	// state, by default, the inventory model will not update
@@ -329,7 +330,7 @@ class LLInventoryModel
 	// category. If you want to use the default name based on type,
 	// pass in a NULL to the 'name parameter.
 	LLUUID createNewCategory(const LLUUID& parent_id,
-							 LLAssetType::EType preferred_type,
+							 LLFolderType::EType preferred_type,
 							 const std::string& name);
 
 	// methods to load up inventory skeleton & meat. These are used
@@ -385,9 +386,9 @@ class LLInventoryModel
 	bool isCategoryComplete(const LLUUID& cat_id) const;
 	
 	// callbacks
-	// Trigger a notification and empty the folder type (AT_TRASH or AT_LOST_AND_FOUND) if confirmed
-	void emptyFolderType(const std::string notification, LLAssetType::EType folder_type);
-	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type);
+	// Trigger a notification and empty the folder type (FT_TRASH or FT_LOST_AND_FOUND) if confirmed
+	void emptyFolderType(const std::string notification, LLFolderType::EType folder_type);
+	bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type);
 
 	// Utility Functions
 	void removeItem(const LLUUID& item_id);
@@ -431,7 +432,7 @@ class LLInventoryModel
 	// 
 	// Internal method which looks for a category with the specified
 	// preferred type. Returns LLUUID::null if not found
- 	const LLUUID &findCatUUID(LLAssetType::EType preferred_type) const;
+ 	const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const;
 
 	// Empty the entire contents
 	void empty();
@@ -445,7 +446,8 @@ class LLInventoryModel
 	// file import/export.
 	static bool loadFromFile(const std::string& filename,
 							 cat_array_t& categories,
-							 item_array_t& items); 
+							 item_array_t& items,
+							 bool& is_cache_obsolete); 
 	static bool saveToFile(const std::string& filename,
 						   const cat_array_t& categories,
 						   const item_array_t& items); 
@@ -517,6 +519,9 @@ class LLInventoryModel
 	static F32 sMaxTimeBetweenFetches;
 	static S16 sBulkFetchCount;
 
+	// Expected inventory cache version
+	const static S32 sCurrentInvCacheVersion;
+	
 	// This flag is used to handle an invalid inventory state.
 	bool mIsAgentInvUsable;
 
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9a71e53441e9f9f8ec32ce8c3633f258ddf03c7f
--- /dev/null
+++ b/indra/newview/llinventorypanel.cpp
@@ -0,0 +1,907 @@
+/* 
+ * @file llinventorypanel.cpp
+ * @brief Implementation of the inventory panel and associated stuff.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include <utility> // for std::pair<>
+
+#include "llinventorypanel.h"
+
+// Seraph TODO: Remove unnecessary headers
+
+// library includes
+#include "llagent.h"
+#include "llagentwearables.h"
+#include "llcallingcard.h"
+#include "llfloaterreg.h"
+#include "llsdserialize.h"
+#include "llfiltereditor.h"
+#include "llspinctrl.h"
+#include "llui.h"
+#include "message.h"
+
+// newview includes
+#include "llappearancemgr.h"
+#include "llappviewer.h"
+#include "llfirstuse.h"
+#include "llfloaterchat.h"
+#include "llfloatercustomize.h"
+#include "llfocusmgr.h"
+#include "llfolderview.h"
+#include "llgesturemgr.h"
+#include "lliconctrl.h"
+#include "llimview.h"
+#include "llinventorybridge.h"
+#include "llinventoryclipboard.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llmenugl.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llresmgr.h"
+#include "llscrollbar.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "lltabcontainer.h"
+#include "lltooldraganddrop.h"
+#include "lluictrlfactory.h"
+#include "llviewerfoldertype.h"
+#include "llviewerinventory.h"
+#include "llviewermessage.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "llwearablelist.h"
+#include "llimfloater.h"
+
+static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
+
+const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
+const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
+const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
+static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
+
+LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	
+	LLPanel(p),
+	mInventoryObserver(NULL),
+	mFolders(NULL),
+	mScroller(NULL),
+	mSortOrderSetting(p.sort_order_setting),
+	mInventory(p.inventory),
+	mAllowMultiSelect(p.allow_multi_select),
+	mHasInventoryConnection(false),
+	mStartFolderString(p.start_folder),	
+	mBuildDefaultHierarchy(true),
+	mInvFVBridgeBuilder(NULL)
+{
+	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
+
+	// contex menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
+	
+	setBackgroundColor(LLUIColorTable::instance().getColor("InventoryBackgroundColor"));
+	setBackgroundVisible(TRUE);
+	setBackgroundOpaque(TRUE);
+}
+
+BOOL LLInventoryPanel::postBuild()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_POST_BUILD);
+
+	mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+	
+	// create root folder
+	{
+		LLRect folder_rect(0,
+						   0,
+						   getRect().getWidth(),
+						   0);
+		LLFolderView::Params p;
+		p.name = getName();
+		p.rect = folder_rect;
+		p.parent_panel = this;
+		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+		mFolders->setAllowMultiSelect(mAllowMultiSelect);
+	}
+
+	mCommitCallbackRegistrar.popScope();
+	
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+	
+	// scroller
+	{
+		LLRect scroller_view_rect = getRect();
+		scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
+		LLScrollContainer::Params p;
+		p.name("Inventory Scroller");
+		p.rect(scroller_view_rect);
+		p.follows.flags(FOLLOWS_ALL);
+		p.reserve_scroll_corner(true);
+		p.tab_stop(true);
+		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+	}
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer(mScroller);
+
+	// set up the callbacks from the inventory we're viewing, and then
+	// build everything.
+	mInventoryObserver = new LLInventoryPanelObserver(this);
+	mInventory->addObserver(mInventoryObserver);
+
+	// determine the root folder, if any, so inventory contents show just the children
+	// of that folder (i.e. not including the folder itself).
+	const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
+
+	if ("INVENTORY" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getRootFolderID();
+	}
+	else if ("LIBRARY" == mStartFolderString)
+	{
+		mStartFolderID = gInventory.getLibraryRootFolderID();
+	}
+	else
+	{
+		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
+	}
+
+	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
+	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+	}
+
+	// bit of a hack to make sure the inventory is open.
+	mFolders->openFolder(preferred_type != LLFolderType::FT_NONE ? LLViewerFolderType::lookupNewCategoryName(preferred_type) : "My Inventory");
+
+	if (mSortOrderSetting != INHERIT_SORT_ORDER)
+	{
+		setSortOrder(gSavedSettings.getU32(mSortOrderSetting));
+	}
+	else
+	{
+		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
+	}
+	mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
+
+	return TRUE;
+}
+
+LLInventoryPanel::~LLInventoryPanel()
+{
+	// should this be a global setting?
+	if (mFolders)
+	{
+		U32 sort_order = mFolders->getSortOrder();
+		if (mSortOrderSetting != INHERIT_SORT_ORDER)
+		{
+			gSavedSettings.setU32(mSortOrderSetting, sort_order);
+		}
+	}
+
+	// LLView destructor will take care of the sub-views.
+	mInventory->removeObserver(mInventoryObserver);
+	delete mInventoryObserver;
+	mScroller = NULL;
+}
+
+LLMemType mt(LLMemType::MTYPE_INVENTORY_FROM_XML); // ! BUG ! Should this be removed?
+void LLInventoryPanel::draw()
+{
+	// select the desired item (in case it wasn't loaded when the selection was requested)
+	mFolders->updateSelection();
+	LLPanel::draw();
+}
+
+LLInventoryFilter* LLInventoryPanel::getFilter()
+{
+	if (mFolders) return mFolders->getFilter();
+	return NULL;
+}
+
+void LLInventoryPanel::setFilterTypes(U64 filter_types, BOOL filter_for_categories)
+{
+	mFolders->getFilter()->setFilterTypes(filter_types, filter_for_categories);
+}	
+
+void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
+{
+	mFolders->getFilter()->setFilterPermissions(filter_perm_mask);
+}
+
+void LLInventoryPanel::setFilterSubString(const std::string& string)
+{
+	mFolders->getFilter()->setFilterSubString(string);
+}
+
+void LLInventoryPanel::setSortOrder(U32 order)
+{
+	mFolders->getFilter()->setSortOrder(order);
+	if (mFolders->getFilter()->isModified())
+	{
+		mFolders->setSortOrder(order);
+		// try to keep selection onscreen, even if it wasn't to start with
+		mFolders->scrollToShowSelection();
+	}
+}
+
+void LLInventoryPanel::setSinceLogoff(BOOL sl)
+{
+	mFolders->getFilter()->setDateRangeLastLogoff(sl);
+}
+
+void LLInventoryPanel::setHoursAgo(U32 hours)
+{
+	mFolders->getFilter()->setHoursAgo(hours);
+}
+
+void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
+{
+	mFolders->getFilter()->setShowFolderState(show);
+}
+
+LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
+{
+	return mFolders->getFilter()->getShowFolderState();
+}
+
+static LLFastTimer::DeclareTimer FTM_REFRESH("Inventory Refresh");
+
+void LLInventoryPanel::modelChanged(U32 mask)
+{
+	LLFastTimer t2(FTM_REFRESH);
+
+	bool handled = false;
+
+	// inventory just initialized, do complete build
+	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
+	{
+		rebuildViewsFor(mStartFolderID);
+		mHasInventoryConnection = true;
+		return;
+	}
+
+	if(mask & LLInventoryObserver::LABEL)
+	{
+		handled = true;
+		// label change - empty out the display name for each object
+		// in this change set.
+		const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+		std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+		std::set<LLUUID>::const_iterator id_end = changed_items.end();
+		LLFolderViewItem* view = NULL;
+		LLInvFVBridge* bridge = NULL;
+		for (;id_it != id_end; ++id_it)
+		{
+			view = mFolders->getItemByID(*id_it);
+			if(view)
+			{
+				// request refresh on this item (also flags for filtering)
+				bridge = (LLInvFVBridge*)view->getListener();
+				if(bridge)
+				{	// Clear the display name first, so it gets properly re-built during refresh()
+					bridge->clearDisplayName();
+				}
+				view->refresh();
+			}
+		}
+	}
+	if((mask & (LLInventoryObserver::STRUCTURE
+				| LLInventoryObserver::ADD
+				| LLInventoryObserver::REMOVE)) != 0)
+	{
+		handled = true;
+		// Record which folders are open by uuid.
+		LLInventoryModel* model = getModel();
+		if (model)
+		{
+			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+			std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+			std::set<LLUUID>::const_iterator id_end = changed_items.end();
+			for (;id_it != id_end; ++id_it)
+			{
+				// sync view with model
+				LLInventoryObject* model_item = model->getObject(*id_it);
+				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
+
+				if (model_item)
+				{
+					if (!view_item)
+					{
+						// this object was just created, need to build a view for it
+						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
+						{
+							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
+						}
+						buildNewViews(*id_it);
+						
+						// select any newly created object
+						// that has the auto rename at top of folder
+						// root set
+						if(mFolders->getRoot()->needsAutoRename())
+						{
+							setSelection(*id_it, FALSE);
+						}
+					}
+					else
+					{
+						// this object was probably moved, check its parent
+						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
+						{
+							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << " for model (Name :" << model_item->getName() << " )" << llendl;
+						}
+
+						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+
+						// added check against NULL for cases when Inventory panel contains startFolder.
+						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
+						// this check is a fix for bug EXT-1859.
+						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+							view_item->addToFolder(new_parent, mFolders);
+						}
+/*
+						 on the other side in case Inventory Panel has content of the any folder
+						 it is possible that item moved to some folder which is absent in current
+						 Panel. For ex. removing item (via moving to trash).
+						 In this case we need to check if new parent is other then inventory start folder
+						 and simply remove its View from the hierarchy.
+						 See details in EXT-2098.
+*/
+						// So, let check if item was moved into folder out of this Inventory Panel.
+						else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID)
+						{
+							view_item->getParentFolder()->extractItem(view_item);
+						}
+					}
+				}
+				else
+				{
+					if (view_item)
+					{
+						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
+						{
+							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
+						}
+						// item in view but not model, need to delete view
+						view_item->destroyView();
+					}
+					else
+					{
+						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
+					}
+				}
+			}
+		}
+	}
+
+	if (!handled)
+	{
+		// it's a small change that only requires a refresh.
+		// *TODO: figure out a more efficient way to do the refresh
+		// since it is expensive on large inventories
+		mFolders->refresh();
+	}
+}
+
+
+void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+{
+	LLFolderViewItem* old_view = NULL;
+
+	// get old LLFolderViewItem
+	old_view = mFolders->getItemByID(id);
+	if (old_view && id.notNull())
+	{
+		old_view->destroyView();
+	}
+
+	buildNewViews(id);
+}
+
+void LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
+	LLFolderViewItem* itemp = NULL;
+	LLInventoryObject* objectp = NULL;
+
+	// Don't add the start folder (the inventory panel will show contents
+	// beginning with the children of the starting folder, excluding the starting folder itself).
+	if (id != mStartFolderID)
+	{
+		objectp = gInventory.getObject(id);
+		if (objectp)
+		{		
+			const LLUUID &parent_id = objectp->getParentUUID();
+			// If this item's parent is the starting folder, then just add it to the top level (recall that 
+			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
+			// this case otherwise).
+			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
+				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
+
+			// This item exists outside the inventory's hierarchy, so don't add it.
+			if (!parent_folder)
+			{
+				return;
+			}
+
+			if (objectp->getType() <= LLAssetType::AT_NONE ||
+				objectp->getType() >= LLAssetType::AT_COUNT)
+			{
+				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
+					((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
+				return;
+			}
+			
+			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
+					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
+			{
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+																				objectp->getType(),
+																				LLInventoryType::IT_CATEGORY,
+																				this,
+																				objectp->getUUID());
+
+				if (new_listener)
+				{
+					LLFolderViewFolder::Params p;
+					p.name = new_listener->getDisplayName();
+					p.icon = new_listener->getIcon();
+					p.root = mFolders;
+					p.listener = new_listener;
+					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				
+					folderp->setItemSortOrder(mFolders->getSortOrder());
+					itemp = folderp;
+				}
+			}
+			else 
+			{
+				// Build new view for item
+				LLInventoryItem* item = (LLInventoryItem*)objectp;
+				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+																				item->getActualType(),
+																				item->getInventoryType(),
+																				this,
+																				item->getUUID(),
+																				item->getFlags());
+
+				if (new_listener)
+				{
+					LLFolderViewItem::Params params;
+					params.name(new_listener->getDisplayName());
+					params.icon(new_listener->getIcon());
+					params.creation_date(new_listener->getCreationDate());
+					params.root(mFolders);
+					params.listener(new_listener);
+					params.rect(LLRect (0, 0, 0, 0));
+					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
+				}
+			}
+
+			if (itemp)
+			{
+				itemp->addToFolder(parent_folder, mFolders);
+			}
+		}
+	}
+
+	// If this is a folder, add the children of the folder and recursively add any 
+	// child folders.
+	if ((id == mStartFolderID) ||
+		(objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+	{
+		LLViewerInventoryCategory::cat_array_t* categories;
+		LLViewerInventoryItem::item_array_t* items;
+
+		mInventory->lockDirectDescendentArrays(id, categories, items);
+		if(categories)
+		{
+			S32 count = categories->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryCategory* cat = categories->get(i);
+				buildNewViews(cat->getUUID());
+			}
+		}
+		if(items)
+		{
+			S32 count = items->count();
+			for(S32 i = 0; i < count; ++i)
+			{
+				LLInventoryItem* item = items->get(i);
+				buildNewViews(item->getUUID());
+			}
+		}
+		mInventory->unlockDirectDescendentArrays(id);
+	}
+}
+
+struct LLConfirmPurgeData
+{
+	LLUUID mID;
+	LLInventoryModel* mModel;
+};
+
+class LLIsNotWorn : public LLInventoryCollectFunctor
+{
+public:
+	LLIsNotWorn() {}
+	virtual ~LLIsNotWorn() {}
+	virtual bool operator()(LLInventoryCategory* cat,
+							LLInventoryItem* item)
+	{
+		return !gAgentWearables.isWearingItem(item->getUUID());
+	}
+};
+
+class LLOpenFolderByID : public LLFolderViewFunctor
+{
+public:
+	LLOpenFolderByID(const LLUUID& id) : mID(id) {}
+	virtual ~LLOpenFolderByID() {}
+	virtual void doFolder(LLFolderViewFolder* folder)
+		{
+			if (folder->getListener() && folder->getListener()->getUUID() == mID) folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+		}
+	virtual void doItem(LLFolderViewItem* item) {}
+protected:
+	const LLUUID& mID;
+};
+
+
+void LLInventoryPanel::openSelected()
+{
+	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem();
+	if(!folder_item) return;
+	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+	if(!bridge) return;
+	bridge->openItem();
+}
+
+BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = LLView::handleHover(x, y, mask);
+	if(handled)
+	{
+		ECursorType cursor = getWindow()->getCursor();
+		if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW)
+		{
+			// replace arrow cursor with arrow and hourglass cursor
+			getWindow()->setCursor(UI_CURSOR_WORKING);
+		}
+	}
+	else
+	{
+		getWindow()->setCursor(UI_CURSOR_ARROW);
+	}
+	return TRUE;
+}
+
+BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg)
+{
+
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	if (handled)
+	{
+		mFolders->setDragAndDropThisFrame();
+	}
+
+	return handled;
+}
+
+void LLInventoryPanel::onFocusLost()
+{
+	// inventory no longer handles cut/copy/paste/delete
+	if (LLEditMenuHandler::gEditMenuHandler == mFolders)
+	{
+		LLEditMenuHandler::gEditMenuHandler = NULL;
+	}
+
+	LLPanel::onFocusLost();
+}
+
+void LLInventoryPanel::onFocusReceived()
+{
+	// inventory now handles cut/copy/paste/delete
+	LLEditMenuHandler::gEditMenuHandler = mFolders;
+
+	LLPanel::onFocusReceived();
+}
+
+
+void LLInventoryPanel::openAllFolders()
+{
+	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
+	mFolders->arrangeAll();
+}
+
+void LLInventoryPanel::openDefaultFolderForType(LLFolderType::EType type)
+{
+	LLUUID category_id = mInventory->findCategoryUUIDForType(type);
+	LLOpenFolderByID opener(category_id);
+	mFolders->applyFunctorRecursively(opener);
+}
+
+void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus)
+{
+	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
+	const LLInventoryObject *obj = gInventory.getObject(obj_id);
+	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
+	{
+		return;
+	}
+	mFolders->setSelectionByID(obj_id, take_keyboard_focus);
+}
+
+void LLInventoryPanel::clearSelection()
+{
+	mFolders->clearSelection();
+}
+
+void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+	LLFolderView* fv = getRootFolder();
+	if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
+	{
+		fv->setNeedsAutoRename(FALSE);
+		if (items.size()) // new asset is visible and selected
+		{
+			fv->startRenamingSelectedItem();
+		}
+	}
+	// Seraph - Put determineFolderType in here for ensemble typing?
+}
+
+//----------------------------------------------------------------------------
+
+void LLInventoryPanel::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLInventoryPanel::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata);
+}
+
+bool LLInventoryPanel::beginIMSession()
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string name;
+	static int session_num = 1;
+
+	LLDynamicArray<LLUUID> members;
+	EInstantMessage type = IM_SESSION_CONFERENCE_START;
+
+	std::set<LLUUID>::const_iterator iter;
+	for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
+	{
+
+		LLUUID item = *iter;
+		LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+			
+		if(folder_item) 
+		{
+			LLFolderViewEventListener* fve_listener = folder_item->getListener();
+			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
+			{
+
+				LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+				if(!bridge) return true;
+				LLViewerInventoryCategory* cat = bridge->getCategory();
+				if(!cat) return true;
+				name = cat->getName();
+				LLUniqueBuddyCollector is_buddy;
+				LLInventoryModel::cat_array_t cat_array;
+				LLInventoryModel::item_array_t item_array;
+				gInventory.collectDescendentsIf(bridge->getUUID(),
+												cat_array,
+												item_array,
+												LLInventoryModel::EXCLUDE_TRASH,
+												is_buddy);
+				S32 count = item_array.count();
+				if(count > 0)
+				{
+					LLFloaterReg::showInstance("communicate");
+					// create the session
+					LLAvatarTracker& at = LLAvatarTracker::instance();
+					LLUUID id;
+					for(S32 i = 0; i < count; ++i)
+					{
+						id = item_array.get(i)->getCreatorUUID();
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				}
+			}
+			else
+			{
+				LLFolderViewItem* folder_item = mFolders->getItemByID(item);
+				if(!folder_item) return true;
+				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+
+				if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+				{
+					LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
+
+					if (inv_item)
+					{
+						LLAvatarTracker& at = LLAvatarTracker::instance();
+						LLUUID id = inv_item->getCreatorUUID();
+
+						if(at.isBuddyOnline(id))
+						{
+							members.put(id);
+						}
+					}
+				} //if IT_CALLINGCARD
+			} //if !IT_CATEGORY
+		}
+	} //for selected_items	
+
+	// the session_id is randomly generated UUID which will be replaced later
+	// with a server side generated number
+
+	if (name.empty())
+	{
+		name = llformat("Session %d", session_num++);
+	}
+
+	LLUUID session_id = gIMMgr->addSession(name, type, members[0], members);
+	if (session_id != LLUUID::null)
+	{
+		LLIMFloater::show(session_id);
+	}
+		
+	return true;
+}
+
+bool LLInventoryPanel::attachObject(const LLSD& userdata)
+{
+	std::set<LLUUID> selected_items;
+	mFolders->getSelectionList(selected_items);
+
+	std::string joint_name = userdata.asString();
+	LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject());
+	LLViewerJointAttachment* attachmentp = NULL;
+	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
+		 iter != avatarp->mAttachmentPoints.end(); )
+	{
+		LLVOAvatar::attachment_map_t::iterator curiter = iter++;
+		LLViewerJointAttachment* attachment = curiter->second;
+		if (attachment->getName() == joint_name)
+		{
+			attachmentp = attachment;
+			break;
+		}
+	}
+	if (attachmentp == NULL)
+	{
+		return true;
+	}
+
+	for (std::set<LLUUID>::const_iterator set_iter = selected_items.begin(); 
+		 set_iter != selected_items.end(); 
+		 ++set_iter)
+	{
+		const LLUUID &id = *set_iter;
+		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
+		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
+		{
+			rez_attachment(item, attachmentp);
+		}
+		else if(item && item->isComplete())
+		{
+			// must be in library. copy it to our inventory and put it on.
+			LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(attachmentp);
+			copy_inventory_item(gAgent.getID(),
+								item->getPermissions().getOwner(),
+								item->getUUID(),
+								LLUUID::null,
+								std::string(),
+								cb);
+		}
+	}
+	gFocusMgr.setKeyboardFocus(NULL);
+
+	return true;
+}
+
+
+//----------------------------------------------------------------------------
+
+// static DEBUG ONLY:
+void LLInventoryPanel::dumpSelectionInformation(void* user_data)
+{
+	LLInventoryPanel* iv = (LLInventoryPanel*)user_data;
+	iv->mFolders->dumpSelectionInformation();
+}
+
+BOOL LLInventoryPanel::getSinceLogoff()
+{
+	return mFolders->getFilter()->isSinceLogoff();
+}
+
+void example_param_block_usage()
+{
+	LLInventoryPanel::Params param_block;
+	param_block.name(std::string("inventory"));
+
+	param_block.sort_order_setting(LLInventoryPanel::RECENTITEMS_SORT_ORDER);
+	param_block.allow_multi_select(true);
+	param_block.filter(LLInventoryPanel::Filter()
+			.sort_order(1)
+			.types(0xffff0000));
+	param_block.inventory(&gInventory);
+	param_block.has_border(true);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+
+	param_block = LLInventoryPanel::Params();
+	param_block.name(std::string("inventory"));
+
+	//LLSD param_block_sd;
+	//param_block_sd["sort_order_setting"] = LLInventoryPanel::RECENTITEMS_SORT_ORDER;
+	//param_block_sd["allow_multi_select"] = true;
+	//param_block_sd["filter"]["sort_order"] = 1;
+	//param_block_sd["filter"]["types"] = (S32)0xffff0000;
+	//param_block_sd["has_border"] = true;
+
+	//LLInitParam::LLSDParser(param_block_sd).parse(param_block);
+
+	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
+}
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
new file mode 100644
index 0000000000000000000000000000000000000000..9f74fad5c1c0acca15b4be0bff86b128602c7a58
--- /dev/null
+++ b/indra/newview/llinventorypanel.h
@@ -0,0 +1,206 @@
+/** 
+ * @file llinventorypanel.h
+ * @brief LLInventoryPanel
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYPANEL_H
+#define LL_LLINVENTORYPANEL_H
+
+#include "llassetstorage.h"
+#include "lldarray.h"
+#include "llfloater.h"
+#include "llinventory.h"
+#include "llinventoryfilter.h"
+#include "llfolderview.h"
+#include "llinventorymodel.h"
+#include "lluictrlfactory.h"
+#include <set>
+
+class LLFolderViewItem;
+class LLInventoryFilter;
+class LLInventoryModel;
+class LLInvFVBridge;
+class LLInventoryFVBridgeBuilder;
+class LLMenuBarGL;
+class LLCheckBoxCtrl;
+class LLSpinCtrl;
+class LLScrollContainer;
+class LLTextBox;
+class LLIconCtrl;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+
+class LLInventoryPanel : public LLPanel
+{
+public:
+	static const std::string DEFAULT_SORT_ORDER;
+	static const std::string RECENTITEMS_SORT_ORDER;
+	static const std::string INHERIT_SORT_ORDER;
+
+	struct Filter : public LLInitParam::Block<Filter>
+	{
+		Optional<U32>			sort_order;
+		Optional<U32>			types;
+		Optional<std::string>	search_string;
+
+		Filter()
+		:	sort_order("sort_order"),
+			types("types", 0xffffffff),
+			search_string("search_string")
+		{}
+	};
+
+	struct Params 
+	:	public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Optional<std::string>				sort_order_setting;
+		Optional<LLInventoryModel*>			inventory;
+		Optional<bool>						allow_multi_select;
+		Optional<Filter>					filter;
+		Optional<std::string>               start_folder;
+
+		Params()
+		:	sort_order_setting("sort_order_setting"),
+			inventory("", &gInventory),
+			allow_multi_select("allow_multi_select", true),
+			filter("filter"),
+			start_folder("start_folder")
+		{}
+	};
+
+protected:
+	LLInventoryPanel(const Params&);
+	friend class LLUICtrlFactory;
+
+public:
+	virtual ~LLInventoryPanel();
+
+	LLInventoryModel* getModel() { return mInventory; }
+
+	BOOL postBuild();
+
+	// LLView methods
+	void draw();
+	BOOL handleHover(S32 x, S32 y, MASK mask);
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data,
+								   EAcceptance* accept,
+								   std::string& tooltip_msg);
+	// LLUICtrl methods
+	 /*virtual*/ void onFocusLost();
+	 /*virtual*/ void onFocusReceived();
+
+	// Call this method to set the selection.
+	void openAllFolders();
+	void openDefaultFolderForType(LLFolderType::EType);
+	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
+	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); }
+	void clearSelection();
+	LLInventoryFilter* getFilter();
+	void setFilterTypes(U64 filter, BOOL filter_for_categories = FALSE); // if filter_for_categories is true, operate on folder preferred asset type
+	U32 getFilterTypes() const { return mFolders->getFilterTypes(); }
+	void setFilterPermMask(PermissionMask filter_perm_mask);
+	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); }
+	void setFilterSubString(const std::string& string);
+	const std::string getFilterSubString() { return mFolders->getFilterSubString(); }
+	void setSortOrder(U32 order);
+	U32 getSortOrder() { return mFolders->getSortOrder(); }
+	void setSinceLogoff(BOOL sl);
+	void setHoursAgo(U32 hours);
+	BOOL getSinceLogoff();
+	
+	void setShowFolderState(LLInventoryFilter::EFolderShow show);
+	LLInventoryFilter::EFolderShow getShowFolderState();
+	void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); }
+	// This method is called when something has changed about the inventory.
+	void modelChanged(U32 mask);
+	LLFolderView* getRootFolder() { return mFolders; }
+	LLScrollContainer* getScrollableContainer() { return mScroller; }
+	
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	
+	// Callbacks
+	void doToSelected(const LLSD& userdata);
+	void doCreate(const LLSD& userdata);
+	bool beginIMSession();
+	bool attachObject(const LLSD& userdata);
+	
+	// DEBUG ONLY:
+	static void dumpSelectionInformation(void* user_data);
+
+	void openSelected();
+	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); }
+	
+protected:
+	// Given the id and the parent, build all of the folder views.
+	void rebuildViewsFor(const LLUUID& id);
+	virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719
+
+protected:
+	LLInventoryModel*			mInventory;
+	LLInventoryObserver*		mInventoryObserver;
+	BOOL 						mAllowMultiSelect;
+	std::string					mSortOrderSetting;
+
+//private: // Can not make these private - needed by llinventorysubtreepanel
+	LLFolderView*				mFolders;
+	std::string                 mStartFolderString;
+
+	/**
+	 * Contains UUID of Inventory item from which hierarchy should be built.
+	 * Can be set with the "start_folder" xml property.
+	 * Default is LLUUID::null that means total Inventory hierarchy.
+	 */
+	LLUUID						mStartFolderID;
+	LLScrollContainer*			mScroller;
+	bool						mHasInventoryConnection;
+
+	/**
+	 * Flag specified if default inventory hierarchy should be created in postBuild()
+	 */
+	bool						mBuildDefaultHierarchy;
+
+	LLUUID						mRootInventoryItemUUID;
+
+	/**
+	 * Pointer to LLInventoryFVBridgeBuilder.
+	 *
+	 * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with 
+	 * another implementation.
+	 * Take into account it will not be deleted by LLInventoryPanel itself.
+	 */
+	const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder;
+
+};
+
+#endif // LL_LLINVENTORYPANEL_H
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index 4fd3b7bddc8d9287a82f7a167e755cf83c949dc3..bd6702a0b2f6f9dabafca900cf460caf658fdb9d 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -517,43 +517,52 @@ void LLJoystickCameraRotate::draw()
 	LLGLSUIDefault gls_ui;
 
 	getImageUnselected()->draw( 0, 0 );
+	LLPointer<LLUIImage> image = getImageSelected();
 
 	if( mInTop )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 0 );
+		drawRotatedImage( getImageSelected(), 0 );
 	}
 
 	if( mInRight )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 1 );
+		drawRotatedImage( getImageSelected(), 1 );
 	}
 
 	if( mInBottom )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 2 );
+		drawRotatedImage( getImageSelected(), 2 );
 	}
 
 	if( mInLeft )
 	{
-		drawRotatedImage( getImageSelected()->getImage(), 3 );
+		drawRotatedImage( getImageSelected(), 3 );
 	}
 }
 
 // Draws image rotated by multiples of 90 degrees
-void LLJoystickCameraRotate::drawRotatedImage( LLTexture* image, S32 rotations )
+void LLJoystickCameraRotate::drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations )
 {
 	S32 width = image->getWidth();
 	S32 height = image->getHeight();
-
+	LLTexture* texture = image->getImage();
+
+	/*
+	 * Scale  texture coordinate system 
+	 * to handle the different between image size and size of texture.
+	 * If we will use default matrix, 
+	 * it may break texture mapping after rotation.
+	 * see EXT-2023 Camera floater: arrows became shifted when pressed.
+	 */ 
 	F32 uv[][2] = 
 	{
-		{ 1.f, 1.f },
-		{ 0.f, 1.f },
+		{ (F32)width/texture->getWidth(), (F32)height/texture->getHeight() },
+		{ 0.f, (F32)height/texture->getHeight() },
 		{ 0.f, 0.f },
-		{ 1.f, 0.f }
+		{ (F32)width/texture->getWidth(), 0.f }
 	};
 
-	gGL.getTexUnit(0)->bind(image);
+	gGL.getTexUnit(0)->bind(texture);
 
 	gGL.color4fv(UI_VERTEX_COLOR.mV);
 	
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
index 8caef30fa4b10609a56ce2a3622c14eafd969f6b..4c657913b8c3a6fadc782182b3f43fcaec7f3643 100644
--- a/indra/newview/lljoystickbutton.h
+++ b/indra/newview/lljoystickbutton.h
@@ -150,7 +150,7 @@ class LLJoystickCameraRotate
 protected:
 	F32				getOrbitRate();
 	virtual void	updateSlop();
-	void			drawRotatedImage( LLTexture* image, S32 rotations );
+	void			drawRotatedImage( LLPointer<LLUIImage> image, S32 rotations );
 
 protected:
 	BOOL			mInLeft;
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index 0b07dd4f21212785ed9eac924705c957aa27b592..e0dc1b6f0fce150a0771e390e9431f2f3a6d5c9b 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -49,6 +49,7 @@
 #include "llstring.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
+#include "llworldmapmessage.h"
 #include "llviewerwindow.h"
 #include "llwindow.h"
 #include "llworldmap.h"
@@ -135,13 +136,13 @@ use_substring(if_use_substring)
 
 // Returns true if the given inventory item is a landmark pointing to the current parcel.
 // Used to find out if there is at least one landmark from current parcel.
-class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor
+class LLFirstAgentParcelLandmark : public LLInventoryCollectFunctor
 {
 private:	
 	bool mFounded;// to avoid unnecessary  check
 	
 public:
-	LLFistAgentParcelLandmark(): mFounded(false){}
+	LLFirstAgentParcelLandmark(): mFounded(false){}
 	
 	/*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
 	{
@@ -165,8 +166,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 							LLInventoryCollectFunctor& add)
 {
 	// Look in "My Favorites"
-	LLUUID favorites_folder_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	gInventory.collectDescendentsIf(favorites_folder_id,
 		cats,
 		items,
@@ -174,8 +174,7 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
 		add);
 
 	// Look in "Landmarks"
-	LLUUID landmarks_folder_id = 
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 	gInventory.collectDescendentsIf(landmarks_folder_id,
 		cats,
 		items,
@@ -202,7 +201,7 @@ bool LLLandmarkActions::landmarkAlreadyExists()
 //static
 bool LLLandmarkActions::hasParcelLandmark()
 {
-	LLFistAgentParcelLandmark get_first_agent_landmark;
+	LLFirstAgentParcelLandmark get_first_agent_landmark;
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 	fetch_landmarks(cats, items, get_first_agent_landmark);
@@ -287,7 +286,7 @@ void LLLandmarkActions::createLandmarkHere()
 
 	LLAgentUI::buildLocationString(landmark_name, LLAgentUI::LOCATION_FORMAT_LANDMARK);
 	LLAgentUI::buildLocationString(landmark_desc, LLAgentUI::LOCATION_FORMAT_FULL);
-	LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+	const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 
 	createLandmarkHere(landmark_name, landmark_desc, folder_id);
 }
@@ -307,13 +306,13 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur
 	{
 		U64 new_region_handle = to_region_handle(global_pos);
 
-		LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL,
+		LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL,
 														cb,
 														global_pos,
 														escaped,
 														_2);
 
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
 	}
 }
 
@@ -324,18 +323,19 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl
 	if (sim_infop)
 	{
 		LLVector3 pos = sim_infop->getLocalPos(global_pos);
-		cb(sim_infop->mName, llround(pos.mV[VX]), llround(pos.mV[VY]));
+		std::string name = sim_infop->getName() ;
+		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]));
 	}
 	else
 	{
 		U64 new_region_handle = to_region_handle(global_pos);
 
-		LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords,
+		LLWorldMapMessage::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords,
 														cb,
 														global_pos,
 														_1);
 
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
 	}
 }
 
@@ -367,7 +367,8 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal
 	if (sim_infop)
 	{
 		LLVector3 local_pos = sim_infop->getLocalPos(global_pos);
-		cb(sim_infop->mName, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
+		std::string name = sim_infop->getName() ;
+		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
 	}
 }
 
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index 312426cab01c4d0632348cbe5e935dd4370b3df3..1c524c820c962b27abda5df1525babc96e64ffa4 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -55,7 +55,7 @@ class LLLandmarkActions
 	static bool landmarkAlreadyExists();
 	
 	/**
-	 * @brief Checks whether landmark exists for current parcel.
+	 * @brief Checks whether landmark exists for current agent parcel.
 	 */
 	static bool hasParcelLandmark();
 
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 6f0b8a3c1e6a0d25cf3128845b647159a6d28367..2a1f42c3c4bf2828ebe43a0514c68ba2b7478cfe 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -56,7 +56,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url)
 	LLURI uri(url);
 	parse(uri.queryMap());
 
-	if (mWebLoginKey.isNull() ||
+	if (/*mWebLoginKey.isNull() ||*/
 		mFirstName.empty() ||
 		mLastName.empty())
 	{
@@ -71,7 +71,7 @@ bool LLLoginHandler::parseDirectLogin(std::string url)
 
 void LLLoginHandler::parse(const LLSD& queryMap)
 {
-	mWebLoginKey = queryMap["web_login_key"].asUUID();
+	//mWebLoginKey = queryMap["web_login_key"].asUUID();
 	mFirstName = queryMap["first_name"].asString();
 	mLastName = queryMap["last_name"].asString();
 	
@@ -165,7 +165,15 @@ void LLLoginHandler::parse(const LLSD& queryMap)
 bool LLLoginHandler::handle(const LLSD& tokens,
 							const LLSD& query_map,
 							LLMediaCtrl* web)
-{	
+{
+	if (tokens.size() == 1
+		&& tokens[0].asString() == "show")
+	{
+		// We're using reg-in-client, so show the XUI login widgets
+		LLPanelLogin::showLoginWidgets();
+		return true;
+	}
+
 	parse(query_map);
 	
 	//if we haven't initialized stuff yet, this is 
@@ -200,14 +208,15 @@ bool LLLoginHandler::handle(const LLSD& tokens,
 			LLPanelLogin::setFields(mFirstName, mLastName, password);
 		}
 
-		if (mWebLoginKey.isNull())
-		{
-			LLPanelLogin::loadLoginPage();
-		}
-		else
-		{
-			LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
-		}
+		//if (mWebLoginKey.isNull())
+		//{
+		//	LLPanelLogin::loadLoginPage();
+		//}
+		//else
+		//{
+		//	LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
+		//}
+		LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
 	}
 	return true;
 }
diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h
index d36ceaf3cc05564cb88c913bb03ddbafb2d103cc..ac4648761b2a447c27bee3e142819059f8bd603e 100644
--- a/indra/newview/llloginhandler.h
+++ b/indra/newview/llloginhandler.h
@@ -48,7 +48,9 @@ class LLLoginHandler : public LLCommandHandler
 
 	std::string getFirstName() const { return mFirstName; }
 	std::string getLastName() const { return mLastName; }
-	LLUUID getWebLoginKey() const { return mWebLoginKey; }
+
+	// Web-based login unsupported
+	//LLUUID getWebLoginKey() const { return mWebLoginKey; }
 
 private:
 	void parse(const LLSD& queryMap);
@@ -56,7 +58,7 @@ class LLLoginHandler : public LLCommandHandler
 private:
 	std::string mFirstName;
 	std::string mLastName;
-	LLUUID mWebLoginKey;
+	//LLUUID mWebLoginKey;
 };
 
 extern LLLoginHandler gLoginHandler;
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 2153f77336e7b2084c8493b32ebf74107b5d447a..f1b3a37677a445fe9a680e902b4da572f30f40ea 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -163,7 +163,7 @@ void LLManipTranslate::restoreGL()
 
 	GLuint* d = new GLuint[rez*rez];	
 
-	gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName());
+	gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex->getTexName(), true);
 	gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
 
 	while (rez >= 1)
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 14da35594fb358238a804dae207d4132cc9b95e6..e3ba1b8e4adb3b17a3297a9dc64f17ca691e029a 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -598,14 +598,11 @@ BOOL LLPanelStandStopFlying::postBuild()
 void LLPanelStandStopFlying::setVisible(BOOL visible)
 {
 	//we dont need to show the panel if these buttons are not activated
-	if (visible && !mStandButton->getVisible() && !mStopFlyingButton->getVisible()) visible = false;
-
 	if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false;
 
 	if (visible)
 	{
 		updatePosition();
-		getParent()->sendChildToFront(this);
 	}
 
 	LLPanel::setVisible(visible);
@@ -638,7 +635,7 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml");
 
 	panel->setVisible(FALSE);
-	LLUI::getRootView()->addChild(panel);
+	//LLUI::getRootView()->addChild(panel);
 
 	llinfos << "Build LLPanelStandStopFlying panel" << llendl;
 
@@ -680,7 +677,7 @@ void LLPanelStandStopFlying::updatePosition()
 	//align centers of a button and a floater
 	S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2;
 
-	S32 y = tray->getRect().getHeight();
+	S32 y = 0;
 
 	LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
 	if (move_floater)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e63daac4afbff23efa2dedf7c59d47216eb0d1eb..17b712bc5e81d79574df1e7f96fb52b1ebe60432 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -50,8 +50,9 @@
 #include "llslurl.h"
 #include "llurlsimstring.h"
 #include "llviewerinventory.h"
+#include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llappviewer.h"
 #include "llviewercontrol.h"
 #include "llfloatermediabrowser.h"
@@ -173,8 +174,6 @@ LLNavigationBar::LLNavigationBar()
 	mSearchComboBox(NULL),
 	mPurgeTPHistoryItems(false)
 {
-	setIsChrome(TRUE);
-	
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
 
 	// set a listener function for LoginComplete event
@@ -271,6 +270,18 @@ void LLNavigationBar::draw()
 	LLPanel::draw();
 }
 
+BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+	BOOL handled = childrenHandleRightMouseDown( x, y, mask) != NULL;
+	if(!handled && !gMenuHolder->hasVisibleMenu())
+	{
+		show_navbar_context_menu(this,x,y);
+		handled = true;
+	}
+					
+	return handled;
+}
+
 void LLNavigationBar::onBackButtonClicked()
 {
 	LLTeleportHistory::getInstance()->goBack();
@@ -382,14 +393,13 @@ void LLNavigationBar::onLocationSelection()
 	
 	// Resolve the region name to its global coordinates.
 	// If resolution succeeds we'll teleport.
-	LLWorldMap::url_callback_t cb = boost::bind(
+	LLWorldMapMessage::url_callback_t cb = boost::bind(
 			&LLNavigationBar::onRegionNameResponse, this,
 			typed_location, region_name, local_coords, _1, _2, _3, _4);
 	// connect the callback each time, when user enter new location to get real location of agent after teleport
 	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
 			setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location));
-	
-	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
+	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
 }
 
 void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location)
@@ -576,6 +586,8 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			// propagate size to parent container
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -589,6 +601,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 	else
@@ -603,6 +616,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 			// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 			fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 			fb->setRect(fbRect);
@@ -615,16 +629,12 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 
 			reshape(nbRect.getWidth(), nbRect.getHeight());
 			setRect(nbRect);
+			getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 		}
 	}
 
 	childSetVisible("bg_icon", fpVisible);
 	childSetVisible("bg_icon_no_fav", !fpVisible);
-
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
 
 void LLNavigationBar::showFavoritesPanel(BOOL visible)
@@ -659,6 +669,7 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 
 		fb->reshape(fbRect.getWidth(), fbRect.getHeight());
 		fb->setRect(fbRect);
@@ -683,14 +694,11 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 
 		reshape(nbRect.getWidth(), nbRect.getHeight());
 		setRect(nbRect);
+		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 	}
 
 	childSetVisible("bg_icon", visible);
 	childSetVisible("bg_icon_no_fav", !visible);
 
 	fb->setVisible(visible);
-	if(LLSideTray::instanceCreated())
-	{
-		LLSideTray::getInstance()->resetPanelRect();
-	}
 }
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 8b625e7fa62099b09e5c14477e7fda7025388fba..52f5a827e4b17bdc232cb72a710e8d771cce74cf 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -54,6 +54,7 @@ class LLNavigationBar
 	virtual ~LLNavigationBar();
 	
 	/*virtual*/ void	draw();
+	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL	postBuild();
 
 	void handleLoginComplete();
@@ -77,7 +78,6 @@ class LLNavigationBar
 	void onBackOrForwardButtonHeldDown(const LLSD& param);
 	void onForwardButtonClicked();
 	void onHomeButtonClicked();
-	void onHelpButtonClicked();
 	void onLocationSelection();
 	void onLocationPrearrange(const LLSD& data);
 	void onSearchCommit();
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 12638ab8551b6c252c8d3145c58b6eb956db3a3d..974291a54e8eaaf30fe54a366d10f0fcd50dab2d 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -61,7 +61,7 @@
 static const S32 RESIZE_BAR_THICKNESS = 3;
 
 LLNearbyChat::LLNearbyChat(const LLSD& key) 
-	: LLDockableFloater(NULL, key)
+	: LLDockableFloater(NULL, false, key)
 	,mChatHistory(NULL)
 {
 	
@@ -97,14 +97,41 @@ BOOL LLNearbyChat::postBuild()
 	if (getDockControl() == NULL)
 	{
 		setDockControl(new LLDockControl(
-				LLBottomTray::getInstance()->getNearbyChatBar(), this,
-				getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
+			LLBottomTray::getInstance()->getNearbyChatBar(), this,
+			getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
 	}
 
 	return true;
 }
 
 
+void    LLNearbyChat::applySavedVariables()
+{
+	if (mRectControl.size() > 1)
+	{
+		const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl);
+		if(!rect.isEmpty() && rect.isValid())
+		{
+			reshape(rect.getWidth(), rect.getHeight());
+			setRect(rect);
+		}
+	}
+
+
+	if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl))
+	{
+		setDocked(true);
+	}
+	else
+	{
+		if (mDocStateControl.size() > 1)
+		{
+			bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl);
+			setDocked(dockState);
+		}
+	}
+}
+
 LLColor4 nearbychat_get_text_color(const LLChat& chat)
 {
 	LLColor4 text_color;
@@ -265,11 +292,5 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)
 {
 	rect = gViewerWindow->getWorldViewRect();
 }
-void LLNearbyChat::setVisible	(BOOL visible)
-{
-	LLDockableFloater::setVisible(visible);
-}
-void LLNearbyChat::toggleWindow()
-{
-}
+
 
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 20cbf7537d64be511a39ff48a7868954d4108daa..cb4654654a952562b21b252153de284759ad3516 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -52,16 +52,15 @@ class LLNearbyChat: public LLDockableFloater
 	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);
 	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata);
 
-	void	setDocked			(bool docked, bool pop_on_undock);
-	void	toggleWindow		();
+	void	setDocked			(bool docked, bool pop_on_undock = true);
 
 	/*virtual*/ void	onOpen	(const LLSD& key);
 
-	virtual void setVisible		(BOOL visible);
-
 	virtual void setRect		(const LLRect &rect);
 
 private:
+	virtual void    applySavedVariables();
+
 	void	getAllowedRect		(LLRect& rect);
 
 	void	onNearbySpeakers	();
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 32dc5e59278e740073fcd570f8f9ee4d3b8c02df..d54545971bbb684ef9b304941623e46720b851f6 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -36,6 +36,7 @@
 #include "lltrans.h"
 
 #include "llnearbychatbar.h"
+#include "llspeakbutton.h"
 #include "llbottomtray.h"
 #include "llagent.h"
 #include "llgesturemgr.h"
@@ -77,6 +78,10 @@ LLGestureComboBox::LLGestureComboBox(const LLGestureComboBox::Params& p)
 
 	// refresh list from current active gestures
 	refreshGestures();
+
+	// This forces using of halign from xml, since LLComboBox
+	// sets it to LLFontGL::LEFT, if text entry is disabled
+	mButton->setHAlign(p.drop_down_button.font_halign);
 }
 
 LLGestureComboBox::~LLGestureComboBox()
@@ -207,6 +212,7 @@ LLNearbyChatBar::LLNearbyChatBar()
 	: LLPanel()
 	, mChatBox(NULL)
 {
+	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
 }
 
 //virtual
@@ -228,11 +234,11 @@ BOOL LLNearbyChatBar::postBuild()
 
 	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");
 	mOutputMonitor->setVisible(FALSE);
-	mTalkBtn = getParent()->getChild<LLTalkButton>("talk");
+	mSpeakBtn = getParent()->getChild<LLSpeakButton>("talk");
 
 	// Speak button should be initially disabled because
 	// it takes some time between logging in to world and connecting to voice channel.
-	mTalkBtn->setEnabled(FALSE);
+	mSpeakBtn->setEnabled(FALSE);
 
 	// Registering Chat Bar to receive Voice client status change notifications.
 	gVoiceClient->addObserver(this);
@@ -516,8 +522,8 @@ void LLNearbyChatBar::displaySpeakingIndicator()
 	LLUUID id;
 
 	id.setNull();
-	mSpeakerMgr.update(TRUE);
-	mSpeakerMgr.getSpeakerList(&speaker_list, FALSE);
+	mSpeakerMgr->update(TRUE);
+	mSpeakerMgr->getSpeakerList(&speaker_list, FALSE);
 
 	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
@@ -689,11 +695,6 @@ LLWString LLNearbyChatBar::stripChannelNumber(const LLWString &mesg, S32* channe
 	}
 }
 
-void LLNearbyChatBar::setPTTState(bool state)
-{
-	mTalkBtn->setSpeakBtnToggleState(state);
-}
-
 void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel)
 {
 	LLMessageSystem* msg = gMessageSystem;
@@ -747,7 +748,7 @@ void LLNearbyChatBar::onChange(EStatusType status, const std::string &channelURI
 		break;
 	}
 
-	mTalkBtn->setEnabled(enable);
+	mSpeakBtn->setEnabled(enable);
 }
 
 // Creating the object registers with the dispatcher.
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 06204e6367b4a43f5c80c03b088255e064df02a0..56ee706a9746a865c7ea2c49d77bfc5203ef04b5 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -37,11 +37,14 @@
 #include "llcombobox.h"
 #include "llgesturemgr.h"
 #include "llchat.h"
-#include "llchiclet.h"
 #include "llvoiceclient.h"
 #include "lloutputmonitorctrl.h"
 #include "llspeakers.h"
 
+
+class LLSpeakButton;
+
+
 class LLGestureComboBox
 	: public LLComboBox
 	, public LLGestureManagerObserver
@@ -93,7 +96,6 @@ class LLNearbyChatBar
 	std::string getCurrentChat();
 	virtual BOOL handleKeyHere( KEY key, MASK mask );
 
-	void setPTTState(bool state);
 	static void startChat(const char* line);
 	static void stopChat();
 
@@ -125,9 +127,9 @@ class LLNearbyChatBar
 	static S32 sLastSpecialChatChannel;
 
 	LLLineEditor*		mChatBox;
-	LLTalkButton*		mTalkBtn;
+	LLSpeakButton*		mSpeakBtn;
 	LLOutputMonitorCtrl* mOutputMonitor;
-	LLActiveSpeakerMgr  mSpeakerMgr;
+	LLLocalSpeakerMgr*  mSpeakerMgr;
 };
 
 #endif
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index b6b433c28f19d2e0790b0028448686075d5e29f1..4286582cdc5b6758b58604fd26f60673d96c0c40 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -65,9 +65,15 @@
 
 static LLDefaultChildRegistry::Register<LLNetMap> r1("net_map");
 
+const F32 LLNetMap::MAP_SCALE_MIN = 32;
+const F32 LLNetMap::MAP_SCALE_MID = 1024;
+const F32 LLNetMap::MAP_SCALE_MAX = 4096;
+
 const F32 MAP_SCALE_INCREMENT = 16;
-const F32 MAP_MIN_PICK_DIST = 4;
-const F32 MAX_PRIM_RADIUS = 256.0f; // Don't try to draw giant mega-prims on the mini map
+const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll wheel (4%)
+const F32 MIN_DOT_RADIUS = 3.5f;
+const F32 DOT_SCALE = 0.75f;
+const F32 MIN_PICK_SCALE = 2.f;
 
 LLNetMap::LLNetMap (const Params & p)
 :	LLUICtrl (p),
@@ -89,6 +95,7 @@ LLNetMap::LLNetMap (const Params & p)
 	mRotateMap(FALSE),
 	mToolTipMsg()
 {
+	mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
 }
 
 LLNetMap::~LLNetMap()
@@ -101,17 +108,18 @@ void LLNetMap::setScale( F32 scale )
 	
 	if (mObjectImagep.notNull())
 	{
-		F32 half_width = (F32)(getRect().getWidth() / 2);
-		F32 half_height = (F32)(getRect().getHeight() / 2);
-		F32 radius = sqrt( half_width * half_width + half_height * half_height );
-		F32 region_widths = (2.f*radius)/mScale;
+		F32 width = (F32)(getRect().getWidth());
+		F32 height = (F32)(getRect().getHeight());
+		F32 diameter = sqrt(width * width + height * height);
+		F32 region_widths = diameter / mScale;
 		F32 meters = region_widths * LLWorld::getInstance()->getRegionWidthInMeters();
 		F32 num_pixels = (F32)mObjectImagep->getWidth();
-		mObjectMapTPM = num_pixels/meters;
-		mObjectMapPixels = 2.f*radius;
+		mObjectMapTPM = num_pixels / meters;
+		mObjectMapPixels = diameter;
 	}
 
 	mPixelsPerMeter = mScale / REGION_WIDTH_METERS;
+	mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
 
 	mUpdateNow = TRUE;
 }
@@ -302,6 +310,7 @@ void LLNetMap::draw()
 		LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
 		mClosestAgentToCursor.setNull();
 		F32 closest_dist = F32_MAX;
+		F32 min_pick_dist = mDotRadius * MIN_PICK_SCALE; 
 
 		// Draw avatars
 		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -345,10 +354,10 @@ void LLNetMap::draw()
 				LLWorldMapView::drawAvatar(
 					pos_map.mV[VX], pos_map.mV[VY], 
 					show_as_friend ? map_avatar_friend_color : map_avatar_color, 
-					pos_map.mV[VZ]);
+					pos_map.mV[VZ], mDotRadius);
 
 				F32	dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y));
-				if(dist_to_cursor < MAP_MIN_PICK_DIST && dist_to_cursor < closest_dist)
+				if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist)
 				{
 					closest_dist = dist_to_cursor;
 					mClosestAgentToCursor = regionp->mMapAvatarIDs.get(i);
@@ -378,10 +387,12 @@ void LLNetMap::draw()
 		// Draw dot for self avatar position
 		pos_global = gAgent.getPositionGlobal();
 		pos_map = globalPosToView(pos_global);
-		LLUIImagePtr you = LLWorldMapView::sAvatarYouSmallImage;
-		you->draw(
-			llround(pos_map.mV[VX]) - you->getWidth()/2, 
-			llround(pos_map.mV[VY]) - you->getHeight()/2);
+		LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;
+		S32 dot_width = llround(mDotRadius * 2.f);
+		you->draw(llround(pos_map.mV[VX] - mDotRadius),
+				  llround(pos_map.mV[VY] - mDotRadius),
+				  dot_width,
+				  dot_width);
 
 		// Draw frustum
 		F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters();
@@ -429,6 +440,12 @@ void LLNetMap::draw()
 	LLUICtrl::draw();
 }
 
+void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	LLUICtrl::reshape(width, height, called_from_parent);
+	createObjectImage();
+}
+
 LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )
 {
 	LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal();
@@ -504,8 +521,12 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )
 
 BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
 {
-	// note that clicks are reversed from what you'd think
-	setScale(llclamp(mScale - clicks*MAP_SCALE_INCREMENT, MAP_SCALE_MIN, MAP_SCALE_MAX));
+	// note that clicks are reversed from what you'd think: i.e. > 0  means zoom out, < 0 means zoom in
+	F32 scale = mScale;
+        
+	scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks);
+	setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX));
+
 	return TRUE;
 }
 
@@ -567,9 +588,7 @@ void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &
 	LLVector3 local_pos;
 	local_pos.setVec( pos - mObjectImageCenterGlobal );
 
-	F32 radius_clamped = llmin(radius_meters, MAX_PRIM_RADIUS);
-	
-	S32 diameter_pixels = llround(2 * radius_clamped * mObjectMapTPM);
+	S32 diameter_pixels = llround(2 * radius_meters * mObjectMapTPM);
 	renderPoint( local_pos, color, diameter_pixels );
 }
 
@@ -662,13 +681,13 @@ void LLNetMap::renderPoint(const LLVector3 &pos_local, const LLColor4U &color,
 void LLNetMap::createObjectImage()
 {
 	// Find the size of the side of a square that surrounds the circle that surrounds getRect().
-	F32 half_width = (F32)(getRect().getWidth() / 2);
-	F32 half_height = (F32)(getRect().getHeight() / 2);
-	F32 radius = sqrt( half_width * half_width + half_height * half_height );
-	S32 square_size = S32( 2 * radius );
+	// ... which is, the diagonal of the rect.
+	F32 width = (F32)getRect().getWidth();
+	F32 height = (F32)getRect().getHeight();
+	S32 square_size = llround( sqrt(width*width + height*height) );
 
 	// Find the least power of two >= the minimum size.
-	const S32 MIN_SIZE = 32;
+	const S32 MIN_SIZE = 64;
 	const S32 MAX_SIZE = 256;
 	S32 img_size = MIN_SIZE;
 	while( (img_size*2 < square_size ) && (img_size < MAX_SIZE) )
@@ -684,7 +703,7 @@ void LLNetMap::createObjectImage()
 		U8* data = mObjectRawImagep->getData();
 		memset( data, 0, img_size * img_size * 4 );
 		mObjectImagep = LLViewerTextureManager::getLocalTexture( mObjectRawImagep.get(), FALSE);
-		setScale(mScale);
 	}
+	setScale(mScale);
 	mUpdateNow = TRUE;
 }
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index 5ebdd13384642b811de03d6cee193d506188b597..7088ab3e70c08c965b8fec78e8845e831b81e909 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -70,9 +70,14 @@ class LLNetMap : public LLUICtrl
 public:
 	virtual ~LLNetMap();
 
+	static const F32 MAP_SCALE_MIN;
+	static const F32 MAP_SCALE_MID;
+	static const F32 MAP_SCALE_MAX;
+
 	/*virtual*/ void	draw();
 	/*virtual*/ BOOL	handleScrollWheel(S32 x, S32 y, S32 clicks);
 	/*virtual*/ BOOL	handleToolTip( S32 x, S32 y, MASK mask);
+	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
 	void			setScale( F32 scale );
 	void			setRotateMap( BOOL b ) { mRotateMap = b; }
@@ -94,16 +99,17 @@ class LLNetMap : public LLUICtrl
 	void			drawTracking( const LLVector3d& pos_global, 
 								  const LLColor4& color,
 								  BOOL draw_arrow = TRUE);
-
-	void			createObjectImage();
 	
+	void			createObjectImage();
+
 private:
 	LLUIColor		mBackgroundColor;
 
 	F32				mScale;					// Size of a region in pixels
 	F32				mPixelsPerMeter;		// world meters to map pixels
 	F32				mObjectMapTPM;			// texels per meter on map
-	F32				mObjectMapPixels;		// Width of object map in pixels;
+	F32				mObjectMapPixels;		// Width of object map in pixels
+	F32				mDotRadius;				// Size of avatar markers
 	F32				mTargetPanX;
 	F32				mTargetPanY;
 	F32				mCurPanX;
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index cd4e640ec4896b060430b9e348d52a2378ca03a4..23998a0e5d1bbef91e4ff232d495c41ac7f1df51 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -53,7 +53,8 @@ typedef enum e_notification_type
 	NT_GROUPCHAT, 
 	NT_NEARBYCHAT, 
 	NT_ALERT,
-	NT_ALERTMODAL
+	NT_ALERTMODAL,
+	NT_OFFER
 } ENotificationType;
 
 /**
@@ -231,6 +232,27 @@ class LLAlertHandler : public LLSysHandler
 	bool	mIsModal;
 };
 
+/**
+ * Handler for offers notices.
+ * It manages life time of offer notices.
+ */
+class LLOfferHandler : public LLSysHandler
+{
+public:
+	LLOfferHandler(e_notification_type type, const LLSD& id);
+	virtual ~LLOfferHandler();
+
+	// base interface functions
+	virtual bool processNotification(const LLSD& notify);
+
+protected:
+	virtual void onDeleteToast(LLToast* toast);
+	virtual void initChannel();
+
+	// own handlers
+	void onRejectToast(LLUUID& id);
+};
+
 }
 #endif
 
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 81a6b32917dec999e172db4b687d5ce3a07d10b7..1083cf3634be72326ebbd7d2c6b6a1471483c2fd 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -63,6 +63,7 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("Alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
 	LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
 	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
+	LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -70,6 +71,7 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
+	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
@@ -80,6 +82,7 @@ void LLNotificationManager::init()
 	mNotifyHandlers["notifytoast"] = boost::shared_ptr<LLEventHandler>(new LLIMHandler(NT_IMCHAT, LLSD()));
 	
 	mNotifyHandlers["nearbychat"] = boost::shared_ptr<LLEventHandler>(new LLNearbyChatHandler(NT_NEARBYCHAT, LLSD()));
+	mNotifyHandlers["offer"] = boost::shared_ptr<LLEventHandler>(new LLOfferHandler(NT_OFFER, LLSD()));
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..75ef5208e76329227b84ee25beb27f29be589402
--- /dev/null
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -0,0 +1,157 @@
+/**
+ * @file llnotificationofferhandler.cpp
+ * @brief Notification Handler Class for Simple Notifications and Notification Tips
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llnotificationhandler.h"
+#include "lltoastnotifypanel.h"
+#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "llimview.h"
+#include "llimfloater.h"
+#include "llnotificationmanager.h"
+
+using namespace LLNotificationsUI;
+
+//--------------------------------------------------------------------------
+LLOfferHandler::LLOfferHandler(e_notification_type type, const LLSD& id)
+{
+	mType = type;
+
+	// Getting a Channel for our notifications
+	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+	mChannel->setControlHovering(true);
+
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+	if(channel)
+		channel->setOnRejectToastCallback(boost::bind(&LLOfferHandler::onRejectToast, this, _1));
+}
+
+//--------------------------------------------------------------------------
+LLOfferHandler::~LLOfferHandler()
+{
+}
+
+//--------------------------------------------------------------------------
+void LLOfferHandler::initChannel()
+{
+	S32 channel_right_bound = gViewerWindow->getWorldViewRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
+	S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
+	mChannel->init(channel_right_bound - channel_width, channel_right_bound);
+}
+
+//--------------------------------------------------------------------------
+bool LLOfferHandler::processNotification(const LLSD& notify)
+{
+	if(!mChannel)
+	{
+		return false;
+	}
+
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	if(!notification)
+		return false;
+
+	// arrange a channel on a screen
+	if(!mChannel->getVisible())
+	{
+		initChannel();
+	}
+
+	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
+	{
+		// add message to IM
+		LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, notification->getPayload()["from_id"]);
+		if (!LLIMMgr::instance().hasSession(session_id))
+		{
+			// create session with faked type to avoid creating chicklets
+			session_id = LLIMMgr::instance().addSession(
+					notification->getSubstitutions()["NAME"], IM_NOTHING_SPECIAL,
+					notification->getPayload()["from_id"]);
+			if (session_id != LLUUID::null)
+			{
+				LLIMFloater::show(session_id);
+			}
+		}
+		LLIMMgr::instance().addMessage(session_id, LLUUID(),
+				notification->getSubstitutions()["NAME"],
+				notification->getMessage());
+
+		LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
+
+		LLToast::Params p;
+		p.notif_id = notification->getID();
+		p.notification = notification;
+		p.panel = notify_box;
+		p.on_delete_toast = boost::bind(&LLOfferHandler::onDeleteToast, this, _1);
+
+		LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+		if(channel)
+			channel->addToast(p);
+
+		// send a signal to the counter manager
+		mNewNotificationSignal();
+	}
+	else if (notify["sigtype"].asString() == "delete")
+	{
+		mChannel->killToastByNotificationID(notification->getID());
+	}
+
+	return true;
+}
+
+//--------------------------------------------------------------------------
+
+void LLOfferHandler::onDeleteToast(LLToast* toast)
+{
+	// send a signal to the counter manager
+	mDelNotificationSignal();
+
+	// send a signal to a listener to let him perform some action
+	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
+	mNotificationIDSignal(toast->getNotificationID());
+}
+
+//--------------------------------------------------------------------------
+void LLOfferHandler::onRejectToast(LLUUID& id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(id);
+
+	if (notification
+			&& LLNotificationManager::getInstance()->getHandlerForNotification(
+					notification->getType()) == this)
+	{
+		LLNotifications::instance().cancel(notification);
+	}
+}
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 070af432d6cd48c781cb341689acf6649fe41348..dac7a4ca3a4eecce8a7a83af4305bf813ff3eb0c 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -37,6 +37,7 @@
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
+#include "llnotificationmanager.h"
 
 using namespace LLNotificationsUI;
 
@@ -129,7 +130,9 @@ void LLScriptHandler::onRejectToast(LLUUID& id)
 {
 	LLNotificationPtr notification = LLNotifications::instance().find(id);
 
-	if(notification)
+	if (notification
+			&& LLNotificationManager::getInstance()->getHandlerForNotification(
+					notification->getType()) == this)
 	{
 		LLNotifications::instance().cancel(notification);
 	}
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index 8bac9937f0d47a8881ece5f9a8f52753c42b9aca..39381e3faaeeadc3bc6966a4eedee069fb635224 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -80,7 +80,8 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p)
 	mImageLevel2(p.image_level_2),
 	mImageLevel3(p.image_level_3),
 	mAutoUpdate(p.auto_update),
-	mSpeakerId(p.speaker_id)
+	mSpeakerId(p.speaker_id),
+	mIsAgentControl(false)
 {
 	//static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange);
 	//static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red);
@@ -132,7 +133,14 @@ void LLOutputMonitorCtrl::draw()
 	if (getVisible() && mAutoUpdate && !mIsMuted && mSpeakerId.notNull())
 	{
 		setPower(gVoiceClient->getCurrentPower(mSpeakerId));
-		setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		if(mIsAgentControl)
+		{
+			setIsTalking(gVoiceClient->getUserPTTState());
+		}
+		else
+		{
+			setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId));
+		}
 	}
 
 	LLPointer<LLUIImage> icon;
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
index 7a7b8bc3a18e5fcdf799fd67cb8c3b769334b676..85ea552a572b049fbf796b0f914fcabb9481f7d5 100644
--- a/indra/newview/lloutputmonitorctrl.h
+++ b/indra/newview/lloutputmonitorctrl.h
@@ -81,6 +81,8 @@ class LLOutputMonitorCtrl
 
 	// For the current user, need to know the PTT state to show
 	// correct button image.
+	void			setIsAgentControl(bool val) { mIsAgentControl = val; }
+
 	void			setIsTalking(bool val) { mIsTalking = val; }
 
 	void			setSpeakerId(const LLUUID& speaker_id);
@@ -100,6 +102,7 @@ class LLOutputMonitorCtrl
 	
 
 	F32				mPower;
+	bool			mIsAgentControl;
 	bool			mIsMuted;
 	bool			mIsTalking;
 	LLPointer<LLUIImage> mImageMute;
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 6413d939f0ecd96fd99656b9cd7b304fa79930c6..3b54f1546e8ce996d7dc9c4b6fc1b03ebed53f2c 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -255,7 +255,7 @@ void LLPanelAvatarNotes::onTeleportButtonClick()
 
 void LLPanelAvatarNotes::onCallButtonClick()
 {
-	//*TODO not implemented.
+	LLAvatarActions::startCall(getAvatarId());
 }
 
 void LLPanelAvatarNotes::onShareButtonClick()
@@ -544,7 +544,7 @@ void LLPanelAvatarProfile::onTeleportButtonClick()
 
 void LLPanelAvatarProfile::onCallButtonClick()
 {
-	//*TODO not implemented
+	LLAvatarActions::startCall(getAvatarId());
 }
 
 void LLPanelAvatarProfile::onShareButtonClick()
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index ea528a1df89e38e8db18e233df02827a5ad9dcdd..9d591ef43d184175ca4012e981e3dbaf1543152b 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -51,7 +51,7 @@
 // project includes
 #include "llagent.h"
 #include "llfloaterbulkpermission.h"
-#include "llpanelinventory.h"
+#include "llpanelobjectinventory.h"
 #include "llpreviewscript.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
@@ -59,6 +59,7 @@
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
 #include "lltrans.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
@@ -89,14 +90,14 @@ BOOL LLPanelContents::postBuild()
 	childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
 	childSetAction("button permissions",&LLPanelContents::onClickPermissions, this);
 
-	mPanelInventory = getChild<LLPanelInventory>("contents_inventory");
+	mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory");
 
 	return TRUE;
 }
 
 LLPanelContents::LLPanelContents()
 	:	LLPanel(),
-		mPanelInventory(NULL)
+		mPanelInventoryObject(NULL)
 {
 }
 
@@ -139,9 +140,9 @@ void LLPanelContents::refresh()
 	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
 
 	getState(object);
-	if (mPanelInventory)
+	if (mPanelInventoryObject)
 	{
-		mPanelInventory->refresh();
+		mPanelInventoryObject->refresh();
 	}	
 }
 
@@ -167,7 +168,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
 			PERM_NONE,
 			PERM_MOVE | PERM_TRANSFER);
 		std::string desc;
-		LLAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
+		LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
 		LLPointer<LLViewerInventoryItem> new_item =
 			new LLViewerInventoryItem(
 				LLUUID::null,
diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h
index bab980b52461d0c0cb7b0d736ed3164d31ba13ea..14256845a6cd9d33dbb060f6cc38791c70379bf1 100644
--- a/indra/newview/llpanelcontents.h
+++ b/indra/newview/llpanelcontents.h
@@ -35,9 +35,14 @@
 
 #include "v3math.h"
 #include "llpanel.h"
+#include "llinventory.h"
+#include "lluuid.h"
+#include "llmap.h"
+#include "llviewerobject.h"
+#include "llvoinventorylistener.h"
 
 class LLButton;
-class LLPanelInventory;
+class LLPanelObjectInventory;
 class LLViewerObject;
 class LLCheckBoxCtrl;
 class LLSpinCtrl;
@@ -70,7 +75,7 @@ class LLPanelContents : public LLPanel
 	void				getState(LLViewerObject *object);
 
 public:
-	LLPanelInventory* mPanelInventory;
+	LLPanelObjectInventory* mPanelInventoryObject;
 };
 
-#endif
+#endif // LL_LLPANELCONTENTS_H
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 4708d7ba364622b4a2f8b7e5961087526156ccce..61f23961687240f51727093fef94c52036174b38 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -86,23 +86,6 @@ BOOL LLPanelGroupTab::postBuild()
 	return TRUE;
 }
 
-
-
-void LLPanelGroupTab::handleClickHelp()
-{
-	// Display the help text.
-	std::string help_text( getHelpText() );
-	if ( !help_text.empty() )
-	{
-		LLSD args;
-		args["MESSAGE"] = help_text;
-		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-		LLNotification::Params params(parent_floater->contextualNotification("GenericAlert"));
-		params.substitutions(args);
-		LLNotifications::instance().add(params);
-	}
-}
-
 LLPanelGroup::LLPanelGroup()
 :	LLPanel(),
 	LLGroupMgrObserver( LLUUID() ),
@@ -308,6 +291,7 @@ void LLPanelGroup::update(LLGroupChange gc)
 	if(gdatap)
 	{
 		childSetValue("group_name", gdatap->mName);
+		childSetToolTip("group_name",gdatap->mName);
 
 		LLButton* btn_join = getChild<LLButton>("btn_join");
 		LLUICtrl* join_text = getChild<LLUICtrl>("join_cost_text");
@@ -354,7 +338,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 
 	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mID);
 	if(gdatap)
+	{
 		childSetValue("group_name", gdatap->mName);
+		childSetToolTip("group_name",gdatap->mName);
+	}
 
 	LLButton* button_apply = findChild<LLButton>("btn_apply");
 	LLButton* button_refresh = findChild<LLButton>("btn_refresh");
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 5c7b0ddd0603bdb162925b0c5b9a13e5df1de386..306e6575fc7122a3ecfec663f8c35b6bbe873d45 100644
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -148,12 +148,6 @@ class LLPanelGroupTab : public LLPanel
 	// Triggered when group information changes in the group manager.
 	virtual void update(LLGroupChange gc) { }
 
-	// This is the text to be displayed when a help button is pressed.
-	virtual std::string getHelpText() const { return mHelpText; }
-
-	// Display anything returned by getHelpText
-	void handleClickHelp();
-
 	// This just connects the help button callback.
 	virtual BOOL postBuild();
 
@@ -171,11 +165,8 @@ class LLPanelGroupTab : public LLPanel
 
 protected:
 	LLUUID	mGroupID;
-	std::string	mHelpText;
-
 	BOOL mAllowEdit;
 	BOOL mHasModal;
-
 };
 
 #endif // LL_LLPANELGROUP_H
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index a82402572392304787cc767f76f6d881c2eda96e..4b205b4e0cc9853953c78cc20899929a8d8cab77 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -38,6 +38,7 @@
 
 #include "llinventory.h"
 #include "llviewerinventory.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llfloaterinventory.h"
 #include "llagent.h"
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 71486c908cc1b82ea66e5befca367e1b6c9e8341..88aad4923d67bced285108a9020c3b15cde5aab8 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -361,20 +361,6 @@ void LLPanelGroupRoles::cancel()
 	panelp->cancel();
 }
 
-// Pass all of these messages to the currently visible sub tab.
-std::string LLPanelGroupRoles::getHelpText() const
-{
-	LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
-	if (panelp)
-	{
-		return panelp->getHelpText();
-	}
-	else
-	{
-		return mHelpText;
-	}
-}
-
 void LLPanelGroupRoles::update(LLGroupChange gc)
 {
 	if (mGroupID.isNull()) return;
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index bd5fc1d2350f77bd0f4ce7244754d15ccde5a134..b6e2245e70d0fcb9e6b58f2355cbf8b4e01ff635 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -78,7 +78,6 @@ class LLPanelGroupRoles : public LLPanelGroupTab
 	bool onModalClose(const LLSD& notification, const LLSD& response);
 
 	// Most of these messages are just passed on to the current sub-tab.
-	virtual std::string getHelpText() const;
 	virtual void activate();
 	virtual void deactivate();
 	virtual bool needsApply(std::string& mesg);
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index b54975b76b6392ea9ae9818e00e44acd5d058249..c9168670d5cd80c73f5e41e5e2aedb63fece6dcf 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -59,6 +59,14 @@ void LLPanelChatControlPanel::onOpenVoiceControlsClicked()
 	// TODO: implement Voice Control Panel opening
 }
 
+void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
+{
+	bool is_call_started = ( new_state >= LLVoiceChannel::STATE_CALL_STARTED );
+	childSetVisible("end_call_btn", is_call_started);
+	childSetVisible("voice_ctrls_btn", is_call_started);
+	childSetVisible("call_btn", ! is_call_started);
+}
+
 BOOL LLPanelChatControlPanel::postBuild()
 {
 	childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this));
@@ -76,15 +84,6 @@ void LLPanelChatControlPanel::draw()
 	LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId);
 	if (!session) return;
 
-	LLVoiceChannel* voice_channel = session->mVoiceChannel;
-	if (voice_channel && voice_enabled)
-	{
-		bool is_call_started = ( voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED );
-		childSetVisible("end_call_btn", is_call_started);
-		childSetVisible("voice_ctrls_btn", is_call_started);
-		childSetVisible("call_btn", ! is_call_started);
-	}
-
 	bool session_initialized = session->mSessionInitialized;
 	bool callback_enabled = session->mCallBackEnabled;
 	LLViewerRegion* region = gAgent.getRegion();
@@ -98,6 +97,15 @@ void LLPanelChatControlPanel::draw()
 	LLPanel::draw();
 }
 
+void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
+{
+	//Method is called twice for AdHoc and Group chat. Second time when server init reply received
+	mSessionId = session_id;
+	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionId);
+	if(voice_channel)
+		voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+}
+
 LLPanelIMControlPanel::LLPanelIMControlPanel()
 {
 }
@@ -112,21 +120,34 @@ BOOL LLPanelIMControlPanel::postBuild()
 	childSetAction("add_friend_btn", boost::bind(&LLPanelIMControlPanel::onAddFriendButtonClicked, this));
 
 	childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
+	childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
+	childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
 	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
+
+	
 	
 	return LLPanelChatControlPanel::postBuild();
 }
 
+void LLPanelIMControlPanel::onTeleportButtonClicked()
+{
+	LLAvatarActions::offerTeleport(mAvatarID);
+}
+void LLPanelIMControlPanel::onPayButtonClicked()
+{
+	LLAvatarActions::pay(mAvatarID);
+}
+
 void LLPanelIMControlPanel::onViewProfileButtonClicked()
 {
-	LLAvatarActions::showProfile(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId());
+	LLAvatarActions::showProfile(mAvatarID);
 }
 
 void LLPanelIMControlPanel::onAddFriendButtonClicked()
 {
 	LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 	std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName();
-	LLAvatarActions::requestFriendshipDialog(avatar_icon->getAvatarId(), full_name);
+	LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name);
 }
 
 void LLPanelIMControlPanel::onShareButtonClicked()
@@ -140,12 +161,15 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 
 	LLIMModel& im_model = LLIMModel::instance();
 
-	LLUUID avatar_id = im_model.getOtherParticipantID(session_id);
+	mAvatarID = im_model.getOtherParticipantID(session_id);
 
 	// Disable "Add friend" button for friends.
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(avatar_id));
+	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
 
-	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(avatar_id);
+	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
+
+	// Fetch the currect name
+	gCacheName->get(mAvatarID, FALSE, boost::bind(&LLPanelIMControlPanel::nameUpdatedCallback, this, _1, _2, _3, _4));
 
 	// Disable profile button if participant is not realy SL avatar
 	LLIMModel::LLIMSession* im_session =
@@ -154,6 +178,17 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 		childSetEnabled("view_profile_btn", FALSE);
 }
 
+void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+{
+	if ( id == mAvatarID )
+	{
+		std::string avatar_name;
+		avatar_name.assign(first);
+		avatar_name.append(" ");
+		avatar_name.append(last);
+		getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
+	}
+}
 
 LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id)
 {
@@ -188,6 +223,26 @@ void LLPanelGroupControlPanel::onGroupInfoButtonClicked()
 	LLGroupActions::show(mGroupID);
 }
 
+void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
+{
+	// TODO: Check this code when when sort order menu will be added. (EM)
+	if (false && !mParticipantList)
+		return;
+
+	std::string chosen_item = userdata.asString();
+
+	if (chosen_item == "sort_name")
+	{
+		mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME);
+	}
+
+}
+
+void LLPanelGroupControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
+{
+	LLPanelChatControlPanel::onVoiceChannelStateChanged(old_state, new_state);
+	mAvatarList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
+}
 
 void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
 {
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index d25f33935a3f58305cfb2c5146669c4d4c0e1ff8..ac5d86345e834909b145e83991d63e32f989cd4b 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -34,6 +34,7 @@
 #define LL_LLPANELIMCONTROLPANEL_H
 
 #include "llpanel.h"
+#include "llvoicechannel.h"
 
 class LLSpeakerMgr;
 class LLAvatarList;
@@ -52,7 +53,9 @@ class LLPanelChatControlPanel : public LLPanel
 	void onEndCallButtonClicked();
 	void onOpenVoiceControlsClicked();
 
-	virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; }
+	virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
+
+	virtual void setSessionId(const LLUUID& session_id);
 
 private:
 	LLUUID mSessionId;
@@ -69,10 +72,15 @@ class LLPanelIMControlPanel : public LLPanelChatControlPanel
 
 	void setSessionId(const LLUUID& session_id);
 
+protected:
+	void nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+
 private:
 	void onViewProfileButtonClicked();
 	void onAddFriendButtonClicked();
 	void onShareButtonClicked();
+	void onTeleportButtonClicked();
+	void onPayButtonClicked();
 
 	LLUUID mAvatarID;
 };
@@ -97,6 +105,8 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel
 
 private:
 	void onGroupInfoButtonClicked();
+	void onSortMenuItemClicked(const LLSD& userdata);
+	/*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
 };
 
 class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel
diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp
index bce5525a4066618bedb854b092a5650e2515f5dc..417a8048347671d0e2884bfdd5b4bf9db621ec41 100644
--- a/indra/newview/llpanelland.cpp
+++ b/indra/newview/llpanelland.cpp
@@ -70,7 +70,6 @@ BOOL	LLPanelLandInfo::postBuild()
 	childSetAction("button subdivide land",onClickDivide,this);
 	childSetAction("button join land",onClickJoin,this);
 	childSetAction("button about land",onClickAbout,this);
-	childSetAction("button show owners help", onShowOwnersHelp, this);
 
 	mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners");
 	childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners"));
@@ -265,8 +264,3 @@ void LLPanelLandInfo::onClickAbout(void*)
 
 	LLFloaterReg::showInstance("about_land");
 }
-
-void LLPanelLandInfo::onShowOwnersHelp(void* user_data)
-{
-	LLNotifications::instance().add("ShowOwnersHelp");
-}
diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h
index 92fe3134052984afeede523848294e571f5aae5b..02e7e7bf3856036c3578779a4429b76a851e27c4 100644
--- a/indra/newview/llpanelland.h
+++ b/indra/newview/llpanelland.h
@@ -60,7 +60,6 @@ class LLPanelLandInfo
 	static void onClickDivide(void*);
 	static void onClickJoin(void*);
 	static void onClickAbout(void*);
-	static void onShowOwnersHelp(void*);
 
 protected:
 	//LLTextBox*		mTextPriceLabel;
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..49856638339e6f513261c0b422ba4cca14768a75
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -0,0 +1,420 @@
+/**
+ * @file llpanellandmarkinfo.cpp
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanellandmarkinfo.h"
+
+#include "llcombobox.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lltrans.h"
+
+#include "llagent.h"
+#include "llagentui.h"
+#include "lllandmarkactions.h"
+#include "llviewerinventory.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+//----------------------------------------------------------------------------
+// Aux types and methods
+//----------------------------------------------------------------------------
+
+typedef std::pair<LLUUID, std::string> folder_pair_t;
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
+
+static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
+
+LLPanelLandmarkInfo::LLPanelLandmarkInfo()
+:	LLPanelPlaceInfo()
+{}
+
+// virtual
+LLPanelLandmarkInfo::~LLPanelLandmarkInfo()
+{}
+
+// virtual
+BOOL LLPanelLandmarkInfo::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mOwner = getChild<LLTextBox>("owner");
+	mCreator = getChild<LLTextBox>("creator");
+	mCreated = getChild<LLTextBox>("created");
+
+	mTitleEditor = getChild<LLLineEditor>("title_editor");
+	mNotesEditor = getChild<LLTextEditor>("notes_editor");
+	mFolderCombo = getChild<LLComboBox>("folder_combo");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelLandmarkInfo::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	std::string not_available = getString("not_available");
+	mCreator->setText(not_available);
+	mOwner->setText(not_available);
+	mCreated->setText(not_available);
+	mTitleEditor->setText(LLStringUtil::null);
+	mNotesEditor->setText(LLStringUtil::null);
+}
+
+// virtual
+void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type)
+{
+	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
+
+	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
+	bool is_info_type_landmark = type == LANDMARK;
+
+	landmark_info_panel->setVisible(is_info_type_landmark);
+
+	getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark);
+	mFolderCombo->setVisible(is_info_type_create_landmark);
+
+	switch(type)
+	{
+		case CREATE_LANDMARK:
+			mCurrentTitle = getString("title_create_landmark");
+
+			mTitleEditor->setEnabled(TRUE);
+			mNotesEditor->setEnabled(TRUE);
+		break;
+
+		case LANDMARK:
+		default:
+			mCurrentTitle = getString("title_landmark");
+
+			mTitleEditor->setEnabled(FALSE);
+			mNotesEditor->setEnabled(FALSE);
+		break;
+	}
+
+	populateFoldersList();
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+// virtual
+void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	S32 region_x;
+	S32 region_y;
+	S32 region_z;
+
+	// If the region position is zero, grab position from the global
+	if(mPosRegion.isExactlyZero())
+	{
+		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
+		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
+		region_z = llround(parcel_data.global_z);
+	}
+	else
+	{
+		region_x = llround(mPosRegion.mV[VX]);
+		region_y = llround(mPosRegion.mV[VY]);
+		region_z = llround(mPosRegion.mV[VZ]);
+	}
+
+	if (mInfoType == CREATE_LANDMARK)
+	{
+		if (parcel_data.name.empty())
+		{
+			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
+								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
+		}
+		else
+		{
+			mTitleEditor->setText(parcel_data.name);
+		}
+
+		std::string desc;
+		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
+		mNotesEditor->setText(desc);
+
+		if (!LLLandmarkActions::landmarkAlreadyExists())
+		{
+			createLandmark(mFolderCombo->getValue().asUUID());
+		}
+	}
+}
+
+void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
+{
+	if (!pItem)
+		return;
+
+	if(!gCacheName)
+		return;
+
+	const LLPermissions& perm = pItem->getPermissions();
+
+	//////////////////
+	// CREATOR NAME //
+	//////////////////
+	if (pItem->getCreatorUUID().notNull())
+	{
+		std::string name;
+		LLUUID creator_id = pItem->getCreatorUUID();
+		if (!gCacheName->getFullName(creator_id, name))
+		{
+			gCacheName->get(creator_id, FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
+		}
+		mCreator->setText(name);
+	}
+	else
+	{
+		mCreator->setText(getString("unknown"));
+	}
+
+	////////////////
+	// OWNER NAME //
+	////////////////
+	if(perm.isOwned())
+	{
+		std::string name;
+		if (perm.isGroupOwned())
+		{
+			LLUUID group_id = perm.getGroup();
+			if (!gCacheName->getGroupName(group_id, name))
+			{
+				gCacheName->get(group_id, TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		else
+		{
+			LLUUID owner_id = perm.getOwner();
+			if (!gCacheName->getFullName(owner_id, name))
+			{
+				gCacheName->get(owner_id, FALSE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			}
+		}
+		mOwner->setText(name);
+	}
+	else
+	{
+		mOwner->setText(getString("public"));
+	}
+
+	//////////////////
+	// ACQUIRE DATE //
+	//////////////////
+	time_t time_utc = pItem->getCreationDate();
+	if (0 == time_utc)
+	{
+		mCreated->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) time_utc;
+		LLStringUtil::format (timeStr, substitution);
+		mCreated->setText(timeStr);
+	}
+
+	mTitleEditor->setText(pItem->getName());
+	mNotesEditor->setText(pItem->getDescription());
+}
+
+void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled)
+{
+	// If switching to edit mode while creating landmark
+	// the "Create Landmark" title remains.
+	if (enabled && mInfoType != CREATE_LANDMARK)
+	{
+		mTitle->setText(getString("title_edit_landmark"));
+	}
+	else
+	{
+		mTitle->setText(mCurrentTitle);
+	}
+
+	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
+	{
+		mTitleEditor->setEnabled(enabled);
+		mNotesEditor->setReadOnly(!enabled);
+		mFolderCombo->setVisible(enabled);
+		getChild<LLTextBox>("folder_label")->setVisible(enabled);
+
+		// HACK: To change the text color in a text editor
+		// when it was enabled/disabled we set the text once again.
+		mNotesEditor->setText(mNotesEditor->getText());
+	}
+}
+
+const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const
+{
+	return mTitleEditor->getText();
+}
+
+const std::string LLPanelLandmarkInfo::getLandmarkNotes() const
+{
+	return mNotesEditor->getText();
+}
+
+const LLUUID LLPanelLandmarkInfo::getLandmarkFolder() const
+{
+	return mFolderCombo->getValue().asUUID();
+}
+
+BOOL LLPanelLandmarkInfo::setLandmarkFolder(const LLUUID& id)
+{
+	return mFolderCombo->setCurrentByID(id);
+}
+
+void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)
+{
+	std::string name = mTitleEditor->getText();
+	std::string desc = mNotesEditor->getText();
+
+	LLStringUtil::trim(name);
+	LLStringUtil::trim(desc);
+
+	// If typed name is empty use the parcel name instead.
+	if (name.empty())
+	{
+		name = mParcelName->getText();
+
+		// If no parcel exists use the region name instead.
+		if (name.empty())
+		{
+			name = mRegionName->getText();
+		}
+	}
+
+	LLStringUtil::replaceChar(desc, '\n', ' ');
+	// If no folder chosen use the "Landmarks" folder.
+	LLLandmarkActions::createLandmarkHere(name, desc,
+		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK));
+}
+
+// static
+std::string LLPanelLandmarkInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
+{
+	std::string name = cat->getName();
+	LLUUID parent_id;
+
+	// translate category name, if it's right below the root
+	// FIXME: it can throw notification about non existent string in strings.xml
+	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
+	{
+		LLTrans::findString(name, "InvFolder " + name);
+	}
+
+	// we don't want "My Inventory" to appear in the name
+	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
+	{
+		cat = gInventory.getCategory(parent_id);
+		name = cat->getName() + "/" + name;
+	}
+
+	return name;
+}
+
+void LLPanelLandmarkInfo::populateFoldersList()
+{
+	// Collect all folders that can contain landmarks.
+	LLInventoryModel::cat_array_t cats;
+	collectLandmarkFolders(cats);
+
+	mFolderCombo->removeall();
+
+	// Put the "Landmarks" folder first in list.
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
+	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
+	if (!cat)
+	{
+		llwarns << "Cannot find the landmarks folder" << llendl;
+	}
+	std::string cat_full_name = getFullFolderName(cat);
+	mFolderCombo->add(cat_full_name, cat->getUUID());
+
+	typedef std::vector<folder_pair_t> folder_vec_t;
+	folder_vec_t folders;
+	// Sort the folders by their full name.
+	for (S32 i = 0; i < cats.count(); i++)
+	{
+		cat = cats.get(i);
+		cat_full_name = getFullFolderName(cat);
+		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
+	}
+	sort(folders.begin(), folders.end(), cmp_folders);
+
+	// Finally, populate the combobox.
+	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
+		mFolderCombo->add(it->second, LLSD(it->first));
+}
+
+static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
+{
+	return left.second < right.second;
+}
+
+static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
+{
+	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
+
+	// Add descendent folders of the "Landmarks" category.
+	LLInventoryModel::item_array_t items; // unused
+	LLIsType is_category(LLAssetType::AT_CATEGORY);
+	gInventory.collectDescendentsIf(
+		landmarks_id,
+		cats,
+		items,
+		LLInventoryModel::EXCLUDE_TRASH,
+		is_category);
+
+	// Add the "My Favorites" category.
+	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
+	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
+	if (!favorites_cat)
+	{
+		llwarns << "Cannot find the favorites folder" << llendl;
+	}
+	else
+	{
+		cats.put(favorites_cat);
+	}
+}
diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..73e0ddb9cc989d58872c7159916f5d77e5cf4b9b
--- /dev/null
+++ b/indra/newview/llpanellandmarkinfo.h
@@ -0,0 +1,85 @@
+/**
+ * @file llpanellandmarkinfo.h
+ * @brief Displays landmark info in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELLANDMARKINFO_H
+#define LL_LLPANELLANDMARKINFO_H
+
+#include "llpanelplaceinfo.h"
+
+class LLComboBox;
+class LLLineEditor;
+class LLTextEditor;
+
+class LLPanelLandmarkInfo : public LLPanelPlaceInfo
+{
+public:
+	LLPanelLandmarkInfo();
+	/*virtual*/ ~LLPanelLandmarkInfo();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
+	// Displays landmark owner, creator and creation date info.
+	void displayItemInfo(const LLInventoryItem* pItem);
+
+	void toggleLandmarkEditMode(BOOL enabled);
+
+	const std::string& getLandmarkTitle() const;
+	const std::string getLandmarkNotes() const;
+	const LLUUID getLandmarkFolder() const;
+
+	// Select current landmark folder in combobox.
+	BOOL setLandmarkFolder(const LLUUID& id);
+
+	// Create a landmark for the current location
+	// in a folder specified by folder_id.
+	void createLandmark(const LLUUID& folder_id);
+
+	static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
+
+private:
+	void populateFoldersList();
+
+	LLTextBox*			mOwner;
+	LLTextBox*			mCreator;
+	LLTextBox*			mCreated;
+	LLLineEditor*		mTitleEditor;
+	LLTextEditor*		mNotesEditor;
+	LLComboBox*			mFolderCombo;
+};
+
+#endif // LL_LLPANELLANDMARKINFO_H
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c9598a2576892f972a11802348289035b0e5b334..ce1a7f98df946dde8dd902ac451a6b775594daff 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -47,6 +47,7 @@
 #include "lldndbutton.h"
 #include "llfloaterworldmap.h"
 #include "llfolderviewitem.h"
+#include "llinventorypanel.h"
 #include "llinventorysubtreepanel.h"
 #include "lllandmarkactions.h"
 #include "llplacesinventorybridge.h"
@@ -100,6 +101,8 @@ BOOL LLLandmarksPanel::postBuild()
 	initLandmarksInventroyPanel();
 	initMyInventroyPanel();
 	initLibraryInventroyPanel();
+	getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true);
+	getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true);
 
 	gIdleCallbacks.addFunction(LLLandmarksPanel::doIdle, this);
 	return TRUE;
@@ -264,7 +267,7 @@ LLLandmark* LLLandmarksPanel::getCurSelectedLandmark() const
 	return NULL;
 }
 
-LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem () const 
+LLFolderViewItem* LLLandmarksPanel::getCurSelectedItem() const 
 {
 	return mCurrentSelectedList ?  mCurrentSelectedList->getRootFolder()->getCurSelectedItem() : NULL;
 }
@@ -421,6 +424,7 @@ void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLIn
 	mAccordionTabs.push_back(accordion_tab);
 	accordion_tab->setDropDownStateChangedCallback(
 		boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list));
+	accordion_tab->setDisplayChildren(false);
 }
 
 void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list)
@@ -495,6 +499,7 @@ void LLLandmarksPanel::updateListCommands()
 	// keep Options & Add Landmark buttons always enabled
 	mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
 	mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
+	mListCommands->childSetEnabled(OPTIONS_BUTTON_NAME,getCurSelectedItem() != NULL);
 }
 
 void LLLandmarksPanel::onActionsButtonClick()
@@ -552,14 +557,16 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
 	std::string command_name = userdata.asString();
 	if("add_landmark" == command_name)
 	{
-		if(LLLandmarkActions::landmarkAlreadyExists())
+		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
+		if(landmark)
+		{
+			LLSideTray::getInstance()->showPanel("panel_places", 
+								LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
+		}
+		else
 		{
-			std::string location;
-			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
-			llwarns<<" Landmark already exists at location:  "<< location<<llendl;
-			return;
+			LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 		}
-		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
 	} 
 	else if ("category" == command_name)
 	{
@@ -583,7 +590,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
 			menu_create_inventory_item(mCurrentSelectedList->getRootFolder(),
 					dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD(
 							"category"), gInventory.findCategoryUUIDForType(
-							LLAssetType::AT_LANDMARK));
+							LLFolderType::FT_LANDMARK));
 		}
 	}
 }
@@ -823,17 +830,18 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co
 	// then ask LLFolderView permissions
 	if (can_be_modified)
 	{
+		LLFolderViewItem* selected =  getCurSelectedItem();
 		if ("cut" == command_name)
 		{
 			can_be_modified = mCurrentSelectedList->getRootFolder()->canCut();
 		}
 		else if ("rename" == command_name)
 		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRenameable();
+			can_be_modified = selected? selected->getListener()->isItemRenameable() : false;
 		}
 		else if ("delete" == command_name)
 		{
-			can_be_modified = getCurSelectedItem()->getListener()->isItemRemovable();
+			can_be_modified = selected? selected->getListener()->isItemRemovable(): false;
 		}
 		else if("paste" == command_name)
 		{
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 0e7abb486501fbccc224c0e1c2235701f83f938e..745f9364c225327ec55cc738a53f242655127d51 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -69,7 +69,7 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
 	bool isLandmarkSelected() const;
 	bool isReceivedFolderSelected() const;
 	LLLandmark* getCurSelectedLandmark() const;
-	LLFolderViewItem* getCurSelectedItem () const;
+	LLFolderViewItem* getCurSelectedItem() const;
 	void updateSortOrder(LLInventoryPanel* panel, bool byDate);
 
 	//LLRemoteParcelInfoObserver interface
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 24e76e2c6e0e64c8282e5e7d4bd842a0c5bb8ee6..5d826f0a561c895cc1c0e99ff12915c46db17266 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -198,7 +198,16 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	//leave room for the login menu bar
 	setRect(LLRect(0, rect.getHeight()-18, rect.getWidth(), 0)); 
 #endif
-	reshape(rect.getWidth(), rect.getHeight());
+	// Legacy login web page is hidden under the menu bar.
+	// Adjust reg-in-client web browser widget to not be hidden.
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		reshape(rect.getWidth(), rect.getHeight() - MENU_BAR_HEIGHT);
+	}
+	else
+	{
+		reshape(rect.getWidth(), rect.getHeight());
+	}
 
 #if !USE_VIEWER_AUTH
 	childSetPrevalidate("first_name_edit", LLLineEditor::prevalidatePrintableNoSpace);
@@ -234,9 +243,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 	childSetAction("connect_btn", onClickConnect, this);
 
-	setDefaultBtn("connect_btn");
-
-	// childSetAction("quit_btn", onClickQuit, this);
+	getChild<LLPanel>("login_widgets")->setDefaultBtn("connect_btn");
 
 	std::string channel = gSavedSettings.getString("VersionChannelName");
 	std::string version = llformat("%d.%d.%d (%d)",
@@ -267,19 +274,20 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	web_browser->setTabStop(FALSE);
 	// web_browser->navigateToLocalPage( "loading", "loading.html" );
 
-	// make links open in external browser
-	web_browser->setOpenInExternalBrowser( true );
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		// need to follow links in the internal browser
+		web_browser->setOpenInExternalBrowser( false );
 
-	// force the size to be correct (XML doesn't seem to be sufficient to do this) (with some padding so the other login screen doesn't show through)
-	LLRect htmlRect = getRect();
-#if USE_VIEWER_AUTH
-	htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY(), getRect().getWidth() + 6, getRect().getHeight());
-#else
-	htmlRect.setCenterAndSize( getRect().getCenterX() - 2, getRect().getCenterY() + 40, getRect().getWidth() + 6, getRect().getHeight() - 78 );
-#endif
-	web_browser->setRect( htmlRect );
-	web_browser->reshape( htmlRect.getWidth(), htmlRect.getHeight(), TRUE );
-	reshape( getRect().getWidth(), getRect().getHeight(), 1 );
+		getChild<LLView>("login_widgets")->setVisible(false);
+	}
+	else
+	{
+		// make links open in external browser
+		web_browser->setOpenInExternalBrowser( true );
+
+		reshapeBrowser();
+	}
 
 	// kick off a request to grab the url manually
 	gResponsePtr = LLIamHereLogin::build( this );
@@ -297,6 +305,27 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 }
 
+// force the size to be correct (XML doesn't seem to be sufficient to do this)
+// (with some padding so the other login screen doesn't show through)
+void LLPanelLogin::reshapeBrowser()
+{
+	LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
+	LLRect rect = gViewerWindow->getVirtualWindowRect();
+	LLRect html_rect;
+#if USE_VIEWER_AUTH
+	html_rect.setCenterAndSize( 
+		rect.getCenterX() - 2, rect.getCenterY(), 
+		rect.getWidth() + 6, rect.getHeight());
+#else
+	html_rect.setCenterAndSize(
+		rect.getCenterX() - 2, rect.getCenterY() + 40,
+		rect.getWidth() + 6, rect.getHeight() - 78 );
+#endif
+	web_browser->setRect( html_rect );
+	web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
+	reshape( rect.getWidth(), rect.getHeight(), 1 );
+}
+
 void LLPanelLogin::setSiteIsAlive( bool alive )
 {
 	LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
@@ -384,10 +413,14 @@ void LLPanelLogin::draw()
 		if ( mHtmlAvailable )
 		{
 #if !USE_VIEWER_AUTH
-			// draw a background box in black
-			gl_rect_2d( 0, height - 264, width, 264, LLColor4( 0.0f, 0.0f, 0.0f, 1.f ) );
-			// draw the bottom part of the background image - just the blue background to the native client UI
-			mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
+			if (getChild<LLView>("login_widgets")->getVisible())
+			{
+				// draw a background box in black
+				gl_rect_2d( 0, height - 264, width, 264, LLColor4::black );
+				// draw the bottom part of the background image
+				// just the blue background to the native client UI
+				mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight());
+			}
 #endif
 		}
 		else
@@ -418,12 +451,6 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
 		return TRUE;
 	}
 
-	if (KEY_RETURN == key && MASK_NONE == mask)
-	{
-		// let the panel handle UICtrl processing: calls onClickConnect()
-		return LLPanel::handleKeyHere(key, mask);
-	}
-
 	return LLPanel::handleKeyHere(key, mask);
 }
 
@@ -483,6 +510,19 @@ void LLPanelLogin::giveFocus()
 #endif
 }
 
+// static
+void LLPanelLogin::showLoginWidgets()
+{
+	sInstance->childSetVisible("login_widgets", true);
+	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
+	web_browser->setOpenInExternalBrowser( true );
+	sInstance->reshapeBrowser();
+	// *TODO: Append all the usual login parameters, like first_login=Y etc.
+	std::string splash_screen_url = sInstance->getString("real_url");
+	web_browser->navigateTo( splash_screen_url, "text/html" );
+	LLUICtrl* first_name_edit = sInstance->getChild<LLUICtrl>("first_name_edit");
+	first_name_edit->setFocus(TRUE);
+}
 
 // static
 void LLPanelLogin::show(const LLRect &rect,
@@ -797,8 +837,17 @@ void LLPanelLogin::loadLoginPage()
 	
 	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
 	
-	// navigate to the "real" page 
-	web_browser->navigateTo( oStr.str(), "text/html" );
+	// navigate to the "real" page
+	if (gSavedSettings.getBOOL("RegInClient"))
+	{
+		web_browser->setFocus(TRUE);
+		login_page = sInstance->getString("reg_in_client_url");
+		web_browser->navigateTo(login_page, "text/html");
+	}
+	else
+	{
+		web_browser->navigateTo( oStr.str(), "text/html" );
+	}
 }
 
 void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event)
@@ -883,22 +932,6 @@ void LLPanelLogin::onClickNewAccount(void*)
 }
 
 
-// *NOTE: This function is dead as of 2008 August.  I left it here in case
-// we suddenly decide to put the Quit button back. JC
-// static
-void LLPanelLogin::onClickQuit(void*)
-{
-	if (sInstance && sInstance->mCallback)
-	{
-		// tell the responder we're not here anymore
-		if ( gResponsePtr )
-			gResponsePtr->setParent( 0 );
-
-		sInstance->mCallback(1, sInstance->mCallbackData);
-	}
-}
-
-
 // static
 void LLPanelLogin::onClickVersion(void*)
 {
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 5692b8d345a392365c75deea1dc1e3364799c4a2..acb2001c22f186ede7afec2017c6b062cdbc45a0 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -56,6 +56,10 @@ class LLPanelLogin:
 	virtual void draw();
 	virtual void setFocus( BOOL b );
 
+	// Show the XUI first name, last name, and password widgets.  They are
+	// hidden on startup for reg-in-client
+	static void showLoginWidgets();
+
 	static void show(const LLRect &rect, BOOL show_server, 
 		void (*callback)(S32 option, void* user_data), 
 		void* callback_data);
@@ -86,10 +90,10 @@ class LLPanelLogin:
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 
 private:
+	void reshapeBrowser();
 	static void onClickConnect(void*);
 	static void onClickNewAccount(void*);
 //	static bool newAccountAlertCallback(const LLSD& notification, const LLSD& response);
-	static void onClickQuit(void*);
 	static void onClickVersion(void*);
 	static void onClickForgotPassword(void*);
 	static void onPassKey(LLLineEditor* caller, void* user_data);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..15a75cb93063e3a06186a6b83430d3ecfe2e0757
--- /dev/null
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -0,0 +1,1025 @@
+/** 
+ * @file llsidepanelmaininventory.cpp
+ * @brief Implementation of llsidepanelmaininventory.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llpanelmaininventory.h"
+
+#include "lldndbutton.h"
+#include "llfilepicker.h"
+#include "llfloaterinventory.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventorypanel.h"
+#include "llfiltereditor.h"
+#include "llfloaterreg.h"
+#include "llpreviewtexture.h"
+#include "llscrollcontainer.h"
+#include "llsdserialize.h"
+#include "llspinctrl.h"
+#include "lltooldraganddrop.h"
+#include "llviewermenu.h"
+#include "llviewertexturelist.h"
+
+static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
+
+void on_file_loaded_for_save(BOOL success, 
+							 LLViewerFetchedTexture *src_vi,
+							 LLImageRaw* src, 
+							 LLImageRaw* aux_src, 
+							 S32 discard_level,
+							 BOOL final,
+							 void* userdata);
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+class LLFloaterInventoryFinder : public LLFloater
+{
+public:
+	LLFloaterInventoryFinder( LLPanelMainInventory* inventory_view);
+	virtual void draw();
+	/*virtual*/	BOOL	postBuild();
+	void changeFilter(LLInventoryFilter* filter);
+	void updateElementsFromFilter();
+	BOOL getCheckShowEmpty();
+	BOOL getCheckSinceLogoff();
+
+	static void onTimeAgo(LLUICtrl*, void *);
+	static void onCheckSinceLogoff(LLUICtrl*, void *);
+	static void onCloseBtn(void* user_data);
+	static void selectAllTypes(void* user_data);
+	static void selectNoTypes(void* user_data);
+private:
+	LLPanelMainInventory*	mPanelMainInventory;
+	LLSpinCtrl*			mSpinSinceDays;
+	LLSpinCtrl*			mSpinSinceHours;
+	LLInventoryFilter*	mFilter;
+};
+
+///----------------------------------------------------------------------------
+/// LLPanelMainInventory
+///----------------------------------------------------------------------------
+
+LLPanelMainInventory::LLPanelMainInventory()
+	: LLPanel(),
+	  mActivePanel(NULL),
+	  mSavedFolderState(NULL),
+	  mFilterText(""),
+	  mMenuGearDefault(NULL),
+	  mMenuAdd(NULL)
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_INIT);
+	// Menu Callbacks (non contex menus)
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2));
+ 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));
+	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));
+	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
+	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
+
+	// Controls
+	// *TODO: Just use persistant settings for each of these
+	U32 sort_order = gSavedSettings.getU32("InventorySortOrder");
+	BOOL sort_by_name = ! ( sort_order & LLInventoryFilter::SO_DATE );
+	BOOL sort_folders_by_name = ( sort_order & LLInventoryFilter::SO_FOLDERS_BY_NAME );
+	BOOL sort_system_folders_to_top = ( sort_order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP );
+	
+	gSavedSettings.declareBOOL("Inventory.SortByName", sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SortByDate", !sort_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.FoldersAlwaysByName", sort_folders_by_name, "Declared in code", FALSE);
+	gSavedSettings.declareBOOL("Inventory.SystemFoldersToTop", sort_system_folders_to_top, "Declared in code", FALSE);
+	
+	mSavedFolderState = new LLSaveFolderState();
+	mSavedFolderState->setApply(FALSE);
+}
+
+BOOL LLPanelMainInventory::postBuild()
+{
+	gInventory.addObserver(this);
+	
+	mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
+	mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
+	
+	//panel->getFilter()->markDefault();
+
+	// Set up the default inv. panel/filter settings.
+	mActivePanel = getChild<LLInventoryPanel>("All Items");
+	if (mActivePanel)
+	{
+		// "All Items" is the previous only view, so it gets the InventorySortOrder
+		mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
+		mActivePanel->getFilter()->markDefault();
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2));
+	}
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		recent_items_panel->setSinceLogoff(TRUE);
+		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
+		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+		recent_items_panel->getFilter()->markDefault();
+		recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2));
+	}
+
+	// Now load the stored settings from disk, if available.
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
+	llifstream file(filterSaveName.str());
+	LLSD savedFilterState;
+	if (file.is_open())
+	{
+		LLSDSerialize::fromXML(savedFilterState, file);
+		file.close();
+
+		// Load the persistent "Recent Items" settings.
+		// Note that the "All Items" settings do not persist.
+		if(recent_items_panel)
+		{
+			if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
+			{
+				LLSD recent_items = savedFilterState.get(
+					recent_items_panel->getFilter()->getName());
+				recent_items_panel->getFilter()->fromLLSD(recent_items);
+			}
+		}
+
+	}
+
+	mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
+	if (mFilterEditor)
+	{
+		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
+	}
+
+	// *TODO:Get the cost info from the server
+	const std::string upload_cost("10");
+	childSetLabelArg("Upload Image", "[COST]", upload_cost);
+	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
+	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
+	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
+
+	initListCommandsHandlers();
+	return TRUE;
+}
+
+void LLPanelMainInventory::initListCommandsHandlers()
+{
+	mListCommands = getChild<LLPanel>("bottom_panel");
+
+	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
+	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
+	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
+	/*
+	mListCommands->getChild<LLButton>("add_btn")->setHeldDownCallback(boost::bind(&LLPanelMainInventory::onAddButtonHeldDown, this));
+	static const LLSD add_landmark_command("add_landmark");
+	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddAction, this, add_landmark_command));
+	*/
+
+	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
+	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
+			,	_4 // BOOL drop
+			,	_5 // EDragAndDropType cargo_type
+			,	_7 // EAcceptance* accept
+			));
+
+	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
+	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
+	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	
+}
+
+// Destroys the object
+LLPanelMainInventory::~LLPanelMainInventory( void )
+{
+	// Save the filters state.
+	LLSD filterRoot;
+	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
+	if (all_items_panel)
+	{
+		LLInventoryFilter* filter = all_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
+	if (recent_items_panel)
+	{
+		LLInventoryFilter* filter = recent_items_panel->getFilter();
+		if (filter)
+		{
+			LLSD filterState;
+			filter->toLLSD(filterState);
+			filterRoot[filter->getName()] = filterState;
+		}
+	}
+
+	std::ostringstream filterSaveName;
+	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+	llofstream filtersFile(filterSaveName.str());
+	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
+	{
+		llwarns << "Could not write to filters save file " << filterSaveName << llendl;
+	}
+	else
+		filtersFile.close();
+
+	gInventory.removeObserver(this);
+	delete mSavedFolderState;
+}
+
+void LLPanelMainInventory::startSearch()
+{
+	// this forces focus to line editor portion of search editor
+	if (mFilterEditor)
+	{
+		mFilterEditor->focusFirstItem(TRUE);
+	}
+}
+
+BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
+{
+	LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : NULL;
+	if (root_folder)
+	{
+		// first check for user accepting current search results
+		if (mFilterEditor 
+			&& mFilterEditor->hasFocus()
+		    && (key == KEY_RETURN 
+		    	|| key == KEY_DOWN)
+		    && mask == MASK_NONE)
+		{
+			// move focus to inventory proper
+			mActivePanel->setFocus(TRUE);
+			root_folder->scrollToShowSelection();
+			return TRUE;
+		}
+
+		if (mActivePanel->hasFocus() && key == KEY_UP)
+		{
+			startSearch();
+		}
+	}
+
+	return LLPanel::handleKeyHere(key, mask);
+
+}
+
+//----------------------------------------------------------------------------
+// menu callbacks
+
+void LLPanelMainInventory::doToSelected(const LLSD& userdata)
+{
+	getPanel()->getRootFolder()->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelMainInventory::closeAllFolders()
+{
+	getPanel()->getRootFolder()->closeAllFolders();
+}
+
+void LLPanelMainInventory::newWindow()
+{
+	LLFloaterInventory::showAgentInventory();
+}
+
+void LLPanelMainInventory::doCreate(const LLSD& userdata)
+{
+	menu_create_inventory_item(getPanel()->getRootFolder(), NULL, userdata);
+}
+
+void LLPanelMainInventory::resetFilters()
+{
+	LLFloaterInventoryFinder *finder = getFinder();
+	getActivePanel()->getFilter()->resetDefault();
+	if (finder)
+	{
+		finder->updateElementsFromFilter();
+	}
+
+	setFilterTextFromFilter();
+}
+
+void LLPanelMainInventory::setSortBy(const LLSD& userdata)
+{
+	std::string sort_field = userdata.asString();
+	if (sort_field == "name")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
+			
+		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
+	}
+	else if (sort_field == "date")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
+
+		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
+		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
+	}
+	else if (sort_field == "foldersalwaysbyname")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_FOLDERS_BY_NAME )
+		{
+			order &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
+
+			gSavedSettings.setBOOL("Inventory.FoldersAlwaysByName", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+	else if (sort_field == "systemfolderstotop")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		if ( order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
+		{
+			order &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", FALSE );
+		}
+		else
+		{
+			order |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+
+			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
+		}
+		getActivePanel()->setSortOrder( order );
+	}
+}
+
+// static
+BOOL LLPanelMainInventory::filtersVisible(void* user_data)
+{
+	LLPanelMainInventory* self = (LLPanelMainInventory*)user_data;
+	if(!self) return FALSE;
+
+	return self->getFinder() != NULL;
+}
+
+void LLPanelMainInventory::onClearSearch()
+{
+	LLFloater *finder = getFinder();
+	if (mActivePanel)
+	{
+		mActivePanel->setFilterSubString(LLStringUtil::null);
+		mActivePanel->setFilterTypes(0xffffffff);
+	}
+
+	if (finder)
+	{
+		LLFloaterInventoryFinder::selectAllTypes(finder);
+	}
+
+	// re-open folders that were initially open
+	if (mActivePanel)
+	{
+		mSavedFolderState->setApply(TRUE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+		LLOpenFoldersWithSelection opener;
+		mActivePanel->getRootFolder()->applyFunctorRecursively(opener);
+		mActivePanel->getRootFolder()->scrollToShowSelection();
+	}
+}
+
+void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
+{
+	if (search_string == "")
+	{
+		onClearSearch();
+	}
+	if (!mActivePanel)
+	{
+		return;
+	}
+
+	gInventory.startBackgroundFetch();
+
+	std::string uppercase_search_string = search_string;
+	LLStringUtil::toUpper(uppercase_search_string);
+	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
+	{
+			// current filter and new filter empty, do nothing
+			return;
+	}
+
+	// save current folder open state if no filter currently applied
+	if (!mActivePanel->getRootFolder()->isFilterModified())
+	{
+		mSavedFolderState->setApply(FALSE);
+		mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
+	}
+
+	// set new filter string
+	mActivePanel->setFilterSubString(uppercase_search_string);
+}
+
+
+ //static
+ BOOL LLPanelMainInventory::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
+ {
+ 	LLPanelMainInventory* active_view = NULL;
+	
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLPanelMainInventory* iv = dynamic_cast<LLPanelMainInventory*>(*iter);
+		if (iv)
+		{
+			if (gFocusMgr.childHasKeyboardFocus(iv))
+			{
+				active_view = iv;
+				break;
+			}
+ 		}
+ 	}
+
+ 	if (!active_view)
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	std::string search_string(find_text);
+
+ 	if (search_string.empty())
+ 	{
+ 		return FALSE;
+ 	}
+
+ 	if (active_view->getPanel() &&
+ 		active_view->getPanel()->getRootFolder()->search(first_item, search_string, backward))
+ 	{
+ 		return TRUE;
+ 	}
+
+ 	return FALSE;
+ }
+
+void LLPanelMainInventory::onFilterSelected()
+{
+	// Find my index
+	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
+
+	if (!mActivePanel)
+	{
+		return;
+	}
+	LLInventoryFilter* filter = mActivePanel->getFilter();
+	LLFloaterInventoryFinder *finder = getFinder();
+	if (finder)
+	{
+		finder->changeFilter(filter);
+	}
+	if (filter->isActive())
+	{
+		// If our filter is active we may be the first thing requiring a fetch so we better start it here.
+		gInventory.startBackgroundFetch();
+	}
+	setFilterTextFromFilter();
+}
+
+const std::string LLPanelMainInventory::getFilterSubString() 
+{ 
+	return mActivePanel->getFilterSubString(); 
+}
+
+void LLPanelMainInventory::setFilterSubString(const std::string& string) 
+{ 
+	mActivePanel->setFilterSubString(string); 
+}
+
+BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+										 EDragAndDropType cargo_type,
+										 void* cargo_data,
+										 EAcceptance* accept,
+										 std::string& tooltip_msg)
+{
+	// Check to see if we are auto scrolling from the last frame
+	LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
+	BOOL needsToScroll = panel->getScrollableContainer()->autoScroll(x, y);
+	if(mFilterTabs)
+	{
+		if(needsToScroll)
+		{
+			mFilterTabs->startDragAndDropDelayTimer();
+		}
+	}
+	
+	BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+
+	return handled;
+}
+
+void LLPanelMainInventory::changed(U32 mask)
+{
+}
+
+
+void LLPanelMainInventory::setFilterTextFromFilter() 
+{ 
+	mFilterText = mActivePanel->getFilter()->getFilterText(); 
+}
+
+void LLPanelMainInventory::toggleFindOptions()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_VIEW_TOGGLE);
+	LLFloater *floater = getFinder();
+	if (!floater)
+	{
+		LLFloaterInventoryFinder * finder = new LLFloaterInventoryFinder(this);
+		mFinderHandle = finder->getHandle();
+		finder->openFloater();
+
+		LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+		if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel
+			parent_floater->addDependentFloater(mFinderHandle);
+		// start background fetch of folders
+		gInventory.startBackgroundFetch();
+	}
+	else
+	{
+		floater->closeFloater();
+	}
+}
+
+void LLPanelMainInventory::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+{
+	getChild<LLInventoryPanel>("All Items")->setSelectCallback(cb);
+	getChild<LLInventoryPanel>("Recent Items")->setSelectCallback(cb);
+}
+
+void LLPanelMainInventory::onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action)
+{
+	updateListCommands();
+	panel->onSelectionChange(items, user_action);
+}
+
+///----------------------------------------------------------------------------
+/// LLFloaterInventoryFinder
+///----------------------------------------------------------------------------
+
+LLFloaterInventoryFinder* LLPanelMainInventory::getFinder() 
+{ 
+	return (LLFloaterInventoryFinder*)mFinderHandle.get();
+}
+
+
+LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :	
+	LLFloater(LLSD()),
+	mPanelMainInventory(inventory_view),
+	mFilter(inventory_view->getPanel()->getFilter())
+{
+	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
+	updateElementsFromFilter();
+}
+
+
+void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+
+	bool since_logoff= self->childGetValue("check_since_logoff");
+	
+	if (!since_logoff && 
+	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
+	{
+		self->mSpinSinceHours->set(1.0f);
+	}	
+}
+BOOL LLFloaterInventoryFinder::postBuild()
+{
+	const LLRect& viewrect = mPanelMainInventory->getRect();
+	setRect(LLRect(viewrect.mLeft - getRect().getWidth(), viewrect.mTop, viewrect.mLeft, viewrect.mTop - getRect().getHeight()));
+
+	childSetAction("All", selectAllTypes, this);
+	childSetAction("None", selectNoTypes, this);
+
+	mSpinSinceHours = getChild<LLSpinCtrl>("spin_hours_ago");
+	childSetCommitCallback("spin_hours_ago", onTimeAgo, this);
+
+	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
+	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
+
+	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
+	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
+
+	childSetAction("Close", onCloseBtn, this);
+
+	updateElementsFromFilter();
+	return TRUE;
+}
+void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
+{
+	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
+	if (!self) return;
+	
+	bool since_logoff=true;
+	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
+	{
+		since_logoff = false;
+	}
+	self->childSetValue("check_since_logoff", since_logoff);
+}
+
+void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
+{
+	mFilter = filter;
+	updateElementsFromFilter();
+}
+
+void LLFloaterInventoryFinder::updateElementsFromFilter()
+{
+	if (!mFilter)
+		return;
+
+	// Get data needed for filter display
+	U32 filter_types = mFilter->getFilterTypes();
+	std::string filter_string = mFilter->getFilterSubString();
+	LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
+	U32 hours = mFilter->getHoursAgo();
+
+	// update the ui elements
+	setTitle(mFilter->getName());
+
+	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
+
+	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
+	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
+	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
+	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
+	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
+	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
+	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
+	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
+	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
+	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
+	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
+	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
+	mSpinSinceHours->set((F32)(hours % 24));
+	mSpinSinceDays->set((F32)(hours / 24));
+}
+
+void LLFloaterInventoryFinder::draw()
+{
+	LLMemType mt(LLMemType::MTYPE_INVENTORY_DRAW);
+	U32 filter = 0xffffffff;
+	BOOL filtered_by_all_types = TRUE;
+
+	if (!childGetValue("check_animation"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
+		filtered_by_all_types = FALSE;
+	}
+
+
+	if (!childGetValue("check_calling_card"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_clothing"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_gesture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_landmark"))
+
+
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LANDMARK);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_notecard"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_object"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
+		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_script"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_LSL);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_sound"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_texture"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!childGetValue("check_snapshot"))
+	{
+		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
+		filtered_by_all_types = FALSE;
+	}
+
+	if (!filtered_by_all_types)
+	{
+		// don't include folders in filter, unless I've selected everything
+		filter &= ~(0x1 << LLInventoryType::IT_CATEGORY);
+	}
+
+	// update the panel, panel will update the filter
+	mPanelMainInventory->getPanel()->setShowFolderState(getCheckShowEmpty() ?
+		LLInventoryFilter::SHOW_ALL_FOLDERS : LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+	mPanelMainInventory->getPanel()->setFilterTypes(filter);
+	if (getCheckSinceLogoff())
+	{
+		mSpinSinceDays->set(0);
+		mSpinSinceHours->set(0);
+	}
+	U32 days = (U32)mSpinSinceDays->get();
+	U32 hours = (U32)mSpinSinceHours->get();
+	if (hours > 24)
+	{
+		days += hours / 24;
+		hours = (U32)hours % 24;
+		mSpinSinceDays->set((F32)days);
+		mSpinSinceHours->set((F32)hours);
+	}
+	hours += days * 24;
+	mPanelMainInventory->getPanel()->setHoursAgo(hours);
+	mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
+	mPanelMainInventory->setFilterTextFromFilter();
+
+	LLPanel::draw();
+}
+
+BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
+{
+	return childGetValue("check_show_empty");
+}
+
+BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
+{
+	return childGetValue("check_since_logoff");
+}
+
+void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
+{
+	LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
+	finderp->closeFloater();
+}
+
+// static
+void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", TRUE);
+	self->childSetValue("check_calling_card", TRUE);
+	self->childSetValue("check_clothing", TRUE);
+	self->childSetValue("check_gesture", TRUE);
+	self->childSetValue("check_landmark", TRUE);
+	self->childSetValue("check_notecard", TRUE);
+	self->childSetValue("check_object", TRUE);
+	self->childSetValue("check_script", TRUE);
+	self->childSetValue("check_sound", TRUE);
+	self->childSetValue("check_texture", TRUE);
+	self->childSetValue("check_snapshot", TRUE);
+}
+
+//static
+void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
+{
+	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
+	if(!self) return;
+
+	self->childSetValue("check_animation", FALSE);
+	self->childSetValue("check_calling_card", FALSE);
+	self->childSetValue("check_clothing", FALSE);
+	self->childSetValue("check_gesture", FALSE);
+	self->childSetValue("check_landmark", FALSE);
+	self->childSetValue("check_notecard", FALSE);
+	self->childSetValue("check_object", FALSE);
+	self->childSetValue("check_script", FALSE);
+	self->childSetValue("check_sound", FALSE);
+	self->childSetValue("check_texture", FALSE);
+	self->childSetValue("check_snapshot", FALSE);
+}
+
+
+
+
+
+void LLPanelMainInventory::updateListCommands()
+{
+	bool trash_enabled = isActionEnabled("delete");
+
+	mListCommands->childSetEnabled("trash_btn", trash_enabled);
+}
+
+void LLPanelMainInventory::onGearButtonClick()
+{
+	showActionMenu(mMenuGearDefault,"options_gear_btn");
+}
+
+void LLPanelMainInventory::onAddButtonClick()
+{
+	showActionMenu(mMenuAdd,"add_btn");
+}
+
+void LLPanelMainInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
+{
+	if (menu)
+	{
+		menu->buildDrawLabels();
+		menu->updateParent(LLMenuGL::sMenuContainer);
+		LLView* spawning_view = getChild<LLView> (spawning_view_name);
+		S32 menu_x, menu_y;
+		//show menu in co-ordinates of panel
+		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
+		menu_y += menu->getRect().getHeight();
+		LLMenuGL::showPopup(this, menu, menu_x, menu_y);
+	}
+}
+
+void LLPanelMainInventory::onTrashButtonClick()
+{
+	onClipboardAction("delete");
+}
+
+void LLPanelMainInventory::onClipboardAction(const LLSD& userdata)
+{
+	std::string command_name = userdata.asString();
+	getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
+}
+
+void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
+{
+	if (!isActionEnabled(userdata))
+		return;
+
+	const std::string command_name = userdata.asString();
+	if (command_name == "new_window")
+	{
+		newWindow();
+	}
+	if (command_name == "sort_by_name")
+	{
+		const LLSD arg = "name";
+		setSortBy(arg);
+	}
+	if (command_name == "sort_by_recent")
+	{
+		const LLSD arg = "date";
+		setSortBy(arg);
+	}
+	if (command_name == "show_filters")
+	{
+		toggleFindOptions();
+	}
+	if (command_name == "reset_filters")
+	{
+		resetFilters();
+	}
+	if (command_name == "close_folders")
+	{
+		closeAllFolders();
+	}
+	if (command_name == "empty_trash")
+	{
+		const std::string notification = "ConfirmEmptyTrash";
+		gInventory.emptyFolderType(notification, LLFolderType::FT_TRASH);
+	}
+	if (command_name == "empty_lostnfound")
+	{
+		const std::string notification = "ConfirmEmptyLostAndFound";
+		gInventory.emptyFolderType(notification, LLFolderType::FT_LOST_AND_FOUND);
+	}
+	if (command_name == "save_texture")
+	{
+		LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+		if (!current_item)
+		{
+			return;
+		}
+
+		const LLUUID& item_id = current_item->getListener()->getUUID();
+		LLPreviewTexture* preview_texture = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item_id), TAKE_FOCUS_YES);
+		if (preview_texture)
+		{
+			preview_texture->openToSave();
+		}
+	}
+}
+
+BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+	if (command_name == "delete")
+	{
+		BOOL can_delete = FALSE;
+		LLFolderView *folder = getActivePanel()->getRootFolder();
+		if (folder)
+		{
+			can_delete = TRUE;
+			std::set<LLUUID> selection_set;
+			folder->getSelectionList(selection_set);
+			for (std::set<LLUUID>::iterator iter = selection_set.begin();
+				 iter != selection_set.end();
+				 ++iter)
+			{
+				const LLUUID &item_id = (*iter);
+				LLFolderViewItem *item = folder->getItemByID(item_id);
+				can_delete &= item->getListener()->isItemRemovable();
+			}
+			return can_delete;
+		}
+		return FALSE;
+	}
+	if (command_name == "save_texture")
+	{
+		LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
+		if (current_item)
+		{
+			return (current_item->getListener()->getInventoryType() == LLInventoryType::IT_TEXTURE);
+		}
+		return FALSE;
+	}
+	return TRUE;
+}
+
+bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
+{
+	*accept = ACCEPT_NO;
+
+	const bool is_enabled = isActionEnabled("delete");
+	if (is_enabled) *accept = ACCEPT_YES_MULTI;
+
+	if (is_enabled && drop)
+	{
+		onClipboardAction("delete");
+	}
+	return true;
+}
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
new file mode 100644
index 0000000000000000000000000000000000000000..29e9baa6cf2391a655aa29303287ccac625c15da
--- /dev/null
+++ b/indra/newview/llpanelmaininventory.h
@@ -0,0 +1,145 @@
+/** 
+ * @file llpanelmaininventory.h
+ * @brief llpanelmaininventory.h
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELMAININVENTORY_H
+#define LL_LLPANELMAININVENTORY_H
+
+#include "llpanel.h"
+#include "llinventorymodel.h"
+#include "llfolderview.h"
+
+class LLFolderViewItem;
+class LLInventoryPanel;
+class LLSaveFolderState;
+class LLFilterEditor;
+class LLTabContainer;
+class LLFloaterInventoryFinder;
+class LLMenuGL;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelMainInventory
+//
+// This is a panel used to view and control an agent's inventory,
+// including all the fixin's (e.g. AllItems/RecentItems tabs, filter floaters).
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelMainInventory : public LLPanel, LLInventoryObserver
+{
+public:
+	friend class LLFloaterInventoryFinder;
+
+	LLPanelMainInventory();
+	~LLPanelMainInventory();
+
+	BOOL postBuild();
+
+	virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+	// Inherited functionality
+	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+									   EDragAndDropType cargo_type,
+									   void* cargo_data,
+									   EAcceptance* accept,
+									   std::string& tooltip_msg);
+	/*virtual*/ void changed(U32 mask);
+
+	LLInventoryPanel* getPanel() { return mActivePanel; }
+	LLInventoryPanel* getActivePanel() { return mActivePanel; }
+	const LLInventoryPanel* getActivePanel() const { return mActivePanel; }
+
+	const std::string& getFilterText() const { return mFilterText; }
+	
+	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+
+protected:
+	//
+	// Misc functions
+	//
+	void setFilterTextFromFilter();
+	void startSearch();
+	
+	void toggleFindOptions();
+	void onSelectionChange(LLInventoryPanel *panel, const std::deque<LLFolderViewItem*>& items, BOOL user_action);
+
+	static BOOL filtersVisible(void* user_data);
+	void onClearSearch();
+	static void onFoldersByName(void *user_data);
+	static BOOL checkFoldersByName(void *user_data);
+	void onFilterEdit(const std::string& search_string );
+	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
+	void onFilterSelected();
+
+	const std::string getFilterSubString();
+	void setFilterSubString(const std::string& string);
+	
+	// menu callbacks
+	void doToSelected(const LLSD& userdata);
+	void closeAllFolders();
+	void newWindow();
+	void doCreate(const LLSD& userdata);
+	void resetFilters();
+	void setSortBy(const LLSD& userdata);
+	
+	// List Commands Handlers
+	void initListCommandsHandlers();
+	void updateListCommands();
+	void onGearButtonClick();
+	void onAddButtonClick();
+	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
+	void onTrashButtonClick();
+	void onClipboardAction(const LLSD& userdata);
+	BOOL isActionEnabled(const LLSD& command_name);
+	void onCustomAction(const LLSD& command_name);
+	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
+
+
+private:
+	LLFloaterInventoryFinder* getFinder();
+
+	LLFilterEditor*				mFilterEditor;
+	LLTabContainer*				mFilterTabs;
+	LLHandle<LLFloater>			mFinderHandle;
+	LLInventoryPanel*			mActivePanel;
+	LLSaveFolderState*			mSavedFolderState;
+
+	LLPanel*					mListCommands;
+	LLMenuGL*					mMenuGearDefault;
+	LLMenuGL*					mMenuAdd;
+
+	std::string					mFilterText;
+};
+
+#endif // LL_LLPANELMAININVENTORY_H
+
+
+
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index a198499b47ede597beb9122cb7e7abfe2bd49392..2cf56d557117d29d95b611d18c79a22d62be6a6c 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -1,453 +1,489 @@
-/**
- * @file llpanelmediasettingsgeneral.cpp
- * @brief LLPanelMediaSettingsGeneral class implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llagent.h"
-#include "llpanelmediasettingsgeneral.h"
-#include "llcombobox.h"
-#include "llcheckboxctrl.h"
-#include "llspinctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewerwindow.h"
-#include "llviewermedia.h"
-#include "llsdutil.h"
-#include "llselectmgr.h"
-#include "llbutton.h"
-#include "lltexturectrl.h"
-#include "llurl.h"
-#include "llwindow.h"
-#include "llmediaentry.h"
-#include "llmediactrl.h"
-#include "llpanelcontents.h"
-#include "llpermissions.h"
-#include "llpluginclassmedia.h"
-#include "llfloatermediasettings.h"
-#include "llfloatertools.h"
-#include "lltrans.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
-	mControls( NULL ),
-	mAutoLoop( NULL ),
-	mFirstClick( NULL ),
-	mAutoZoom( NULL ),
-	mAutoPlay( NULL ),
-	mAutoScale( NULL ),
-	mWidthPixels( NULL ),
-	mHeightPixels( NULL ),
-	mHomeURL( NULL ),
-	mCurrentURL( NULL ),
-	mParent( NULL ),
-	mMediaEditable(false)
-{
-	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml");
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-BOOL LLPanelMediaSettingsGeneral::postBuild()
-{
-	// connect member vars with UI widgets
-	mAutoLoop = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_LOOP_KEY );
-	mAutoPlay = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_PLAY_KEY );
-	mAutoScale = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_SCALE_KEY );
-	mAutoZoom = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_ZOOM_KEY );
-	mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
-	mCurrentURL = getChild< LLLineEditor >( LLMediaEntry::CURRENT_URL_KEY );
-	mFirstClick = getChild< LLCheckBoxCtrl >( LLMediaEntry::FIRST_CLICK_INTERACT_KEY );
-	mHeightPixels = getChild< LLSpinCtrl >( LLMediaEntry::HEIGHT_PIXELS_KEY );
-	mHomeURL = getChild< LLLineEditor >( LLMediaEntry::HOME_URL_KEY );
-	mWidthPixels = getChild< LLSpinCtrl >( LLMediaEntry::WIDTH_PIXELS_KEY );
-	mPreviewMedia = getChild<LLMediaCtrl>("preview_media");
-
-	// watch commit action for HOME URL
-	childSetCommitCallback( LLMediaEntry::HOME_URL_KEY, onCommitHomeURL, this);
-	childSetCommitCallback( "current_url_reset_btn",onBtnResetCurrentUrl, this);
-	// interrogates controls and updates widgets as required
-	updateMediaPreview();
-	updateCurrentURL();
-
-	return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// virtual
-LLPanelMediaSettingsGeneral::~LLPanelMediaSettingsGeneral()
-{
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::draw()
-{
-	// housekeeping
-	LLPanel::draw();
-
-	// enable/disable pixel values image entry based on auto scale checkbox 
-	if ( mAutoScale->getValue().asBoolean() == false )
-	{
-		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true );
-		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true );
-	}
-	else
-	{
-		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false );
-		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false );
-	};
-
-	// enable/disable UI based on type of media
-	bool reset_button_is_active = true;
-	if( mPreviewMedia )
-	{
-		LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
-		if( media_plugin )
-		{
-			// turn off volume (if we can) for preview. Note: this really only
-			// works for QuickTime movies right now - no way to control the 
-			// volume of a flash app embedded in a page for example
-			media_plugin->setVolume( 0 );
-
-			// some controls are only appropriate for time or browser type plugins
-			// so we selectively enable/disable them - need to do it in draw
-			// because the information from plugins arrives assynchronously
-			bool show_time_controls = media_plugin->pluginSupportsMediaTime();
-			if ( show_time_controls )
-			{
-				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false );
-				reset_button_is_active = false;
-				childSetEnabled( "current_url_label", false );
-				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true );
-			}
-			else
-			{
-				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true );
-				reset_button_is_active = true;
-				childSetEnabled( "current_url_label", true );
-				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false );
-			};
-		};
-	};
-
-	// current URL can change over time.
-//	updateCurrentURL();
-
-	LLPermissions perm;
-	bool user_can_press_reset = mMediaEditable;
-
-	// several places modify this widget so we must collect states in one place
-	if ( reset_button_is_active )
-	{
-		// user has perms to press reset button and it is active
-		if ( user_can_press_reset )
-		{
-			childSetEnabled( "current_url_reset_btn", true );
-		}
-		// user does not has perms to press reset button and it is active
-		else
-		{
-			childSetEnabled( "current_url_reset_btn", false );
-		};
-	}
-	else
-	// reset button is inactive so we just slam it to off - other states don't matter
-	{
-		childSetEnabled( "current_url_reset_btn", false );
-	};
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static 
-void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
-{	
-	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->mAutoLoop->clear();
-	self->mAutoPlay->clear();
-	self->mAutoScale->clear();
-	self->mAutoZoom ->clear();
-	self->mControls->clear();
-	self->mCurrentURL->clear();
-	self->mFirstClick->clear();
-	self->mHeightPixels->clear();
-	self->mHomeURL->clear();
-	self->mWidthPixels->clear();
-	self->mAutoLoop ->setEnabled(editable);
-	self->mAutoPlay ->setEnabled(editable);
-	self->mAutoScale ->setEnabled(editable);
-	self->mAutoZoom  ->setEnabled(editable);
-	self->mControls ->setEnabled(editable);
-	self->mCurrentURL ->setEnabled(editable);
-	self->mFirstClick ->setEnabled(editable);
-	self->mHeightPixels ->setEnabled(editable);
-	self->mHomeURL ->setEnabled(editable);
-	self->mWidthPixels ->setEnabled(editable);
-	self->updateMediaPreview();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static 
-void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable)
-{
-	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->mMediaEditable = editable;
-
-	//llinfos << "---------------" << llendl;
-	//llinfos << ll_pretty_print_sd(media_settings) << llendl;
-	//llinfos << "---------------" << llendl;
-
-	// IF all the faces have media (or all dont have media)
-	if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
-	{
-		if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) 
-		{
-			self->clearValues(self, self->mMediaEditable);
-			// only show multiple 
-			self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
-			return;
-		}
-		
-	}
-	else
-	{
-		if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) 
-		{
-			self->clearValues(self, self->mMediaEditable);
-			// only show multiple 
-			self->mHomeURL ->setText(LLTrans::getString("Multiple Media"));
-			return;
-		}			
-		
-	}
-	std::string base_key( "" );
-	std::string tentative_key( "" );
-
-	struct 
-	{
-		std::string key_name;
-		LLUICtrl* ctrl_ptr;
-		std::string ctrl_type;
-
-	} data_set [] = 
-	{ 
-        { LLMediaEntry::AUTO_LOOP_KEY,				self->mAutoLoop,		"LLCheckBoxCtrl" },
-		{ LLMediaEntry::AUTO_PLAY_KEY,				self->mAutoPlay,		"LLCheckBoxCtrl" },
-		{ LLMediaEntry::AUTO_SCALE_KEY,				self->mAutoScale,		"LLCheckBoxCtrl" },
-		{ LLMediaEntry::AUTO_ZOOM_KEY,				self->mAutoZoom,		"LLCheckBoxCtrl" },
-		{ LLMediaEntry::CONTROLS_KEY,				self->mControls,		"LLComboBox" },
-		{ LLMediaEntry::CURRENT_URL_KEY,			self->mCurrentURL,		"LLLineEditor" },
-		{ LLMediaEntry::HEIGHT_PIXELS_KEY,			self->mHeightPixels,	"LLSpinCtrl" },
-		{ LLMediaEntry::HOME_URL_KEY,				self->mHomeURL,			"LLLineEditor" },
-		{ LLMediaEntry::FIRST_CLICK_INTERACT_KEY,	self->mFirstClick,		"LLCheckBoxCtrl" },
-		{ LLMediaEntry::WIDTH_PIXELS_KEY,			self->mWidthPixels,		"LLSpinCtrl" },
-		{ "", NULL , "" }
-	};
-
-	for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
-	{
-		base_key = std::string( data_set[ i ].key_name );
-		tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
-		// TODO: CP - I bet there is a better way to do this using Boost
-		if ( media_settings[ base_key ].isDefined() )
-		{
-			if ( data_set[ i ].ctrl_type == "LLLineEditor" )
-			{
-				static_cast< LLLineEditor* >( data_set[ i ].ctrl_ptr )->
-					setText( media_settings[ base_key ].asString() );
-			}
-			else
-			if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
-				static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
-					setValue( media_settings[ base_key ].asBoolean() );
-			else
-			if ( data_set[ i ].ctrl_type == "LLComboBox" )
-				static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )->
-					setCurrentByIndex( media_settings[ base_key ].asInteger() );
-			else
-			if ( data_set[ i ].ctrl_type == "LLSpinCtrl" )
-				static_cast< LLSpinCtrl* >( data_set[ i ].ctrl_ptr )->
-					setValue( media_settings[ base_key ].asInteger() );
-
-			data_set[ i ].ctrl_ptr->setEnabled(self->mMediaEditable);
-			data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
-		};
-	};
-	
-	// interrogates controls and updates widgets as required
-	self->updateMediaPreview();
-	self->updateCurrentURL();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Helper to set media control to media URL as required
-void LLPanelMediaSettingsGeneral::updateMediaPreview()
-{
-	if ( mHomeURL->getValue().asString().length() > 0 )
-	{
-		mPreviewMedia->navigateTo( mHomeURL->getValue().asString() );
-	}
-	else
-	// new home URL will be empty if media is deleted so display a 
-	// "preview goes here" data url page
-	{
-		mPreviewMedia->navigateTo( "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E" );
-	};
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Helper to set current URL
-void LLPanelMediaSettingsGeneral::updateCurrentURL()
-{
-	if( mCurrentURL->getText().empty() )
-	{
-		childSetText( "current_url", mHomeURL->getText() );
-	}
-	
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// virtual
-void LLPanelMediaSettingsGeneral::onClose(bool app_quitting)
-{
-	if(mPreviewMedia)
-	{
-		mPreviewMedia->unloadMediaSource();
-	}
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdata )
-{
-	LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
-
-	// check url user is trying to enter for home URL will pass whitelist 
-	// and decline to accept it if it doesn't.
-	std::string home_url = self->mHomeURL->getValue().asString();
-	if ( ! self->mParent->passesWhiteList( home_url ) )
-	{
-		LLNotifications::instance().add("WhiteListInvalidatesHomeUrl");		
-		return;
-	};
-	
-	self->updateMediaPreview();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata)
-{
-	LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->navigateHomeSelectedFace();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsGeneral::apply( void* userdata )
-{
-	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
-	self->mHomeURL->onCommit();
-	// build LLSD Fragment
-	LLSD media_data_general;
-	self->getValues(media_data_general);
-
-	// this merges contents of LLSD passed in with what's there so this is ok
-	LLSelectMgr::getInstance()->selectionSetMediaData( media_data_general );
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
-{
-    fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue();
-    fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue();
-    fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue();
-    fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue();
-    fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex();
-    fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
-    fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue();
-    fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue();
-    fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue();
-    fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent )
-{
-	mParent = parent;
-};
-
-bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace()
-{
-	// HACK: This is directly referencing an impl name.  BAD!
-	// This can be removed when we have a truly generic media browser that only 
-	// builds an impl based on the type of url it is passed.
-	struct functor_navigate_media : public LLSelectedTEGetFunctor< bool>
-	{
-		bool get( LLViewerObject* object, S32 face )
-		{
-			if ( object )
-				if ( object->getTE(face) )
-					if ( object->getTE(face)->getMediaData() )
-					{
-						if(object->permModify())
-						{
-							viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
-							if(media_impl)
-							{
-								media_impl->navigateHome();
-								return true;
-							}
-						}	
-					}
-		   return false;
-		 };
-				
-	} functor_navigate_media;
-	
-	bool all_face_media_navigated = false;
-	LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
-	selected_objects->getSelectedTEValue( &functor_navigate_media, all_face_media_navigated );
-	
-	return all_face_media_navigated;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-const std::string LLPanelMediaSettingsGeneral::getHomeUrl()
-{
-	return mHomeURL->getValue().asString(); 
-}
-
+/**
+ * @file llpanelmediasettingsgeneral.cpp
+ * @brief LLPanelMediaSettingsGeneral class implementation
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llagent.h"
+#include "llpanelmediasettingsgeneral.h"
+#include "llcombobox.h"
+#include "llcheckboxctrl.h"
+#include "llspinctrl.h"
+#include "lluictrlfactory.h"
+#include "llviewerwindow.h"
+#include "llviewermedia.h"
+#include "llsdutil.h"
+#include "llselectmgr.h"
+#include "llbutton.h"
+#include "lltexturectrl.h"
+#include "llurl.h"
+#include "llwindow.h"
+#include "llmediaentry.h"
+#include "llmediactrl.h"
+#include "llpanelcontents.h"
+#include "llpermissions.h"
+#include "llpluginclassmedia.h"
+#include "llfloatermediasettings.h"
+#include "llfloatertools.h"
+#include "lltrans.h"
+
+const char *CHECKERBOARD_DATA_URL = "data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22100%%22 height=%22100%%22 %3E%3Cdefs%3E%3Cpattern id=%22checker%22 patternUnits=%22userSpaceOnUse%22 x=%220%22 y=%220%22 width=%22128%22 height=%22128%22 viewBox=%220 0 128 128%22 %3E%3Crect x=%220%22 y=%220%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3Crect x=%2264%22 y=%2264%22 width=%2264%22 height=%2264%22 fill=%22#ddddff%22 /%3E%3C/pattern%3E%3C/defs%3E%3Crect x=%220%22 y=%220%22 width=%22100%%22 height=%22100%%22 fill=%22url(#checker)%22 /%3E%3C/svg%3E";
+
+////////////////////////////////////////////////////////////////////////////////
+//
+LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
+	mControls( NULL ),
+	mAutoLoop( NULL ),
+	mFirstClick( NULL ),
+	mAutoZoom( NULL ),
+	mAutoPlay( NULL ),
+	mAutoScale( NULL ),
+	mWidthPixels( NULL ),
+	mHeightPixels( NULL ),
+	mHomeURL( NULL ),
+	mCurrentURL( NULL ),
+	mParent( NULL ),
+	mMediaEditable(false)
+{
+	// build dialog from XML
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+BOOL LLPanelMediaSettingsGeneral::postBuild()
+{
+	// connect member vars with UI widgets
+	mAutoLoop = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_LOOP_KEY );
+	mAutoPlay = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_PLAY_KEY );
+	mAutoScale = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_SCALE_KEY );
+	mAutoZoom = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_ZOOM_KEY );
+	mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
+	mCurrentURL = getChild< LLLineEditor >( LLMediaEntry::CURRENT_URL_KEY );
+	mFirstClick = getChild< LLCheckBoxCtrl >( LLMediaEntry::FIRST_CLICK_INTERACT_KEY );
+	mHeightPixels = getChild< LLSpinCtrl >( LLMediaEntry::HEIGHT_PIXELS_KEY );
+	mHomeURL = getChild< LLLineEditor >( LLMediaEntry::HOME_URL_KEY );
+	mWidthPixels = getChild< LLSpinCtrl >( LLMediaEntry::WIDTH_PIXELS_KEY );
+	mPreviewMedia = getChild<LLMediaCtrl>("preview_media");
+
+	// watch commit action for HOME URL
+	childSetCommitCallback( LLMediaEntry::HOME_URL_KEY, onCommitHomeURL, this);
+	childSetCommitCallback( "current_url_reset_btn",onBtnResetCurrentUrl, this);
+	// interrogates controls and updates widgets as required
+	updateMediaPreview();
+
+	return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// virtual
+LLPanelMediaSettingsGeneral::~LLPanelMediaSettingsGeneral()
+{
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLPanelMediaSettingsGeneral::draw()
+{
+	// housekeeping
+	LLPanel::draw();
+
+	// enable/disable pixel values image entry based on auto scale checkbox 
+	if ( mAutoScale->getValue().asBoolean() == false )
+	{
+		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true );
+		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true );
+	}
+	else
+	{
+		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false );
+		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false );
+	};
+
+	// enable/disable UI based on type of media
+	bool reset_button_is_active = true;
+	if( mPreviewMedia )
+	{
+		LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
+		if( media_plugin )
+		{
+			// turn off volume (if we can) for preview. Note: this really only
+			// works for QuickTime movies right now - no way to control the 
+			// volume of a flash app embedded in a page for example
+			media_plugin->setVolume( 0 );
+
+			// some controls are only appropriate for time or browser type plugins
+			// so we selectively enable/disable them - need to do it in draw
+			// because the information from plugins arrives assynchronously
+			bool show_time_controls = media_plugin->pluginSupportsMediaTime();
+			if ( show_time_controls )
+			{
+				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false );
+				reset_button_is_active = false;
+				childSetEnabled( "current_url_label", false );
+				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true );
+			}
+			else
+			{
+				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true );
+				reset_button_is_active = true;
+				childSetEnabled( "current_url_label", true );
+				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false );
+			};
+		};
+	};
+
+	// current URL can change over time, update it here
+	updateCurrentUrl();
+	
+	LLPermissions perm;
+	bool user_can_press_reset = mMediaEditable;
+
+	// several places modify this widget so we must collect states in one place
+	if ( reset_button_is_active )
+	{
+		// user has perms to press reset button and it is active
+		if ( user_can_press_reset )
+		{
+			childSetEnabled( "current_url_reset_btn", true );
+		}
+		// user does not has perms to press reset button and it is active
+		else
+		{
+			childSetEnabled( "current_url_reset_btn", false );
+		};
+	}
+	else
+	// reset button is inactive so we just slam it to off - other states don't matter
+	{
+		childSetEnabled( "current_url_reset_btn", false );
+	};
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static 
+void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
+{	
+	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
+	self->mAutoLoop->clear();
+	self->mAutoPlay->clear();
+	self->mAutoScale->clear();
+	self->mAutoZoom ->clear();
+	self->mControls->clear();
+	self->mCurrentURL->clear();
+	self->mFirstClick->clear();
+	self->mHeightPixels->clear();
+	self->mHomeURL->clear();
+	self->mWidthPixels->clear();
+	self->mAutoLoop ->setEnabled(editable);
+	self->mAutoPlay ->setEnabled(editable);
+	self->mAutoScale ->setEnabled(editable);
+	self->mAutoZoom  ->setEnabled(editable);
+	self->mControls ->setEnabled(editable);
+	self->mCurrentURL ->setEnabled(editable);
+	self->mFirstClick ->setEnabled(editable);
+	self->mHeightPixels ->setEnabled(editable);
+	self->mHomeURL ->setEnabled(editable);
+	self->mWidthPixels ->setEnabled(editable);
+	self->updateMediaPreview();
+}
+
+// static
+bool LLPanelMediaSettingsGeneral::isMultiple()
+{
+	// IF all the faces have media (or all dont have media)
+	if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
+	{
+		if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) 
+		{
+			return true;
+		}
+		
+	}
+	else
+	{
+		if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) 
+		{
+			return true;
+		}
+	}
+	return false;
+}	
+
+////////////////////////////////////////////////////////////////////////////////
+// static 
+void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable)
+{
+	LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata;
+	self->mMediaEditable = editable;
+
+	//llinfos << "---------------" << llendl;
+	//llinfos << ll_pretty_print_sd(media_settings) << llendl;
+	//llinfos << "---------------" << llendl;
+
+	if ( LLPanelMediaSettingsGeneral::isMultiple() )
+	{
+		self->clearValues(self, self->mMediaEditable);
+		// only show multiple 
+		self->mHomeURL->setText(LLTrans::getString("Multiple Media"));
+		self->mCurrentURL->setText(LLTrans::getString("Multiple Media"));
+		return;
+	}
+	
+	std::string base_key( "" );
+	std::string tentative_key( "" );
+
+	struct 
+	{
+		std::string key_name;
+		LLUICtrl* ctrl_ptr;
+		std::string ctrl_type;
+
+	} data_set [] = 
+	{ 
+        { LLMediaEntry::AUTO_LOOP_KEY,				self->mAutoLoop,		"LLCheckBoxCtrl" },
+		{ LLMediaEntry::AUTO_PLAY_KEY,				self->mAutoPlay,		"LLCheckBoxCtrl" },
+		{ LLMediaEntry::AUTO_SCALE_KEY,				self->mAutoScale,		"LLCheckBoxCtrl" },
+		{ LLMediaEntry::AUTO_ZOOM_KEY,				self->mAutoZoom,		"LLCheckBoxCtrl" },
+		{ LLMediaEntry::CONTROLS_KEY,				self->mControls,		"LLComboBox" },
+		{ LLMediaEntry::CURRENT_URL_KEY,			self->mCurrentURL,		"LLLineEditor" },
+		{ LLMediaEntry::HEIGHT_PIXELS_KEY,			self->mHeightPixels,	"LLSpinCtrl" },
+		{ LLMediaEntry::HOME_URL_KEY,				self->mHomeURL,			"LLLineEditor" },
+		{ LLMediaEntry::FIRST_CLICK_INTERACT_KEY,	self->mFirstClick,		"LLCheckBoxCtrl" },
+		{ LLMediaEntry::WIDTH_PIXELS_KEY,			self->mWidthPixels,		"LLSpinCtrl" },
+		{ "", NULL , "" }
+	};
+
+	for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
+	{
+		base_key = std::string( data_set[ i ].key_name );
+		tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
+		// TODO: CP - I bet there is a better way to do this using Boost
+		if ( media_settings[ base_key ].isDefined() )
+		{
+			if ( data_set[ i ].ctrl_type == "LLLineEditor" )
+			{
+				static_cast< LLLineEditor* >( data_set[ i ].ctrl_ptr )->
+					setText( media_settings[ base_key ].asString() );
+			}
+			else
+			if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
+				static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
+					setValue( media_settings[ base_key ].asBoolean() );
+			else
+			if ( data_set[ i ].ctrl_type == "LLComboBox" )
+				static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )->
+					setCurrentByIndex( media_settings[ base_key ].asInteger() );
+			else
+			if ( data_set[ i ].ctrl_type == "LLSpinCtrl" )
+				static_cast< LLSpinCtrl* >( data_set[ i ].ctrl_ptr )->
+					setValue( media_settings[ base_key ].asInteger() );
+
+			data_set[ i ].ctrl_ptr->setEnabled(self->mMediaEditable);
+			data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
+		};
+	};
+	
+	// interrogates controls and updates widgets as required
+	self->updateMediaPreview();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Helper to set media control to media URL as required
+void LLPanelMediaSettingsGeneral::updateMediaPreview()
+{
+	if ( mHomeURL->getValue().asString().length() > 0 )
+	{
+		mPreviewMedia->navigateTo( mHomeURL->getValue().asString() );
+	}
+	else
+	// new home URL will be empty if media is deleted so display a 
+	// "preview goes here" data url page
+	{
+		mPreviewMedia->navigateTo( CHECKERBOARD_DATA_URL );
+	};
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// virtual
+void LLPanelMediaSettingsGeneral::onClose(bool app_quitting)
+{
+	if(mPreviewMedia)
+	{
+		mPreviewMedia->unloadMediaSource();
+	}
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLPanelMediaSettingsGeneral::onCommitHomeURL( LLUICtrl* ctrl, void *userdata )
+{
+	LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
+
+	// check url user is trying to enter for home URL will pass whitelist 
+	// and decline to accept it if it doesn't.
+	std::string home_url = self->mHomeURL->getValue().asString();
+	if ( ! self->mParent->passesWhiteList( home_url ) )
+	{
+		LLNotifications::instance().add("WhiteListInvalidatesHomeUrl");		
+		return;
+	};
+	
+	self->updateMediaPreview();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// static
+void LLPanelMediaSettingsGeneral::onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata)
+{
+	LLPanelMediaSettingsGeneral* self =(LLPanelMediaSettingsGeneral *)userdata;
+	self->navigateHomeSelectedFace(false);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsGeneral::preApply()
+{
+	// Make sure the home URL entry is committed
+	mHomeURL->onCommit();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
+{
+    fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue();
+    fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue();
+    fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue();
+    fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue();
+    fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex();
+    //Don't fill in current URL: this is only supposed to get changed via navigate
+	// fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
+    fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue();
+    fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue();
+    fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue();
+    fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsGeneral::postApply()
+{	
+	// Make sure to navigate to the home URL if the current URL is empty and 
+	// autoplay is on
+	navigateHomeSelectedFace(true);
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsGeneral::setParent( LLFloaterMediaSettings* parent )
+{
+	mParent = parent;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_is_empty)
+{
+	struct functor_navigate_media : public LLSelectedTEGetFunctor< bool>
+	{
+		functor_navigate_media(bool flag) : only_if_current_is_empty(flag) {}
+		bool get( LLViewerObject* object, S32 face )
+		{
+			if ( object && object->getTE(face) && object->permModify() )
+			{
+				const LLMediaEntry *media_data = object->getTE(face)->getMediaData();
+				if ( media_data )
+				{	
+					if (!only_if_current_is_empty || (media_data->getCurrentURL().empty() && media_data->getAutoPlay()))
+					{
+						viewer_media_t media_impl =
+							LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
+						if(media_impl)
+						{
+							media_impl->navigateHome();
+							return true;
+						}
+					}
+				}
+			}
+			return false;
+		};
+		bool only_if_current_is_empty;
+				
+	} functor_navigate_media(only_if_current_is_empty);
+	
+	bool all_face_media_navigated = false;
+	LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
+	selected_objects->getSelectedTEValue( &functor_navigate_media, all_face_media_navigated );
+	
+	// Note: we don't update the 'current URL' field until the media data itself changes
+	
+	return all_face_media_navigated;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+const std::string LLPanelMediaSettingsGeneral::getHomeUrl()
+{
+	return mHomeURL->getValue().asString(); 
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsGeneral::updateCurrentUrl()
+{
+	// Get the current URL from the selection
+	
+	const LLMediaEntry default_media_data;
+	std::string value_str = default_media_data.getCurrentURL();
+	struct functor_getter_current_url : public LLSelectedTEGetFunctor< std::string >
+	{
+		functor_getter_current_url(const LLMediaEntry& entry): mMediaEntry(entry) {}
+		
+		std::string get( LLViewerObject* object, S32 face )
+		{
+			if ( object )
+				if ( object->getTE(face) )
+					if ( object->getTE(face)->getMediaData() )
+						return object->getTE(face)->getMediaData()->getCurrentURL();
+			return mMediaEntry.getCurrentURL();
+		};
+		
+		const LLMediaEntry &  mMediaEntry;
+		
+	} func_current_url(default_media_data);
+	bool identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func_current_url, value_str );
+	mCurrentURL->setText(value_str);
+	mCurrentURL->setTentative(identical);
+}	
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
index e82a31382ef6226e23da4513fe0b09d5a1959877..f8b8f0d224af7c53e05a71e4f2674464226eb432 100644
--- a/indra/newview/llpanelmediasettingsgeneral.h
+++ b/indra/newview/llpanelmediasettingsgeneral.h
@@ -47,23 +47,31 @@ class LLFloaterMediaSettings;
 class LLPanelMediaSettingsGeneral : public LLPanel
 {
 public:
+	LLPanelMediaSettingsGeneral();
+	~LLPanelMediaSettingsGeneral();
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
 	BOOL postBuild();
 	/*virtual*/ void draw();
 	/*virtual*/ void onClose(bool app_quitting);
 
-	static void apply(void*);
-    void getValues(LLSD &fill_me_in);
-
-	LLPanelMediaSettingsGeneral();
-	~LLPanelMediaSettingsGeneral();
-
 	void setParent( LLFloaterMediaSettings* parent );
 	static void initValues( void* userdata, const LLSD& media_settings ,bool editable);
 	static void clearValues( void* userdata, bool editable);
 	
-	bool navigateHomeSelectedFace();
+	// Navigates the current selected face to the Home URL.
+	// If 'only_if_current_is_empty' is "true", it only performs
+	// the operation if: 1) the current URL is empty, and 2) auto play is true.
+	bool navigateHomeSelectedFace(bool only_if_current_is_empty);
+	
 	void updateMediaPreview();
-	void updateCurrentURL();
 
 	const std::string getHomeUrl();
 	
@@ -72,8 +80,12 @@ class LLPanelMediaSettingsGeneral : public LLPanel
 	bool mMediaEditable;
 
 private:
+	void updateCurrentUrl();
+	
 	static void onBtnResetCurrentUrl(LLUICtrl* ctrl, void *userdata);
 	static void onCommitHomeURL(LLUICtrl* ctrl, void *userdata );
+	
+	static bool isMultiple();
 
 	LLComboBox* mControls;
 	LLCheckBoxCtrl* mAutoLoop;
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 4d84874e7a8baf0198622626154b42db28745597..2f3f550e35baf2a6bf47df8b1cf2aeca37d4181d 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -218,17 +218,10 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsPermissions::apply( void* userdata )
+// 
+void LLPanelMediaSettingsPermissions::preApply()
 {
-    LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata;
-
-    // build LLSD Fragment
-    LLSD media_data_permissions;
-    self->getValues(media_data_permissions);
-
-    // this merges contents of LLSD passed in with what's there so this is ok
-    LLSelectMgr::getInstance()->selectionSetMediaData( media_data_permissions );
+    // no-op
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -254,3 +247,11 @@ void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in )
     fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control;
     fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact;
 }
+
+
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsPermissions::postApply()
+{
+    // no-op
+}
diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h
index ecc50e3582683fae70c0f39ad20401c0f6712591..45a596c615ece82b0940aabf2ed1051c163c0483 100644
--- a/indra/newview/llpanelmediasettingspermissions.h
+++ b/indra/newview/llpanelmediasettingspermissions.h
@@ -46,26 +46,32 @@ class LLNameBox;
 
 class LLPanelMediaSettingsPermissions : public LLPanel
 {
-	public:
-		BOOL postBuild();
-		virtual void draw();
-		static void apply(void*);
-        void getValues(LLSD &fill_me_in);
-
-		LLPanelMediaSettingsPermissions();
-		~LLPanelMediaSettingsPermissions();
-
-		static void initValues( void* userdata, const LLSD& media_settings, bool editable );
-		static void clearValues( void* userdata,  bool editable);
-
-	private:
-        LLCheckBoxCtrl* mPermsOwnerInteract;
-		LLCheckBoxCtrl* mPermsOwnerControl;
-		LLNameBox* mPermsGroupName;
-		LLCheckBoxCtrl* mPermsGroupInteract;
-		LLCheckBoxCtrl* mPermsGroupControl;
-		LLCheckBoxCtrl* mPermsWorldInteract;
-		LLCheckBoxCtrl* mPermsWorldControl;
+public:
+	LLPanelMediaSettingsPermissions();
+	~LLPanelMediaSettingsPermissions();
+	
+	BOOL postBuild();
+	virtual void draw();
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
+	static void initValues( void* userdata, const LLSD& media_settings, bool editable );
+	static void clearValues( void* userdata,  bool editable);
+	
+private:
+	LLCheckBoxCtrl* mPermsOwnerInteract;
+	LLCheckBoxCtrl* mPermsOwnerControl;
+	LLNameBox* mPermsGroupName;
+	LLCheckBoxCtrl* mPermsGroupInteract;
+	LLCheckBoxCtrl* mPermsGroupControl;
+	LLCheckBoxCtrl* mPermsWorldInteract;
+	LLCheckBoxCtrl* mPermsWorldControl;
 };
 
 #endif  // LL_LLPANELMEDIAMEDIASETTINGSPERMISSIONS_H
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index f5607aa2874e03a6e21e62f84dfedfd907262792..bec2494eac9b589d67fe20d5bad5c7060c817069 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -50,10 +50,11 @@
 LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
 	mParent( NULL )
 {
-	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
 	mCommitCallbackRegistrar.add("Media.whitelistAdd",		boost::bind(&LLPanelMediaSettingsSecurity::onBtnAdd, this));
 	mCommitCallbackRegistrar.add("Media.whitelistDelete",	boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));	
+	// build dialog from XML
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -62,10 +63,7 @@ BOOL LLPanelMediaSettingsSecurity::postBuild()
 {
 	mEnableWhiteList = getChild< LLCheckBoxCtrl >( LLMediaEntry::WHITELIST_ENABLE_KEY );
 	mWhiteListList = getChild< LLScrollListCtrl >( LLMediaEntry::WHITELIST_KEY );
-
-	childSetAction("whitelist_add", onBtnAdd, this);
-	childSetAction("whitelist_del", onBtnDel, this);
-
+	
 	setDefaultBtn("whitelist_add");
 
 	return true;
@@ -200,17 +198,12 @@ void LLPanelMediaSettingsSecurity::clearValues( void* userdata , bool editable)
 	self->mEnableWhiteList->setEnabled(editable);
 	self->mWhiteListList->setEnabled(editable);
 }
+
 ////////////////////////////////////////////////////////////////////////////////
-// static
-void LLPanelMediaSettingsSecurity::apply( void* userdata )
+// 
+void LLPanelMediaSettingsSecurity::preApply()
 {
-	LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
-
-	// build LLSD Fragment
-	LLSD media_data_security;
-	self->getValues(media_data_security);
-	// this merges contents of LLSD passed in with what's there so this is ok
-	LLSelectMgr::getInstance()->selectionSetMediaData( media_data_security );
+	// no-op
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -222,7 +215,9 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
     // iterate over white list and extract items
     std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
     std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
-    fill_me_in[LLMediaEntry::WHITELIST_KEY].clear();
+	// *NOTE: need actually set the key to be an emptyArray(), or the merge
+	// we do with this LLSD will think there's nothing to change.
+    fill_me_in[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
     while( iter != white_list_items.end() )
     {
         std::string white_list_url = (*iter)->getValue().asString();
@@ -231,23 +226,30 @@ void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
     };
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// 
+void LLPanelMediaSettingsSecurity::postApply()
+{
+	// no-op
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // Try to make a valid URL if a fragment (
 // white list list box widget and build a list to test against. Can also
 const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
 {
 	// use LLURI to determine if we have a valid scheme
-	LLURI candidate_url( src_url );
-	if ( candidate_url.scheme().empty() )
-	{
+	LLURI candidate_url( src_url );
+	if ( candidate_url.scheme().empty() )
+	{
 		// build a URL comprised of default scheme and the original fragment 
 		const std::string default_scheme( "http://" );
 		return default_scheme + src_url;
-	};
-
-	// we *could* test the "default scheme" + "original fragment" URL again
-	// using LLURI to see if it's valid but I think the outcome is the same
-	// in either case - our only option is to return the original URL
+	};
+
+	// we *could* test the "default scheme" + "original fragment" URL again
+	// using LLURI to see if it's valid but I think the outcome is the same
+	// in either case - our only option is to return the original URL
 
 	// we *think* the original url passed in was valid
 	return src_url;
@@ -334,10 +336,10 @@ void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata )
 	self->mWhiteListList->deleteSelectedItems();
 }
 
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
-{
-	mParent = parent;
-};
-
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
+{
+	mParent = parent;
+};
+
diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h
index b78ee921937e9829eb4ded4a7a62c1bda0be8ba4..638664e59d74015393598a6f1aaf8f4567d6e7a8 100644
--- a/indra/newview/llpanelmediasettingssecurity.h
+++ b/indra/newview/llpanelmediasettingssecurity.h
@@ -41,31 +41,37 @@ class LLFloaterMediaSettings;
 
 class LLPanelMediaSettingsSecurity : public LLPanel
 {
-	public:
-		BOOL postBuild();
-		virtual void draw();
-		static void apply(void*);
-        void getValues(LLSD &fill_me_in);
-
-		LLPanelMediaSettingsSecurity();
-		~LLPanelMediaSettingsSecurity();
-
-		static void initValues( void* userdata, const LLSD& media_settings,bool editable );
-		static void clearValues( void* userdata, bool editable);
-		void addWhiteListItem(const std::string& url);
-		void setParent( LLFloaterMediaSettings* parent );
-		const std::string makeValidUrl( const std::string& src_url );
-		bool passesWhiteList( const std::string& added_url, const std::string& test_url );
-
-	protected:
-		LLFloaterMediaSettings* mParent;
-
-	private:
-		LLCheckBoxCtrl* mEnableWhiteList;
-		LLScrollListCtrl* mWhiteListList;
-
-		static void onBtnAdd(void*);
-		static void onBtnDel(void*);
+public:
+	LLPanelMediaSettingsSecurity();
+	~LLPanelMediaSettingsSecurity();
+	
+	BOOL postBuild();
+	virtual void draw();	
+	
+	// XXX TODO: put these into a common parent class?
+	// Hook that the floater calls before applying changes from the panel
+	void preApply();
+	// Function that asks the panel to fill in values associated with the panel
+    void getValues(LLSD &fill_me_in);
+	// Hook that the floater calls after applying changes to the panel
+	void postApply();
+	
+	static void initValues( void* userdata, const LLSD& media_settings,bool editable );
+	static void clearValues( void* userdata, bool editable);
+	void addWhiteListItem(const std::string& url);
+	void setParent( LLFloaterMediaSettings* parent );
+	const std::string makeValidUrl( const std::string& src_url );
+	bool passesWhiteList( const std::string& added_url, const std::string& test_url );
+	
+protected:
+	LLFloaterMediaSettings* mParent;
+	
+private:
+	LLCheckBoxCtrl* mEnableWhiteList;
+	LLScrollListCtrl* mWhiteListList;
+	
+	static void onBtnAdd(void*);
+	static void onBtnDel(void*);
 };
 
 #endif  // LL_LLPANELMEDIAMEDIASETTINGSSECURITY_H
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index 1ab4ff581ee1bcf80457c2730fc4fd5721d77f4b..58d9fe9b76e6a82b719e7aeab63a1e3a84b6ffb4 100644
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -45,7 +45,6 @@ class LLUICtrl;
 class LLButton;
 class LLViewerObject;
 class LLComboBox;
-class LLPanelInventory;
 class LLColorSwatchCtrl;
 class LLTextureCtrl;
 class LLInventoryItem;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..90c511a0079ef30dd375a32d494263e11e72c30a
--- /dev/null
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -0,0 +1,2041 @@
+/**
+ * @file llsidepanelinventory.cpp
+ * @brief LLPanelObjectInventory class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+//*****************************************************************************
+//
+// Implementation of the panel inventory - used to view and control a
+// task's inventory.
+//
+//*****************************************************************************
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelobjectinventory.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llfloaterreg.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpreviewanim.h"
+#include "llpreviewgesture.h"
+#include "llpreviewnotecard.h"
+#include "llpreviewscript.h"
+#include "llpreviewsound.h"
+#include "llpreviewtexture.h"
+#include "llscrollcontainer.h"
+#include "llselectmgr.h"
+#include "llsidetray.h"
+#include "llstatusbar.h"
+#include "lltrans.h"
+#include "llviewerassettype.h"
+#include "llviewerregion.h"
+#include "llviewerobjectlist.h"
+#include "llviewermessage.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskInvFVBridge
+///----------------------------------------------------------------------------
+
+class LLTaskInvFVBridge : public LLFolderViewEventListener
+{
+protected:
+	LLUUID mUUID;
+	std::string mName;
+	mutable std::string mDisplayName;
+	LLPanelObjectInventory* mPanel;
+	U32 mFlags;
+
+	LLInventoryItem* findItem() const;
+
+public:
+	LLTaskInvFVBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		U32 flags=0);
+	virtual ~LLTaskInvFVBridge( void ) {}
+
+	virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
+	virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
+
+	static LLTaskInvFVBridge* createObjectBridge(LLPanelObjectInventory* panel,
+												 LLInventoryObject* object);
+	void showProperties();
+	void buyItem();
+	S32 getPrice();
+	static bool commitBuyItem(const LLSD& notification, const LLSD& response);
+
+	// LLFolderViewEventListener functionality
+	virtual const std::string& getName() const;
+	virtual const std::string& getDisplayName() const;
+	virtual PermissionMask getPermissionMask() const { return PERM_NONE; }
+	/*virtual*/ LLFolderType::EType getPreferredType() const { return LLFolderType::FT_NONE; }
+	virtual const LLUUID& getUUID() const { return mUUID; }
+	virtual time_t getCreationDate() const;
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void closeItem() {}
+	virtual void previewItem();
+	virtual void selectItem() {}
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemMovable() const;
+	virtual BOOL isItemRemovable();
+	virtual BOOL removeItem();
+	virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
+	virtual void move(LLFolderViewEventListener* parent_listener);
+	virtual BOOL isItemCopyable() const;
+	virtual BOOL copyToClipboard() const;
+	virtual void cutToClipboard();
+	virtual BOOL isClipboardPasteable() const;
+	virtual void pasteFromClipboard();
+	virtual void pasteLinkFromClipboard();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual BOOL isUpToDate() const { return TRUE; }
+	virtual BOOL hasChildren() const { return FALSE; }
+	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
+	// LLDragAndDropBridge functionality
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskInvFVBridge::LLTaskInvFVBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	U32 flags):
+	mUUID(uuid),
+	mName(name),
+	mPanel(panel),
+	mFlags(flags)
+{
+
+}
+
+LLInventoryItem* LLTaskInvFVBridge::findItem() const
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		return (LLInventoryItem*)(object->getInventoryObject(mUUID));
+	}
+	return NULL;
+}
+
+void LLTaskInvFVBridge::showProperties()
+{
+	LLSD key;
+	key["object"] = mPanel->getTaskUUID();
+	key["id"] = mUUID;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+
+	// Disable old properties floater; this is replaced by the sidepanel.
+	/*
+	LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
+	if (floater)
+	{
+		floater->setObjectID(mPanel->getTaskUUID());
+	}
+	*/
+}
+
+struct LLBuyInvItemData
+{
+	LLUUID mTaskID;
+	LLUUID mItemID;
+	LLAssetType::EType mType;
+
+	LLBuyInvItemData(const LLUUID& task,
+					 const LLUUID& item,
+					 LLAssetType::EType type) :
+		mTaskID(task), mItemID(item), mType(type)
+	{}
+};
+
+void LLTaskInvFVBridge::buyItem()
+{
+	llinfos << "LLTaskInvFVBridge::buyItem()" << llendl;
+	LLInventoryItem* item = findItem();
+	if(!item || !item->getSaleInfo().isForSale()) return;
+	LLBuyInvItemData* inv = new LLBuyInvItemData(mPanel->getTaskUUID(),
+												 mUUID,
+												 item->getType());
+
+	const LLSaleInfo& sale_info = item->getSaleInfo();
+	const LLPermissions& perm = item->getPermissions();
+	const std::string owner_name; // no owner name currently... FIXME?
+
+	LLViewerObject* obj;
+	if( ( obj = gObjectList.findObject( mPanel->getTaskUUID() ) ) && obj->isAttachment() )
+	{
+		LLNotifications::instance().add("Cannot_Purchase_an_Attachment");
+		llinfos << "Attempt to purchase an attachment" << llendl;
+		delete inv;
+	}
+	else
+	{
+        LLSD args;
+        args["PRICE"] = llformat("%d",sale_info.getSalePrice());
+        args["OWNER"] = owner_name;
+        if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
+        {
+        	U32 next_owner_mask = perm.getMaskNextOwner();
+        	args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
+        	args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
+        	args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
+        }
+
+		std::string alertdesc;
+       	switch(sale_info.getSaleType())
+       	{
+       	  case LLSaleInfo::FS_ORIGINAL:
+       		alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
+       		break;
+       	  case LLSaleInfo::FS_CONTENTS:
+       		alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
+       		break;
+		  case LLSaleInfo::FS_COPY:
+       	  default:
+       		alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
+       		break;
+       	}
+
+		LLSD payload;
+		payload["task_id"] = inv->mTaskID;
+		payload["item_id"] = inv->mItemID;
+		payload["type"] = inv->mType;
+		LLNotifications::instance().add(alertdesc, args, payload, LLTaskInvFVBridge::commitBuyItem);
+	}
+}
+
+S32 LLTaskInvFVBridge::getPrice()
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		return item->getSaleInfo().getSalePrice();
+	}
+	else
+	{
+		return -1;
+	}
+}
+
+// static
+bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if(0 == option)
+	{
+		LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+		if(!object || !object->getRegion()) return false;
+
+
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_BuyObjectInventory);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_Data);
+		msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID());
+		msg->addUUIDFast(_PREHASH_FolderID,
+			gInventory.findCategoryUUIDForType((LLFolderType::EType)notification["payload"]["type"].asInteger()));
+		msg->sendReliable(object->getRegion()->getHost());
+	}
+	return false;
+}
+
+const std::string& LLTaskInvFVBridge::getName() const
+{
+	return mName;
+}
+
+const std::string& LLTaskInvFVBridge::getDisplayName() const
+{
+	LLInventoryItem* item = findItem();
+
+	if(item)
+	{
+		if(item->getParentUUID().isNull())
+		{
+			if(item->getName() == "Contents")
+			{
+				mDisplayName.assign(LLTrans::getString("ViewerObjectContents"));
+			}
+			else
+			{
+				mDisplayName.assign(item->getName());
+			}
+		}
+		else
+		{
+			mDisplayName.assign(item->getName());
+		}
+		const LLPermissions& perm(item->getPermissions());
+		BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+		BOOL mod  = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
+		BOOL xfer = gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE);
+
+		if(!copy)
+		{
+			mDisplayName.append(LLTrans::getString("no_copy"));
+		}
+		if(!mod)
+		{
+			mDisplayName.append(LLTrans::getString("no_modify"));
+		}
+		if(!xfer)
+		{
+			mDisplayName.append(LLTrans::getString("no_transfer"));
+		}
+	}
+
+	return mDisplayName;
+}
+
+// BUG: No creation dates for task inventory
+time_t LLTaskInvFVBridge::getCreationDate() const
+{
+	return 0;
+}
+
+LLUIImagePtr LLTaskInvFVBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi );
+}
+
+void LLTaskInvFVBridge::openItem()
+{
+	// no-op.
+	lldebugs << "LLTaskInvFVBridge::openItem()" << llendl;
+}
+
+void LLTaskInvFVBridge::previewItem()
+{
+	openItem();
+}
+
+BOOL LLTaskInvFVBridge::isItemRenameable() const
+{
+	if(gAgent.isGodlike()) return TRUE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLInventoryItem* item;
+		item = (LLInventoryItem*)(object->getInventoryObject(mUUID));
+		if(item && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										 GP_OBJECT_MANIPULATE, GOD_LIKE))
+		{
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::renameItem(const std::string& new_name)
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		LLViewerInventoryItem* item = NULL;
+		item = (LLViewerInventoryItem*)object->getInventoryObject(mUUID);
+		if(item && (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
+										GP_OBJECT_MANIPULATE, GOD_LIKE)))
+		{
+			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+			new_item->rename(new_name);
+			object->updateInventory(
+				new_item,
+				TASK_INVENTORY_ITEM_KEY,
+				false);
+		}
+	}
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemMovable() const
+{
+	//LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	//if(object && (object->permModify() || gAgent.isGodlike()))
+	//{
+	//	return TRUE;
+	//}
+	//return FALSE;
+	return TRUE;
+}
+
+BOOL LLTaskInvFVBridge::isItemRemovable()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object
+	   && (object->permModify() || object->permYouOwner()))
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
+bool remove_task_inventory_callback(const LLSD& notification, const LLSD& response, LLPanelObjectInventory* panel)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLViewerObject* object = gObjectList.findObject(notification["payload"]["task_id"].asUUID());
+	if(option == 0 && object)
+	{
+		// yes
+		LLSD::array_const_iterator list_end = notification["payload"]["inventory_ids"].endArray();
+		for (LLSD::array_const_iterator list_it = notification["payload"]["inventory_ids"].beginArray();
+			list_it != list_end; 
+			++list_it)
+		{
+			object->removeInventory(list_it->asUUID());
+		}
+
+		// refresh the UI.
+		panel->refresh();
+	}
+	return false;
+}
+
+// helper for remove
+// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently.
+typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
+typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
+BOOL LLTaskInvFVBridge::removeItem()
+{
+	if(isItemRemovable() && mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			if(object->permModify())
+			{
+				// just do it.
+				object->removeInventory(mUUID);
+				return TRUE;
+			}
+			else
+			{
+				remove_data_t* data = new remove_data_t;
+				data->first = mPanel;
+				data->second.first = mPanel->getTaskUUID();
+				data->second.second.push_back(mUUID);
+				LLSD payload;
+				payload["task_id"] = mPanel->getTaskUUID();
+				payload["inventory_ids"].append(mUUID);
+				LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+				return FALSE;
+			}
+		}
+	}
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch)
+{
+	if (!mPanel)
+	{
+		return;
+	}
+
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if (!object)
+	{
+		return;
+	}
+
+	if (!object->permModify())
+	{
+		LLSD payload;
+		payload["task_id"] = mPanel->getTaskUUID();
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+			payload["inventory_ids"].append(itemp->getUUID());
+		}
+		LLNotifications::instance().add("RemoveItemWarn", LLSD(), payload, boost::bind(&remove_task_inventory_callback, _1, _2, mPanel));
+		
+	}
+	else
+	{
+		for (S32 i = 0; i < (S32)batch.size(); i++)
+		{
+			LLTaskInvFVBridge* itemp = (LLTaskInvFVBridge*)batch[i];
+
+			if(itemp->isItemRemovable())
+			{
+				// just do it.
+				object->removeInventory(itemp->getUUID());
+			}
+		}
+	}
+}
+
+void LLTaskInvFVBridge::move(LLFolderViewEventListener* parent_listener)
+{
+}
+
+BOOL LLTaskInvFVBridge::isItemCopyable() const
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return FALSE;
+	return gAgent.allowOperation(PERM_COPY, item->getPermissions(),
+								GP_OBJECT_MANIPULATE);
+}
+
+BOOL LLTaskInvFVBridge::copyToClipboard() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::cutToClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::isClipboardPasteable() const
+{
+	return FALSE;
+}
+
+void LLTaskInvFVBridge::pasteFromClipboard()
+{
+}
+
+void LLTaskInvFVBridge::pasteLinkFromClipboard()
+{
+}
+
+BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if (object->isAttachment() && !can_copy)
+				{
+                    //RN: no copy contents of attachments cannot be dragged out
+                    // due to a race condition and possible exploit where
+                    // attached objects do not update their inventory items
+                    // when their contents are manipulated
+                    return FALSE;
+				}
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
+								   EDragAndDropType cargo_type,
+								   void* cargo_data)
+{
+	//llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl;
+	return FALSE;
+}
+
+// virtual
+void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_buy")
+	{
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			if (price > 0 && price > gStatusBar->getBalance())
+			{
+				LLFloaterBuyCurrency::buyCurrency("This costs", price);
+			}
+			else
+			{
+				buyItem();
+			}
+		}
+	}
+	else if (action == "task_open")
+	{
+		openItem();
+	}
+	else if (action == "task_properties")
+	{
+		showProperties();
+	}
+}
+
+void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	
+	if (!item)
+	{
+		hide_context_entries(menu, items, disabled_items);
+		return;
+	}
+
+	if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
+							 GP_OBJECT_MANIPULATE)
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info << LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open"));
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskFolderBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCategoryBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCategoryBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual const std::string& getDisplayName() const { return getName(); }
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+	virtual BOOL isItemRemovable();
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	virtual BOOL hasChildren() const;
+	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
+	virtual BOOL dragOrDrop(MASK mask, BOOL drop,
+							EDragAndDropType cargo_type,
+							void* cargo_data);
+};
+
+LLTaskCategoryBridge::LLTaskCategoryBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCategoryBridge::getIcon() const
+{
+	return LLUI::getUIImage("Inv_FolderClosed");
+}
+
+BOOL LLTaskCategoryBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::isItemRemovable()
+{
+	return FALSE;
+}
+
+void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+	items.push_back(std::string("Task Open"));
+	hide_context_entries(menu, items, disabled_items);
+}
+
+BOOL LLTaskCategoryBridge::hasChildren() const
+{
+	// return TRUE if we have or do know know if we have children.
+	// *FIX: For now, return FALSE - we will know for sure soon enough.
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
+{
+	//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
+	if(mPanel)
+	{
+		LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+		if(object)
+		{
+			LLInventoryItem* inv = NULL;
+			if((inv = (LLInventoryItem*)object->getInventoryObject(mUUID)))
+			{
+				const LLPermissions& perm = inv->getPermissions();
+				bool can_copy = gAgent.allowOperation(PERM_COPY, perm,
+														GP_OBJECT_MANIPULATE);
+				if((can_copy && perm.allowTransferTo(gAgent.getID()))
+				   || object->permYouOwner())
+//				   || gAgent.isGodlike())
+
+				{
+					*type = LLViewerAssetType::lookupDragAndDropType(inv->getType());
+
+					*id = inv->getUUID();
+					return TRUE;
+				}
+			}
+		}
+	}
+	return FALSE;
+}
+
+BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
+									  EDragAndDropType cargo_type,
+									  void* cargo_data)
+{
+	//llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl;
+	BOOL accept = FALSE;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(object)
+	{
+		switch(cargo_type)
+		{
+		case DAD_CATEGORY:
+			accept = LLToolDragAndDrop::getInstance()->dadUpdateInventoryCategory(object,drop);
+			break;
+		case DAD_TEXTURE:
+		case DAD_SOUND:
+		case DAD_LANDMARK:
+		case DAD_OBJECT:
+		case DAD_NOTECARD:
+		case DAD_CLOTHING:
+		case DAD_BODYPART:
+		case DAD_ANIMATION:
+		case DAD_GESTURE:
+		case DAD_CALLINGCARD:
+		case DAD_MESH:
+			accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(accept && drop)
+			{
+				LLToolDragAndDrop::dropInventory(object,
+												 (LLViewerInventoryItem*)cargo_data,
+												 LLToolDragAndDrop::getInstance()->getSource(),
+												 LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		case DAD_SCRIPT:
+			// *HACK: In order to resolve SL-22177, we need to block
+			// drags from notecards and objects onto other
+			// objects. uncomment the simpler version when we have
+			// that right.
+			//accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
+			if(LLToolDragAndDrop::isInventoryDropAcceptable(
+				   object, (LLViewerInventoryItem*)cargo_data)
+			   && (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
+			   && (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
+			{
+				accept = TRUE;
+			}
+			if(accept && drop)
+			{
+				LLViewerInventoryItem* item = (LLViewerInventoryItem*)cargo_data;
+				// rez in the script active by default, rez in
+				// inactive if the control key is being held down.
+				BOOL active = ((mask & MASK_CONTROL) == 0);
+				LLToolDragAndDrop::dropScript(object, item, active,
+											  LLToolDragAndDrop::getInstance()->getSource(),
+											  LLToolDragAndDrop::getInstance()->getSourceID());
+			}
+			break;
+		default:
+			break;
+		}
+	}
+	return accept;
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskTextureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskTextureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskTextureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLInventoryType::EType it);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+protected:
+	LLInventoryType::EType mInventoryType;
+};
+
+LLTaskTextureBridge::LLTaskTextureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLInventoryType::EType it) :
+	LLTaskInvFVBridge(panel, uuid, name),
+	mInventoryType(it)
+{
+}
+
+LLUIImagePtr LLTaskTextureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
+}
+
+void LLTaskTextureBridge::openItem()
+{
+	llinfos << "LLTaskTextureBridge::openItem()" << llendl;
+	LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
+	if(preview)
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskSoundBridge
+///----------------------------------------------------------------------------
+
+class LLTaskSoundBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskSoundBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+	static void openSoundPreview(void* data);
+};
+
+LLTaskSoundBridge::LLTaskSoundBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskSoundBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
+}
+
+void LLTaskSoundBridge::openItem()
+{
+	openSoundPreview((void*)this);
+}
+
+void LLTaskSoundBridge::openSoundPreview(void* data)
+{
+	LLTaskSoundBridge* self = (LLTaskSoundBridge*)data;
+	if(!self)
+		return;
+
+	LLPreviewSound* preview = LLFloaterReg::showTypedInstance<LLPreviewSound>("preview_sound", LLSD(self->mUUID), TAKE_FOCUS_YES);
+	if (preview)
+	{
+		preview->setObjectID(self->mPanel->getTaskUUID());
+	}
+}
+
+// virtual
+void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "task_play")
+	{
+		LLInventoryItem* item = findItem();
+		if(item)
+		{
+			send_sound_trigger(item->getAssetUUID(), 1.0);
+		}
+	}
+	LLTaskInvFVBridge::performAction(folder, model, action);
+}
+
+void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(item->getPermissions().getOwner() != gAgent.getID()
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info <<  LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open")); 
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+	items.push_back(std::string("Task Play"));
+
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskLandmarkBridge
+///----------------------------------------------------------------------------
+
+class LLTaskLandmarkBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskLandmarkBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskLandmarkBridge::LLTaskLandmarkBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskLandmarkBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskCallingCardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskCallingCardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskCallingCardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual BOOL isItemRenameable() const;
+	virtual BOOL renameItem(const std::string& new_name);
+};
+
+LLTaskCallingCardBridge::LLTaskCallingCardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskCallingCardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
+}
+
+BOOL LLTaskCallingCardBridge::isItemRenameable() const
+{
+	return FALSE;
+}
+
+BOOL LLTaskCallingCardBridge::renameItem(const std::string& new_name)
+{
+	return FALSE;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLTaskScriptBridge
+///----------------------------------------------------------------------------
+
+class LLTaskScriptBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskScriptBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	//static BOOL enableIfCopyable( void* userdata );
+};
+
+LLTaskScriptBridge::LLTaskScriptBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskScriptBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
+}
+
+
+class LLTaskLSLBridge : public LLTaskScriptBridge
+{
+public:
+	LLTaskLSLBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual void openItem();
+	virtual BOOL removeItem();
+	//virtual void buildContextMenu(LLMenuGL& menu);
+
+	//static void copyToInventory(void* userdata);
+};
+
+LLTaskLSLBridge::LLTaskLSLBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskScriptBridge(panel, uuid, name)
+{
+}
+
+void LLTaskLSLBridge::openItem()
+{
+	llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl;
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskLSLBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_scriptedit", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskObjectBridge
+///----------------------------------------------------------------------------
+
+class LLTaskObjectBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskObjectBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+};
+
+LLTaskObjectBridge::LLTaskObjectBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskObjectBridge::getIcon() const
+{
+	BOOL item_is_multi = FALSE;
+	if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+	{
+		item_is_multi = TRUE;
+	}
+
+	return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi);
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskNotecardBridge
+///----------------------------------------------------------------------------
+
+class LLTaskNotecardBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskNotecardBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskNotecardBridge::LLTaskNotecardBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskNotecardBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
+}
+
+void LLTaskNotecardBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	if(object->permModify() || gAgent.isGodlike())
+	{
+		LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(mUUID), TAKE_FOCUS_YES);
+		if (preview)
+		{
+			preview->setObjectID(mPanel->getTaskUUID());
+		}
+	}
+}
+
+BOOL LLTaskNotecardBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskGestureBridge
+///----------------------------------------------------------------------------
+
+class LLTaskGestureBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskGestureBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskGestureBridge::LLTaskGestureBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskGestureBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
+}
+
+void LLTaskGestureBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+	LLPreviewGesture::show(mUUID, mPanel->getTaskUUID());
+}
+
+BOOL LLTaskGestureBridge::removeItem()
+{
+	// Don't need to deactivate gesture because gestures inside objects can never be active.
+	LLFloaterReg::hideInstance("preview_gesture", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskAnimationBridge
+///----------------------------------------------------------------------------
+
+class LLTaskAnimationBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskAnimationBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual BOOL removeItem();
+};
+
+LLTaskAnimationBridge::LLTaskAnimationBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskAnimationBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
+}
+
+void LLTaskAnimationBridge::openItem()
+{
+	LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+	if(!object || object->isInventoryPending())
+	{
+		return;
+	}
+
+	LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES);
+	if (preview && (object->permModify() || gAgent.isGodlike()))
+	{
+		preview->setObjectID(mPanel->getTaskUUID());
+	}
+}
+
+BOOL LLTaskAnimationBridge::removeItem()
+{
+	LLFloaterReg::hideInstance("preview_anim", LLSD(mUUID));
+	return LLTaskInvFVBridge::removeItem();
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskWearableBridge
+///----------------------------------------------------------------------------
+
+class LLTaskWearableBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskWearableBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name,
+		LLAssetType::EType asset_type,
+		U32 flags);
+
+	virtual LLUIImagePtr getIcon() const;
+
+protected:
+	LLAssetType::EType		mAssetType;
+};
+
+LLTaskWearableBridge::LLTaskWearableBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name,
+	LLAssetType::EType asset_type,
+	U32 flags) :
+	LLTaskInvFVBridge(panel, uuid, name, flags),
+	mAssetType( asset_type )
+{
+}
+
+LLUIImagePtr LLTaskWearableBridge::getIcon() const
+{
+	return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
+}
+
+///----------------------------------------------------------------------------
+/// Class LLTaskMeshBridge
+///----------------------------------------------------------------------------
+
+class LLTaskMeshBridge : public LLTaskInvFVBridge
+{
+public:
+	LLTaskMeshBridge(
+		LLPanelObjectInventory* panel,
+		const LLUUID& uuid,
+		const std::string& name);
+
+	virtual LLUIImagePtr getIcon() const;
+	virtual void openItem();
+	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action);
+	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+};
+
+LLTaskMeshBridge::LLTaskMeshBridge(
+	LLPanelObjectInventory* panel,
+	const LLUUID& uuid,
+	const std::string& name) :
+	LLTaskInvFVBridge(panel, uuid, name)
+{
+}
+
+LLUIImagePtr LLTaskMeshBridge::getIcon() const
+{
+	return get_item_icon(LLAssetType::AT_MESH, LLInventoryType::IT_MESH, 0, FALSE);
+}
+
+void LLTaskMeshBridge::openItem()
+{
+	// open mesh
+}
+
+
+// virtual
+void LLTaskMeshBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action)
+{
+	if (action == "mesh action")
+	{
+		LLInventoryItem* item = findItem();
+		if(item)
+		{
+			// do action
+		}
+	}
+	LLTaskInvFVBridge::performAction(folder, model, action);
+}
+
+void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	std::vector<std::string> items;
+	std::vector<std::string> disabled_items;
+
+	if(item->getPermissions().getOwner() != gAgent.getID()
+	   && item->getSaleInfo().isForSale())
+	{
+		items.push_back(std::string("Task Buy"));
+
+		std::string label= LLTrans::getString("Buy");
+		// Check the price of the item.
+		S32 price = getPrice();
+		if (-1 == price)
+		{
+			llwarns << "label_buy_task_bridged_item: Invalid price" << llendl;
+		}
+		else
+		{
+			std::ostringstream info;
+			info <<  LLTrans::getString("BuyforL$") << price;
+			label.assign(info.str());
+		}
+
+		const LLView::child_list_t *list = menu.getChildList();
+		LLView::child_list_t::const_iterator itor;
+		for (itor = list->begin(); itor != list->end(); ++itor)
+		{
+			std::string name = (*itor)->getName();
+			LLMenuItemCallGL* menu_itemp = dynamic_cast<LLMenuItemCallGL*>(*itor);
+			if (name == "Task Buy" && menu_itemp)
+			{
+				menu_itemp->setLabel(label);
+			}
+		}
+	}
+	else
+	{
+		items.push_back(std::string("Task Open")); 
+		if (!isItemCopyable())
+		{
+			disabled_items.push_back(std::string("Task Open"));
+		}
+	}
+	items.push_back(std::string("Task Properties"));
+	if(isItemRenameable())
+	{
+		items.push_back(std::string("Task Rename"));
+	}
+	if(isItemRemovable())
+	{
+		items.push_back(std::string("Task Remove"));
+	}
+
+
+	hide_context_entries(menu, items, disabled_items);
+}
+
+
+///----------------------------------------------------------------------------
+/// LLTaskInvFVBridge impl
+//----------------------------------------------------------------------------
+
+LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* panel,
+														 LLInventoryObject* object)
+{
+	LLTaskInvFVBridge* new_bridge = NULL;
+	LLAssetType::EType type = object->getType();
+	LLInventoryItem* item = NULL;
+	switch(type)
+	{
+	case LLAssetType::AT_TEXTURE:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskTextureBridge(panel,
+											 object->getUUID(),
+											 object->getName(),
+											 item->getInventoryType());
+		break;
+	case LLAssetType::AT_SOUND:
+		new_bridge = new LLTaskSoundBridge(panel,
+										   object->getUUID(),
+										   object->getName());
+		break;
+	case LLAssetType::AT_LANDMARK:
+		new_bridge = new LLTaskLandmarkBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CALLINGCARD:
+		new_bridge = new LLTaskCallingCardBridge(panel,
+												 object->getUUID(),
+												 object->getName());
+		break;
+	case LLAssetType::AT_SCRIPT:
+		// OLD SCRIPTS DEPRECATED - JC
+		llwarns << "Old script" << llendl;
+		//new_bridge = new LLTaskOldScriptBridge(panel,
+		//									   object->getUUID(),
+		//									   object->getName());
+		break;
+	case LLAssetType::AT_OBJECT:
+		new_bridge = new LLTaskObjectBridge(panel,
+											object->getUUID(),
+											object->getName());
+		break;
+	case LLAssetType::AT_NOTECARD:
+		new_bridge = new LLTaskNotecardBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_ANIMATION:
+		new_bridge = new LLTaskAnimationBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_GESTURE:
+		new_bridge = new LLTaskGestureBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_BODYPART:
+		item = (LLInventoryItem*)object;
+		new_bridge = new LLTaskWearableBridge(panel,
+											  object->getUUID(),
+											  object->getName(),
+											  type,
+											  item->getFlags());
+		break;
+	case LLAssetType::AT_CATEGORY:
+		new_bridge = new LLTaskCategoryBridge(panel,
+											  object->getUUID(),
+											  object->getName());
+		break;
+	case LLAssetType::AT_LSL_TEXT:
+		new_bridge = new LLTaskLSLBridge(panel,
+										 object->getUUID(),
+										 object->getName());
+		break;
+	
+		break;
+	default:
+		llinfos << "Unhandled inventory type (llassetstorage.h): "
+				<< (S32)type << llendl;
+		break;
+	}
+	return new_bridge;
+}
+
+
+///----------------------------------------------------------------------------
+/// Class LLPanelObjectInventory
+///----------------------------------------------------------------------------
+
+static LLDefaultChildRegistry::Register<LLPanelObjectInventory> r("panel_inventory_object");
+
+void do_nothing()
+{
+}
+
+// Default constructor
+LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Params& p) :
+	LLPanel(p),
+	mScroller(NULL),
+	mFolders(NULL),
+	mHaveInventory(FALSE),
+	mIsInventoryEmpty(TRUE),
+	mInventoryNeedsUpdate(FALSE)
+{
+	// Setup context menu callbacks
+	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
+	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));
+	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));
+	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing));
+	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing));
+}
+
+// Destroys the object
+LLPanelObjectInventory::~LLPanelObjectInventory()
+{
+	if (!gIdleCallbacks.deleteFunction(idle, this))
+	{
+		llwarns << "LLPanelObjectInventory::~LLPanelObjectInventory() failed to delete callback" << llendl;
+	}
+}
+
+BOOL LLPanelObjectInventory::postBuild()
+{
+	// clear contents and initialize menus, sets up mFolders
+	reset();
+
+	// Register an idle update callback
+	gIdleCallbacks.addFunction(idle, this);
+
+	return TRUE;
+}
+
+void LLPanelObjectInventory::doToSelected(const LLSD& userdata)
+{
+	mFolders->doToSelected(&gInventory, userdata);
+}
+
+void LLPanelObjectInventory::clearContents()
+{
+	mHaveInventory = FALSE;
+	mIsInventoryEmpty = TRUE;
+	if (LLToolDragAndDrop::getInstance() && LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_WORLD)
+	{
+		LLToolDragAndDrop::getInstance()->endDrag();
+	}
+
+	if( mScroller )
+	{
+		// removes mFolders
+		removeChild( mScroller ); //*TODO: Really shouldn't do this during draw()/refresh()
+		mScroller->die();
+		mScroller = NULL;
+		mFolders = NULL;
+	}
+}
+
+
+void LLPanelObjectInventory::reset()
+{
+	clearContents();
+
+	setBorderVisible(FALSE);
+	
+	mCommitCallbackRegistrar.pushScope(); // push local callbacks
+	
+	LLRect dummy_rect(0, 1, 1, 0);
+	LLFolderView::Params p;
+	p.name = "task inventory";
+	p.task_id = getTaskUUID();
+	p.parent_panel = this;
+	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
+	// this ensures that we never say "searching..." or "no items found"
+	mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
+
+	LLRect scroller_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
+	LLScrollContainer::Params scroll_p;
+	scroll_p.name("task inventory scroller");
+	scroll_p.rect(scroller_rect);
+	scroll_p.follows.flags(FOLLOWS_ALL);
+	mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroll_p);
+	addChild(mScroller);
+	mScroller->addChild(mFolders);
+	
+	mFolders->setScrollContainer( mScroller );
+	
+	mCommitCallbackRegistrar.popScope();
+}
+
+void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
+										InventoryObjectList* inventory,
+										S32 serial_num,
+										void* data)
+{
+	if(!object) return;
+
+	//llinfos << "invetnory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	if(mTaskUUID == object->mID)
+	{
+		mInventoryNeedsUpdate = TRUE;
+	}
+
+	// refresh any properties floaters that are hanging around.
+	if(inventory)
+	{
+		for (InventoryObjectList::const_iterator iter = inventory->begin();
+			 iter != inventory->end(); )
+		{
+			LLInventoryObject* item = *iter++;
+			LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID());
+			if(floater)
+			{
+				floater->refresh();
+			}
+		}
+	}
+}
+
+void LLPanelObjectInventory::updateInventory()
+{
+	//llinfos << "inventory arrived: \n"
+	//		<< " panel UUID: " << panel->mTaskUUID << "\n"
+	//		<< " task  UUID: " << object->mID << llendl;
+	// We're still interested in this task's inventory.
+	std::set<LLUUID> selected_items;
+	BOOL inventory_has_focus = FALSE;
+	if (mHaveInventory && mFolders->getNumSelectedDescendants())
+	{
+		mFolders->getSelectionList(selected_items);
+		inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
+	}
+
+	reset();
+
+	LLViewerObject* objectp = gObjectList.findObject(mTaskUUID);
+	if (objectp)
+	{
+		LLInventoryObject* inventory_root = objectp->getInventoryRoot();
+		InventoryObjectList contents;
+		objectp->getInventoryContents(contents);
+		if (inventory_root)
+		{
+			createFolderViews(inventory_root, contents);
+			mHaveInventory = TRUE;
+			mIsInventoryEmpty = FALSE;
+			mFolders->setEnabled(TRUE);
+		}
+		else
+		{
+			// TODO: create an empty inventory
+			mIsInventoryEmpty = TRUE;
+			mHaveInventory = TRUE;
+		}
+	}
+	else
+	{
+		// TODO: create an empty inventory
+		mIsInventoryEmpty = TRUE;
+		mHaveInventory = TRUE;
+	}
+
+	// restore previous selection
+	std::set<LLUUID>::iterator selection_it;
+	BOOL first_item = TRUE;
+	for (selection_it = selected_items.begin(); selection_it != selected_items.end(); ++selection_it)
+	{
+		LLFolderViewItem* selected_item = mFolders->getItemByID(*selection_it);
+		if (selected_item)
+		{
+			//HACK: "set" first item then "change" each other one to get keyboard focus right
+			if (first_item)
+			{
+				mFolders->setSelection(selected_item, TRUE, inventory_has_focus);
+				first_item = FALSE;
+			}
+			else
+			{
+				mFolders->changeSelection(selected_item, TRUE);
+			}
+		}
+	}
+
+	mFolders->requestArrange();
+	mInventoryNeedsUpdate = FALSE;
+}
+
+// *FIX: This is currently a very expensive operation, because we have
+// to iterate through the inventory one time for each category. This
+// leads to an N^2 based on the category count. This could be greatly
+// speeded with an efficient multimap implementation, but we don't
+// have that in our current arsenal.
+void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents)
+{
+	if (!inventory_root)
+	{
+		return;
+	}
+	// Create a visible root category.
+	LLTaskInvFVBridge* bridge = NULL;
+	bridge = LLTaskInvFVBridge::createObjectBridge(this, inventory_root);
+	if(bridge)
+	{
+		LLFolderViewFolder* new_folder = NULL;
+		LLFolderViewFolder::Params p;
+		p.name = inventory_root->getName();
+		p.icon = LLUI::getUIImage("Inv_FolderClosed");
+		p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+		p.root = mFolders;
+		p.listener = bridge;
+		new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+		new_folder->addToFolder(mFolders, mFolders);
+		new_folder->toggleOpen();
+
+		createViewsForCategory(&contents, inventory_root, new_folder);
+	}
+}
+
+typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair;
+
+void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, 
+											  LLInventoryObject* parent,
+											  LLFolderViewFolder* folder)
+{
+	// Find all in the first pass
+	LLDynamicArray<obj_folder_pair*> child_categories;
+	LLTaskInvFVBridge* bridge;
+	LLFolderViewItem* view;
+
+	InventoryObjectList::iterator it = inventory->begin();
+	InventoryObjectList::iterator end = inventory->end();
+	for( ; it != end; ++it)
+	{
+		LLInventoryObject* obj = *it;
+
+		if(parent->getUUID() == obj->getParentUUID())
+		{
+			bridge = LLTaskInvFVBridge::createObjectBridge(this, obj);
+			if(!bridge)
+			{
+				continue;
+			}
+			if(LLAssetType::AT_CATEGORY == obj->getType())
+			{
+				LLFolderViewFolder::Params p;
+				p.name = obj->getName();
+				p.icon = LLUI::getUIImage("Inv_FolderClosed");
+				p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
+				p.root = mFolders;
+				p.listener = bridge;
+				view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
+				child_categories.put(new obj_folder_pair(obj,
+														 (LLFolderViewFolder*)view));
+			}
+			else
+			{
+				LLFolderViewItem::Params params;
+				params.name(obj->getName());
+				params.icon(bridge->getIcon());
+				params.creation_date(bridge->getCreationDate());
+				params.root(mFolders);
+				params.listener(bridge);
+				params.rect(LLRect());
+				view = LLUICtrlFactory::create<LLFolderViewItem> (params);
+			}
+			view->addToFolder(folder, mFolders);
+		}
+	}
+
+	// now, for each category, do the second pass
+	for(S32 i = 0; i < child_categories.count(); i++)
+	{
+		createViewsForCategory(inventory, child_categories[i]->first,
+							   child_categories[i]->second );
+		delete child_categories[i];
+	}
+}
+
+void LLPanelObjectInventory::refresh()
+{
+	//llinfos << "LLPanelObjectInventory::refresh()" << llendl;
+	BOOL has_inventory = FALSE;
+	const BOOL non_root_ok = TRUE;
+	LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
+	if(node)
+	{
+		LLViewerObject* object = node->getObject();
+		if(object && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
+					  || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)))
+		{
+			// determine if we need to make a request. Start with a
+			// default based on if we have inventory at all.
+			BOOL make_request = !mHaveInventory;
+
+			// If the task id is different than what we've stored,
+			// then make the request.
+			if(mTaskUUID != object->mID)
+			{
+				mTaskUUID = object->mID;
+				make_request = TRUE;
+
+				// This is a new object so pre-emptively clear the contents
+				// Otherwise we show the old stuff until the update comes in
+				clearContents();
+
+				// Register for updates from this object,
+				registerVOInventoryListener(object,NULL);
+			}
+
+			// Based on the node information, we may need to dirty the
+			// object inventory and get it again.
+			if(node->mValid)
+			{
+				if(node->mInventorySerial != object->getInventorySerial() || object->isInventoryDirty())
+				{
+					make_request = TRUE;
+				}
+			}
+
+			// do the request if necessary.
+			if(make_request)
+			{
+				requestVOInventory();
+			}
+			has_inventory = TRUE;
+		}
+	}
+	if(!has_inventory)
+	{
+		mTaskUUID = LLUUID::null;
+		removeVOInventoryListener();
+		clearContents();
+	}
+	//llinfos << "LLPanelObjectInventory::refresh() " << mTaskUUID << llendl;
+}
+
+void LLPanelObjectInventory::removeSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->removeSelectedItems();
+	}
+}
+
+void LLPanelObjectInventory::startRenamingSelectedItem()
+{
+	if(mFolders)
+	{
+		mFolders->startRenamingSelectedItem();
+	}
+}
+
+void LLPanelObjectInventory::draw()
+{
+	LLPanel::draw();
+
+	if(mIsInventoryEmpty)
+	{
+		if((LLUUID::null != mTaskUUID) && (!mHaveInventory))
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("LoadingContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+		else if(mHaveInventory)
+		{
+			LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("NoContents"), 0,
+													 (S32)(getRect().getWidth() * 0.5f),
+													 10,
+													 LLColor4( 1, 1, 1, 1 ),
+													 LLFontGL::HCENTER,
+													 LLFontGL::BOTTOM);
+		}
+	}
+}
+
+void LLPanelObjectInventory::deleteAllChildren()
+{
+	mScroller = NULL;
+	mFolders = NULL;
+	LLView::deleteAllChildren();
+}
+
+BOOL LLPanelObjectInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
+{
+	if (mFolders && mHaveInventory)
+	{
+		LLFolderViewItem* folderp = mFolders->getNextFromChild(NULL);
+		if (!folderp)
+		{
+			return FALSE;
+		}
+		// Try to pass on unmodified mouse coordinates
+		S32 local_x = x - mFolders->getRect().mLeft;
+		S32 local_y = y - mFolders->getRect().mBottom;
+
+		if (mFolders->pointInView(local_x, local_y))
+		{
+			return mFolders->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+		else
+		{
+			//force mouse coordinates to be inside folder rectangle
+			return mFolders->handleDragAndDrop(5, 1, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+		}
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+//static
+void LLPanelObjectInventory::idle(void* user_data)
+{
+	LLPanelObjectInventory* self = (LLPanelObjectInventory*)user_data;
+
+
+	if (self->mInventoryNeedsUpdate)
+	{
+		self->updateInventory();
+	}
+}
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
new file mode 100644
index 0000000000000000000000000000000000000000..6722bb212e5afc8c26e7f81f9d1726d97aef82f5
--- /dev/null
+++ b/indra/newview/llpanelobjectinventory.h
@@ -0,0 +1,102 @@
+/** 
+ * @file llpanelobjectinventory.h
+ * @brief LLPanelObjectInventory class definition
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELOBJECTINVENTORY_H
+#define LL_LLPANELOBJECTINVENTORY_H
+
+#include "llvoinventorylistener.h"
+#include "llpanel.h"
+
+#include "llinventory.h"
+
+class LLScrollContainer;
+class LLFolderView;
+class LLFolderViewFolder;
+class LLViewerObject;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLPanelObjectInventory
+//
+// This class represents the panel used to view and control a
+// particular task's inventory.
+//
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
+{
+public:
+	// dummy param block for template registration purposes
+	struct Params : public LLPanel::Params {};
+
+	LLPanelObjectInventory(const Params&);
+	virtual ~LLPanelObjectInventory();
+	
+	virtual BOOL postBuild();
+
+	void doToSelected(const LLSD& userdata);
+	
+	void refresh();
+	const LLUUID& getTaskUUID() { return mTaskUUID;}
+	void removeSelectedItem();
+	void startRenamingSelectedItem();
+
+	LLFolderView* getRootFolder() const { return mFolders; }
+
+	virtual void draw();
+	virtual void deleteAllChildren();
+	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
+	
+	static void idle(void* user_data);
+
+protected:
+	void reset();
+	/*virtual*/ void inventoryChanged(LLViewerObject* object,
+								 InventoryObjectList* inventory,
+								 S32 serial_num,
+								 void* user_data);
+	void updateInventory();
+	void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
+	void createViewsForCategory(InventoryObjectList* inventory,
+								LLInventoryObject* parent,
+								LLFolderViewFolder* folder);
+	void clearContents();
+
+private:
+	LLScrollContainer* mScroller;
+	LLFolderView* mFolders;
+	
+	LLUUID mTaskUUID;
+	BOOL mHaveInventory;
+	BOOL mIsInventoryEmpty;
+	BOOL mInventoryNeedsUpdate;
+};
+
+#endif // LL_LLPANELOBJECTINVENTORY_H
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 4580eeb336af3591db99b8d0f7da2020ded7e0dd..a6083a5755f8e82a00407c298020fe7a3810b367 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -42,6 +42,7 @@
 #include "llpanelpeople.h"
 
 // newview
+#include "llaccordionctrl.h"
 #include "llaccordionctrltab.h"
 #include "llagent.h"
 #include "llavataractions.h"
@@ -197,7 +198,8 @@ class LLFriendListUpdater : public LLAvatarListUpdater, public LLFriendObserver
 
 	~LLFriendListUpdater()
 	{
-		delete mInvObserver;
+		// will be deleted by ~LLInventoryModel
+		//delete mInvObserver;
 		LLVoiceClient::getInstance()->removeObserver(this);
 		LLAvatarTracker::instance().removeObserver(this);
 	}
@@ -453,7 +455,7 @@ BOOL LLPanelPeople::postBuild()
 	mNearbyList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mNearbyList));
 	mRecentList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mRecentList));
 
-	mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onGroupInfoButtonClicked, this));
+	mGroupList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onChatButtonClicked, this));
 	mGroupList->setCommitCallback(boost::bind(&LLPanelPeople::updateButtons, this));
 
 	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all");
@@ -516,6 +518,9 @@ BOOL LLPanelPeople::postBuild()
 	// call this method in case some list is empty and buttons can be in inconsistent state
 	updateButtons();
 
+	mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+	mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
+
 	return TRUE;
 }
 
@@ -560,6 +565,8 @@ void LLPanelPeople::updateFriendList()
 
 	mOnlineFriendList->setDirty();
 	mAllFriendList->setDirty();
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::updateNearbyList()
@@ -582,14 +589,9 @@ void LLPanelPeople::updateRecentList()
 
 void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible)
 {
-	// Currently all bottom buttons are wrapped with layout panels.
-	// Hiding a button has no effect: the panel still occupies its space.
-	// So we have to hide the whole panel (along with its button)
-	// to free some space up.
-	LLButton* btn = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
-	LLPanel* btn_parent = dynamic_cast<LLPanel*>(btn->getParent());
-	if (btn_parent)
-		btn_parent->setVisible(visible);
+	// To make sure we're referencing the right widget (a child of the button bar).
+	LLButton* button = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
+	button->setVisible(visible);
 }
 
 void LLPanelPeople::buttonSetEnabled(const std::string& btn_name, bool enabled)
@@ -618,14 +620,16 @@ void LLPanelPeople::updateButtons()
 	std::vector<LLUUID> selected_uuids;
 	getCurrentItemIDs(selected_uuids);
 	bool item_selected = (selected_uuids.size() == 1);
+	bool multiple_selected = (selected_uuids.size() >= 1);
 
 	buttonSetVisible("group_info_btn",		group_tab_active);
 	buttonSetVisible("chat_btn",			group_tab_active);
 	buttonSetVisible("add_friend_btn",		nearby_tab_active || recent_tab_active);
 	buttonSetVisible("view_profile_btn",	!group_tab_active);
 	buttonSetVisible("im_btn",				!group_tab_active);
+	buttonSetVisible("call_btn",			!group_tab_active);
 	buttonSetVisible("teleport_btn",		friends_tab_active);
-	buttonSetVisible("share_btn",			!recent_tab_active && false); // not implemented yet
+	buttonSetVisible("share_btn",			nearby_tab_active || friends_tab_active);
 
 	if (group_tab_active)
 	{
@@ -658,11 +662,13 @@ void LLPanelPeople::updateButtons()
 
 	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected);
 	buttonSetEnabled("view_profile_btn",	item_selected);
-	buttonSetEnabled("im_btn",				(selected_uuids.size() >= 1)); // allow starting the friends conference for multiple selection
-	buttonSetEnabled("call_btn",			item_selected && false); // not implemented yet
+	buttonSetEnabled("im_btn",				multiple_selected); // allow starting the friends conference for multiple selection
+	buttonSetEnabled("call_btn",			item_selected);
 	buttonSetEnabled("share_btn",			item_selected && false); // not implemented yet
-	buttonSetEnabled("group_info_btn",		item_selected);
-	buttonSetEnabled("chat_btn",			item_selected);
+
+	bool none_group_selected = item_selected && selected_id.isNull();
+	buttonSetEnabled("group_info_btn", !none_group_selected);
+	buttonSetEnabled("chat_btn", !none_group_selected);
 }
 
 std::string LLPanelPeople::getActiveTabName() const
@@ -797,14 +803,15 @@ void LLPanelPeople::reSelectedCurrentTab()
 
 void LLPanelPeople::onFilterEdit(const std::string& search_string)
 {
-	if (mFilterSubString == search_string)
-		return;
+	std::string search_upper = search_string;
+	// Searches are case-insensitive
+	LLStringUtil::toUpper(search_upper);
+	LLStringUtil::trimHead(search_upper);
 
-	mFilterSubString = search_string;
+	if (mFilterSubString == search_upper)
+		return;
 
-	// Searches are case-insensitive
-	LLStringUtil::toUpper(mFilterSubString);
-	LLStringUtil::trimHead(mFilterSubString);
+	mFilterSubString = search_upper;
 
 	// Apply new filter.
 	mNearbyList->setNameFilter(mFilterSubString);
@@ -812,6 +819,8 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
 	mAllFriendList->setNameFilter(mFilterSubString);
 	mRecentList->setNameFilter(mFilterSubString);
 	mGroupList->setNameFilter(mFilterSubString);
+
+	showFriendsAccordionsIfNeeded();
 }
 
 void LLPanelPeople::onTabSelected(const LLSD& param)
@@ -983,9 +992,6 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
 		mAllFriendList->toggleIcons();
 		mOnlineFriendList->toggleIcons();
 	}
-	else if (chosen_item == "organize_offline")
-	{
-	}
 }
 
 void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata)
@@ -1063,7 +1069,18 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata)
 
 void LLPanelPeople::onCallButtonClicked()
 {
-	// *TODO: not implemented yet
+	std::vector<LLUUID> selected_uuids;
+	getCurrentItemIDs(selected_uuids);
+
+	if (selected_uuids.size() == 1)
+	{
+		// initiate a P2P voice chat with the selected user
+		LLAvatarActions::startCall(getCurrentItemID());
+	}
+	else if (selected_uuids.size() > 1)
+	{
+		// *NOTE: ad-hoc voice chat not implemented yet
+	}
 }
 
 void LLPanelPeople::onTeleportButtonClicked()
@@ -1124,3 +1141,49 @@ void	LLPanelPeople::onOpen(const LLSD& key)
 	else
 		reSelectedCurrentTab();
 }
+
+void LLPanelPeople::showAccordion(const std::string name, bool show)
+{
+	if(name.empty())
+	{
+		llwarns << "No name provided" << llendl;
+		return;
+	}
+
+	LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name);
+	tab->setVisible(show);
+	if(show)
+	{
+		// expand accordion
+		tab->changeOpenClose(false);
+	}
+}
+
+void LLPanelPeople::showFriendsAccordionsIfNeeded()
+{
+	if(FRIENDS_TAB_NAME == getActiveTabName())
+	{
+		// Expand and show accordions if needed, else - hide them
+		showAccordion("tab_online", mOnlineFriendList->filterHasMatches());
+		showAccordion("tab_all", mAllFriendList->filterHasMatches());
+
+		// Rearrange accordions
+		LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+		accordion->arrange();
+	}
+}
+
+void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param)
+{
+	if(ctrl == mOnlineFriendList)
+	{
+		showAccordion("tab_online", param.asInteger());
+	}
+	else if(ctrl == mAllFriendList)
+	{
+		showAccordion("tab_all", param.asInteger());
+	}
+
+	LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
+	accordion->arrange();
+}
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index dc0aaeb70f1f19f4f69d73a4d9eb0f4293b2a9fe..9bf9befe906bee1623a9c4c0c513536689d0be71 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -124,6 +124,12 @@ class LLPanelPeople : public LLPanel
 
 	void					onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list);
 
+	void					showAccordion(const std::string name, bool show);
+
+	void					showFriendsAccordionsIfNeeded();
+
+	void					onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
+
 	LLFilterEditor*			mFilterEditor;
 	LLTabContainer*			mTabContainer;
 	LLAvatarList*			mOnlineFriendList;
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index aaf6849fe94128f50226b54307259a3c14adb4c9..7dea5eaf6758539380d33b2aa694c8a98a103f20 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -64,7 +64,6 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 		mMenu = NULL;
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index e725479abb5fe27eab0ca3aa82b462b2448b9c45..f5c4f89702b88bbf16e808820c0a2e895e6cefdd 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -40,6 +40,7 @@
 #include "llagent.h"
 #include "llagentpicksinfo.h"
 #include "llbutton.h"
+#include "lliconctrl.h"
 #include "lllineeditor.h"
 #include "llparcel.h"
 #include "llviewerparcelmgr.h"
@@ -62,6 +63,7 @@
 #define XML_SNAPSHOT	"pick_snapshot"
 #define XML_LOCATION	"pick_location"
 
+#define XML_BTN_ON_TXTR "edit_icon"
 #define XML_BTN_SAVE "save_changes_btn"
 
 #define SAVE_BTN_LABEL "[WHAT]"
@@ -401,8 +403,6 @@ BOOL LLPanelPickEdit::postBuild()
 	LLPanelPickInfo::postBuild();
 
 	mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1));
-	mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", true));
-	mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::childSetVisible, this, "edit_icon", false));
 
 	LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name");
 	line_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1), NULL);
@@ -413,6 +413,8 @@ BOOL LLPanelPickEdit::postBuild()
 	childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPickEdit::onClickSave, this));
 	childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPickEdit::onClickSetLocation, this));
 
+	initTexturePickerMouseEvents();
+
 	return TRUE;
 }
 
@@ -547,3 +549,23 @@ void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type)
 		LLPanelPickInfo::processProperties(data, type);
 	}
 }
+
+// PRIVATE AREA
+
+void LLPanelPickEdit::initTexturePickerMouseEvents()
+{
+	text_icon = getChild<LLIconCtrl>(XML_BTN_ON_TXTR);
+	mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseEnter, this, _1));
+	mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseLeave, this, _1));
+	text_icon->setVisible(FALSE);
+}
+		
+void LLPanelPickEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
+{
+        text_icon->setVisible(TRUE);
+}
+
+void LLPanelPickEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
+{
+	text_icon->setVisible(FALSE);
+}
diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h
index 9b605cd6b1a40a6cfc959fa219303cf4b4a370b7..2c0830f2ac7f7f1d53f6c58312a644bfc239c761 100644
--- a/indra/newview/llpanelpick.h
+++ b/indra/newview/llpanelpick.h
@@ -41,6 +41,7 @@
 #include "llremoteparcelrequest.h"
 #include "llavatarpropertiesprocessor.h"
 
+class LLIconCtrl;
 class LLTextureCtrl;
 class LLMessageSystem;
 class LLAvatarPropertiesObserver;
@@ -236,6 +237,16 @@ class LLPanelPickEdit : public LLPanelPickInfo
 	bool mLocationChanged;
 	bool mNeedData;
 	bool mNewPick;
+
+private:
+
+	void initTexturePickerMouseEvents();
+        void onTexturePickerMouseEnter(LLUICtrl* ctrl);
+	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+
+private:
+
+	LLIconCtrl* text_icon;
 };
 
 #endif // LL_LLPANELPICK_H
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 6181531f82e1968ed1b2109409527144e91360f1..2bf04f96814233a6507466fcefd0487b8a52081d 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 06a0f0a0fdb3291dde52161ec4e9b5cd24ee6d51..5a2754ad106fd7b8767f6dfea28f9a4273e50a83 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 34644cfe42d1bca8177db115f489214568c71f87..c60065101581e1c1a4053fcba49d2b1bf5a2f341 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -1,10 +1,10 @@
 /**
  * @file llpanelplaceinfo.cpp
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -38,67 +38,30 @@
 #include "llsdutil.h"
 #include "llsecondlifeurls.h"
 
-#include "llinventory.h"
-#include "llparcel.h"
-
-#include "llqueryflags.h"
+#include "llsdutil_math.h"
 
-#include "llbutton.h"
-#include "llcombobox.h"
-#include "lliconctrl.h"
 #include "llscrollcontainer.h"
 #include "lltextbox.h"
-#include "lltrans.h"
 
-#include "llaccordionctrl.h"
-#include "llaccordionctrltab.h"
 #include "llagent.h"
-#include "llagentui.h"
-#include "llappviewer.h"
 #include "llavatarpropertiesprocessor.h"
-#include "llcallbacklist.h"
 #include "llexpandabletextbox.h"
-#include "llfloaterworldmap.h"
-#include "llfloaterbuycurrency.h"
-#include "llinventorymodel.h"
-#include "lllandmarkactions.h"
 #include "llpanelpick.h"
 #include "lltexturectrl.h"
-#include "llstatusbar.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
-#include "llviewercontrol.h" 
 #include "llviewertexteditor.h"
-#include "llworldmap.h"
-#include "llsdutil_math.h"
-
-//----------------------------------------------------------------------------
-// Aux types and methods
-//----------------------------------------------------------------------------
-
-typedef std::pair<LLUUID, std::string> folder_pair_t;
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
-
-static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info");
 
 LLPanelPlaceInfo::LLPanelPlaceInfo()
 :	LLPanel(),
 	mParcelID(),
 	mRequestedID(),
 	mPosRegion(),
-	mLandmarkID(),
-	mMinHeight(0),
-	mScrollingPanel(NULL),
-	mInfoPanel(NULL),
-	mMediaPanel(NULL),
-	mForSalePanel(NULL),
-	mYouAreHerePanel(NULL),
-	mSelectedParcelID(-1)
+	mMinHeight(0)
 {}
 
+//virtual
 LLPanelPlaceInfo::~LLPanelPlaceInfo()
 {
 	if (mParcelID.notNull())
@@ -107,220 +70,41 @@ LLPanelPlaceInfo::~LLPanelPlaceInfo()
 	}
 }
 
+//virtual
 BOOL LLPanelPlaceInfo::postBuild()
 {
-	mTitle = getChild<LLTextBox>("panel_title");
+	mTitle = getChild<LLTextBox>("title");
 	mCurrentTitle = mTitle->getText();
 
-	mForSalePanel = getChild<LLPanel>("for_sale_panel");
-	mYouAreHerePanel = getChild<LLPanel>("here_panel");
-	gIdleCallbacks.addFunction(&LLPanelPlaceInfo::updateYouAreHereBanner, this);
-	
-	//Icon value should contain sale price of last selected parcel. 
-	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
-				setMouseDownCallback(boost::bind(&LLPanelPlaceInfo::onForSaleBannerClick, this));
-
 	mSnapshotCtrl = getChild<LLTextureCtrl>("logo");
 	mRegionName = getChild<LLTextBox>("region_title");
 	mParcelName = getChild<LLTextBox>("parcel_title");
 	mDescEditor = getChild<LLExpandableTextBox>("description");
 
 	mMaturityRatingText = getChild<LLTextBox>("maturity_value");
-	mParcelOwner = getChild<LLTextBox>("owner_value");
-	mLastVisited = getChild<LLTextBox>("last_visited_value");
-
-	mRatingText = getChild<LLTextBox>("rating_value");
-	mVoiceText = getChild<LLTextBox>("voice_value");
-	mFlyText = getChild<LLTextBox>("fly_value");
-	mPushText = getChild<LLTextBox>("push_value");
-	mBuildText = getChild<LLTextBox>("build_value");
-	mScriptsText = getChild<LLTextBox>("scripts_value");
-	mDamageText = getChild<LLTextBox>("damage_value");
-
-	mRegionNameText = getChild<LLTextBox>("region_name");
-	mRegionTypeText = getChild<LLTextBox>("region_type");
-	mRegionRatingText = getChild<LLTextBox>("region_rating");
-	mRegionOwnerText = getChild<LLTextBox>("region_owner");
-	mRegionGroupText = getChild<LLTextBox>("region_group");
-
-	mEstateNameText = getChild<LLTextBox>("estate_name");
-	mEstateRatingText = getChild<LLTextBox>("estate_rating");
-	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
-	mCovenantText = getChild<LLTextEditor>("covenant");
 
-	mSalesPriceText = getChild<LLTextBox>("sales_price");
-	mAreaText = getChild<LLTextBox>("area");
-	mTrafficText = getChild<LLTextBox>("traffic");
-	mPrimitivesText = getChild<LLTextBox>("primitives");
-	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
-	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
-	mSubdivideText = getChild<LLTextEditor>("subdivide");
-	mResaleText = getChild<LLTextEditor>("resale");
-	mSaleToText = getChild<LLTextBox>("sale_to");
-
-	mOwner = getChild<LLTextBox>("owner");
-	mCreator = getChild<LLTextBox>("creator");
-	mCreated = getChild<LLTextBox>("created");
-
-	mTitleEditor = getChild<LLLineEditor>("title_editor");
-	mNotesEditor = getChild<LLTextEditor>("notes_editor");
-	mFolderCombo = getChild<LLComboBox>("folder_combo");
-
-	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("scroll_container");
+	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll");
 	scroll_container->setBorderVisible(FALSE);
 	mMinHeight = scroll_container->getScrolledViewRect().getHeight();
 
-	mScrollingPanel = getChild<LLPanel>("scrolling_panel");
-	mInfoPanel = getChild<LLPanel>("info_panel");
-	mMediaPanel = getChild<LLMediaPanel>("media_panel");
-	if (!mMediaPanel)
-		return FALSE;
-
 	return TRUE;
 }
 
-void LLPanelPlaceInfo::displayItemInfo(const LLInventoryItem* pItem)
-{
-	if (!pItem)
-		return;
-
-	mLandmarkID = pItem->getUUID();
-
-	if(!gCacheName)
-		return;
-
-	const LLPermissions& perm = pItem->getPermissions();
-
-	//////////////////
-	// CREATOR NAME //
-	//////////////////
-	if (pItem->getCreatorUUID().notNull())
-	{
-		std::string name;
-		LLUUID creator_id = pItem->getCreatorUUID();
-		if (!gCacheName->getFullName(creator_id, name))
-		{
-			gCacheName->get(creator_id, FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mCreator, _2, _3));
-		}
-		mCreator->setText(name);
-	}
-	else
-	{
-		mCreator->setText(getString("unknown"));
-	}
-
-	////////////////
-	// OWNER NAME //
-	////////////////
-	if(perm.isOwned())
-	{
-		std::string name;
-		if (perm.isGroupOwned())
-		{
-			LLUUID group_id = perm.getGroup();
-			if (!gCacheName->getGroupName(group_id, name))
-			{
-				gCacheName->get(group_id, TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		else
-		{
-			LLUUID owner_id = perm.getOwner();
-			if (!gCacheName->getFullName(owner_id, name))
-			{
-				gCacheName->get(owner_id, FALSE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3));
-			}
-		}
-		mOwner->setText(name);
-	}
-	else
-	{
-		mOwner->setText(getString("public"));
-	}
-	
-	//////////////////
-	// ACQUIRE DATE //
-	//////////////////
-	time_t time_utc = pItem->getCreationDate();
-	if (0 == time_utc)
-	{
-		mCreated->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) time_utc;
-		LLStringUtil::format (timeStr, substitution);
-		mCreated->setText(timeStr);
-	}
-
-	mTitleEditor->setText(pItem->getName());
-	mNotesEditor->setText(pItem->getDescription());
-}
-
-void LLPanelPlaceInfo::nameUpdatedCallback(
-	LLTextBox* text,
-	const std::string& first,
-	const std::string& last)
-{
-	text->setText(first + " " + last);
-}
-
+//virtual
 void LLPanelPlaceInfo::resetLocation()
 {
 	mParcelID.setNull();
 	mRequestedID.setNull();
-	mLandmarkID.setNull();
 	mPosRegion.clearVec();
-	mForSalePanel->setVisible(FALSE);
-	mYouAreHerePanel->setVisible(FALSE);
+
 	std::string not_available = getString("not_available");
 	mMaturityRatingText->setValue(not_available);
-	mParcelOwner->setValue(not_available);
-	mLastVisited->setValue(not_available);
 	mRegionName->setText(not_available);
 	mParcelName->setText(not_available);
 	mDescEditor->setText(not_available);
-	mCreator->setText(not_available);
-	mOwner->setText(not_available);
-	mCreated->setText(not_available);
-	mTitleEditor->setText(LLStringUtil::null);
-	mNotesEditor->setText(LLStringUtil::null);
+
 	mSnapshotCtrl->setImageAssetID(LLUUID::null);
 	mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");
-
-	mRatingText->setText(not_available);
-	mVoiceText->setText(not_available);
-	mFlyText->setText(not_available);
-	mPushText->setText(not_available);
-	mBuildText->setText(not_available);
-	mParcelScriptsText->setText(not_available);
-	mDamageText->setText(not_available);
-
-	mRegionNameText->setValue(not_available);
-	mRegionTypeText->setValue(not_available);
-	mRegionRatingText->setValue(not_available);
-	mRegionOwnerText->setValue(not_available);
-	mRegionGroupText->setValue(not_available);
-
-	mEstateNameText->setValue(not_available);
-	mEstateRatingText->setValue(not_available);
-	mEstateOwnerText->setValue(not_available);
-	mCovenantText->setValue(not_available);
-
-	mSalesPriceText->setValue(not_available);
-	mAreaText->setValue(not_available);
-	mTrafficText->setValue(not_available);
-	mPrimitivesText->setValue(not_available);
-	mParcelScriptsText->setValue(not_available);
-	mTerraformLimitsText->setValue(not_available);
-	mSubdivideText->setValue(not_available);
-	mResaleText->setValue(not_available);
-	mSaleToText->setValue(not_available);
 }
 
 //virtual
@@ -330,108 +114,55 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id)
 	sendParcelInfoRequest();
 }
 
+//virtual
 void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 {
-	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
-	LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel");
-
-	bool is_info_type_agent = type == AGENT;
-	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
-	bool is_info_type_landmark = type == LANDMARK;
-	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
-
-	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
-	mMaturityRatingText->setVisible(!is_info_type_agent);
-
-	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
-	mParcelOwner->setVisible(is_info_type_agent);
-
-	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
-	mLastVisited->setVisible(is_info_type_teleport_history);
-
-	landmark_info_panel->setVisible(is_info_type_landmark);
-	landmark_edit_panel->setVisible(is_info_type_landmark || is_info_type_create_landmark);
-
-	getChild<LLTextBox>("folder_lable")->setVisible(is_info_type_create_landmark);
-	mFolderCombo->setVisible(is_info_type_create_landmark);
-
-	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
-
-	switch(type)
-	{
-		case CREATE_LANDMARK:
-			mCurrentTitle = getString("title_create_landmark");
-
-			mTitleEditor->setEnabled(TRUE);
-			mNotesEditor->setEnabled(TRUE);
-
-			populateFoldersList();
-		break;
-
-		case AGENT:
-		case PLACE:
-			mCurrentTitle = getString("title_place");
-
-			if (!isMediaPanelVisible())
-			{
-				mTitle->setText(mCurrentTitle);
-			}
-		break;
-
-		case LANDMARK:
-			mCurrentTitle = getString("title_landmark");
-
-			mTitleEditor->setEnabled(FALSE);
-			mNotesEditor->setEnabled(FALSE);
-
-			populateFoldersList();
-		break;
-
-		case TELEPORT_HISTORY:
-			mCurrentTitle = getString("title_teleport_history");
-		break;
-	}
-
-	if (type != AGENT)
-		toggleMediaPanel(FALSE);
+	mTitle->setText(mCurrentTitle);
 
 	mInfoType = type;
 }
 
-BOOL LLPanelPlaceInfo::isMediaPanelVisible()
+void LLPanelPlaceInfo::sendParcelInfoRequest()
 {
-	if (!mMediaPanel)
-		return FALSE;
+	if (mParcelID != mRequestedID)
+	{
+		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
+		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
 
-	return mMediaPanel->getVisible();
+		mRequestedID = mParcelID;
+	}
 }
 
-void LLPanelPlaceInfo::toggleMediaPanel(BOOL visible)
+void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
+										 const LLVector3d& pos_global)
 {
-    if (!mMediaPanel)
-        return;
+	LLViewerRegion* region = gAgent.getRegion();
+	if (!region)
+		return;
+
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
 
-    if (visible)
+	LLSD body;
+	std::string url = region->getCapability("RemoteParcelRequest");
+	if (!url.empty())
 	{
-		mTitle->setText(getString("title_media"));
+		body["location"] = ll_sd_from_vector3(mPosRegion);
+		if (!region_id.isNull())
+		{
+			body["region_id"] = region_id;
+		}
+		if (!pos_global.isExactlyZero())
+		{
+			U64 region_handle = to_region_handle(pos_global);
+			body["region_handle"] = ll_sd_from_U64(region_handle);
+		}
+		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
 	}
 	else
 	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-    mInfoPanel->setVisible(!visible);
-    mMediaPanel->setVisible(visible);
-}
-
-void LLPanelPlaceInfo::sendParcelInfoRequest()
-{
-	if (mParcelID != mRequestedID)
-	{
-		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
-		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
-
-		mRequestedID = mParcelID;
+		mDescEditor->setText(getString("server_update_text"));
 	}
 }
 
@@ -486,13 +217,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	}
 
 	mMaturityRatingText->setValue(rating);
-	mRatingText->setValue(rating);
-
-	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
-	//because we deal with remote parcel response format
-	bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) &&
-					 mInfoType == AGENT ? TRUE : FALSE;
-	mForSalePanel->setVisible(is_for_sale);
 
 	S32 region_x;
 	S32 region_y;
@@ -521,408 +245,25 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	{
 		mParcelName->setText(getString("not_available"));
 	}
-
-	if (mInfoType == CREATE_LANDMARK)
-	{
-		if (parcel_data.name.empty())
-		{
-			mTitleEditor->setText(llformat("%s (%d, %d, %d)",
-								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
-		}
-		else
-		{
-			mTitleEditor->setText(parcel_data.name);
-		}
-
-		// FIXME: Creating landmark works only for current agent location.
-		std::string desc;
-		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
-		mNotesEditor->setText(desc);
-
-		if (!LLLandmarkActions::landmarkAlreadyExists())
-		{
-			createLandmark(mFolderCombo->getValue().asUUID());
-		}
-	}
 }
 
-void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id,
-										 const LLVector3d& pos_global)
+// virtual
+void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility)
 {
-	LLViewerRegion* region = gAgent.getRegion();
-	if (!region)
-		return;
-
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-
-	LLSD body;
-	std::string url = region->getCapability("RemoteParcelRequest");
-	if (!url.empty())
-	{
-		body["location"] = ll_sd_from_vector3(mPosRegion);
-		if (!region_id.isNull())
-		{
-			body["region_id"] = region_id;
-		}
-		if (!pos_global.isExactlyZero())
-		{
-			U64 region_handle = to_region_handle(pos_global);
-			body["region_handle"] = ll_sd_from_U64(region_handle);
-		}
-		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
-	}
-	else
-	{
-		mDescEditor->setText(getString("server_update_text"));
-	}
-}
+	LLPanel::handleVisibilityChange(new_visibility);
 
-void LLPanelPlaceInfo::displaySelectedParcelInfo(LLParcel* parcel,
-											  LLViewerRegion* region,
-											  const LLVector3d& pos_global,
-											  bool is_current_parcel)
-{
-	if (!region || !parcel)
+	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+	if (!parcel_mgr)
 		return;
 
-	// send EstateCovenantInfo message
-	LLMessageSystem *msg = gMessageSystem;
-	msg->newMessage("EstateCovenantRequest");
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
-	msg->sendReliable(region->getHost());
-
-	LLParcelData parcel_data;
-
-	// HACK: Converting sim access flags to the format
-	// returned by remote parcel response.
-	switch(region->getSimAccess())
-	{
-	case SIM_ACCESS_MATURE:
-		parcel_data.flags = 0x1;
-		break;
-
-	case SIM_ACCESS_ADULT:
-		parcel_data.flags = 0x2;
-		break;
-
-	default:
-		parcel_data.flags = 0;
-	}
-	parcel_data.desc = parcel->getDesc();
-	parcel_data.name = parcel->getName();
-	parcel_data.sim_name = region->getName();
-	parcel_data.snapshot_id = parcel->getSnapshotID();
-	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
-					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
-					  (F32)pos_global.mdV[VZ]);
-	parcel_data.global_x = pos_global.mdV[VX];
-	parcel_data.global_y = pos_global.mdV[VY];
-	parcel_data.global_z = pos_global.mdV[VZ];
-
-	std::string on = getString("on");
-	std::string off = getString("off");
-
-	// Processing parcel characteristics
-	if (parcel->getParcelFlagAllowVoice())
-	{
-		mVoiceText->setText(on);
-	}
-	else
-	{
-		mVoiceText->setText(off);
-	}
-
-	if (!region->getBlockFly() && parcel->getAllowFly())
-	{
-		mFlyText->setText(on);
-	}
-	else
-	{
-		mFlyText->setText(off);
-	}
-
-	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
-	{
-		mPushText->setText(off);
-	}
-	else
-	{
-		mPushText->setText(on);
-	}
-
-	if (parcel->getAllowModify())
-	{
-		mBuildText->setText(on);
-	}
-	else
-	{
-		mBuildText->setText(off);
-	}
-
-	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
-	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
-	   !parcel->getAllowOtherScripts())
-	{
-		mScriptsText->setText(off);
-	}
-	else
-	{
-		mScriptsText->setText(on);
-	}
-
-	if (region->getAllowDamage() || parcel->getAllowDamage())
-	{
-		mDamageText->setText(on);
-	}
-	else
-	{
-		mDamageText->setText(off);
-	}
-
-	mRegionNameText->setText(region->getName());
-	mRegionTypeText->setText(region->getSimProductName());
-	mRegionRatingText->setText(region->getSimAccessString());
-
-	// Determine parcel owner
-	if (parcel->isPublic())
-	{
-		mParcelOwner->setText(getString("public"));
-		mRegionOwnerText->setText(getString("public"));
-	}
-	else
-	{
-		if (parcel->getIsGroupOwned())
-		{
-			mRegionOwnerText->setText(getString("group_owned_text"));
-
-			if(!parcel->getGroupID().isNull())
-			{
-				// FIXME: Using parcel group as region group.
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionGroupText, _2, _3));
-
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			}
-			else
-			{
-				std::string owner = getString("none_text");
-				mRegionGroupText->setText(owner);
-				mParcelOwner->setText(owner);
-			}
-		}
-		else
-		{
-			// Figure out the owner's name
-			gCacheName->get(parcel->getOwnerID(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3));
-			gCacheName->get(region->getOwner(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionOwnerText, _2, _3));
-		}
-
-		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
-		{
-			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
-		}
-	}
-
-	mEstateRatingText->setText(region->getSimAccessString());
-
-	S32 area;
-	S32 claim_price;
-	S32 rent_price;
-	F32 dwell;
-	BOOL for_sale = parcel->getForSale();
-	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
-													 &claim_price,
-													 &rent_price,
-													 &for_sale,
-													 &dwell);
-	if (for_sale)
-	{
-		// Adding "For Sale" flag in remote parcel response format.
-		parcel_data.flags |= DFQ_FOR_SALE;
-
-		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
-		if(auth_buyer_id.notNull())
-		{
-			gCacheName->get(auth_buyer_id, TRUE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mSaleToText, _2, _3));
-
-			// Show sales info to a specific person or a group he belongs to.
-			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
-			{
-				for_sale = FALSE;
-			}
-		}
-		else
-		{
-			mSaleToText->setText(getString("anyone"));
-		}
-
-		const U8* sign = (U8*)getString("price_text").c_str();
-		const U8* sqm = (U8*)getString("area_text").c_str();
-
-		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
-		mAreaText->setText(llformat("%d %s", area, sqm));
-		mTrafficText->setText(llformat("%.0f", dwell));
-
-		// Can't have more than region max tasks, regardless of parcel
-		// object bonus factor.
-		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
-							   (S32)region->getMaxTasks());
-
-		const U8* available = (U8*)getString("available").c_str();
-		const U8* allocated = (U8*)getString("allocated").c_str();
-
-		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
-
-		if (parcel->getAllowOtherScripts())
-		{
-			mParcelScriptsText->setText(getString("all_residents_text"));
-		}
-		else if (parcel->getAllowGroupScripts())
-		{
-			mParcelScriptsText->setText(getString("group_text"));
-		}
-		else
-		{
-			mParcelScriptsText->setText(off);
-		}
-
-		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
-
-		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
-		{
-			mSubdivideText->setText(getString("can_change"));
-		}
-		else
-		{
-			mSubdivideText->setText(getString("can_not_change"));
-		}
-		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
-		{
-			mResaleText->setText(getString("can_not_resell"));
-		}
-		else
-		{
-			mResaleText->setText(getString("can_resell"));
-		}
-	}
-
-	mSelectedParcelID = parcel->getLocalID();
-	mLastSelectedRegionID = region->getRegionID();
-	processParcelInfo(parcel_data);
-
-	mYouAreHerePanel->setVisible(is_current_parcel);
-	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
-}
-
-void LLPanelPlaceInfo::updateEstateName(const std::string& name)
-{
-	mEstateNameText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateEstateOwnerName(const std::string& name)
-{
-	mEstateOwnerText->setText(name);
-}
-
-void LLPanelPlaceInfo::updateCovenantText(const std::string &text)
-{
-	mCovenantText->setText(text);
-}
-
-void LLPanelPlaceInfo::updateLastVisitedText(const LLDate &date)
-{
-	if (date.isNull())
-	{
-		mLastVisited->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) date.secondsSinceEpoch();
-		LLStringUtil::format (timeStr, substitution);
-		mLastVisited->setText(timeStr);
-	}
-}
-
-void LLPanelPlaceInfo::toggleLandmarkEditMode(BOOL enabled)
-{
-	// If switching to edit mode while creating landmark
-	// the "Create Landmark" title remains.
-	if (enabled && mInfoType != CREATE_LANDMARK)
-	{
-		mTitle->setText(getString("title_edit_landmark"));
-	}
-	else
-	{
-		mTitle->setText(mCurrentTitle);
-	}
-
-	if (mNotesEditor->getReadOnly() ==  (enabled == TRUE))
-	{
-		mTitleEditor->setEnabled(enabled);
-		mNotesEditor->setReadOnly(!enabled);
-		mFolderCombo->setVisible(enabled);
-		getChild<LLTextBox>("folder_lable")->setVisible(enabled);
-
-		// HACK: To change the text color in a text editor
-		// when it was enabled/disabled we set the text once again.
-		mNotesEditor->setText(mNotesEditor->getText());
-	}
-}
-
-const std::string& LLPanelPlaceInfo::getLandmarkTitle() const
-{
-	return mTitleEditor->getText();
-}
-
-const std::string LLPanelPlaceInfo::getLandmarkNotes() const
-{
-	return mNotesEditor->getText();
-}
-
-const LLUUID LLPanelPlaceInfo::getLandmarkFolder() const
-{
-	return mFolderCombo->getValue().asUUID();
-}
-
-BOOL LLPanelPlaceInfo::setLandmarkFolder(const LLUUID& id)
-{
-	return mFolderCombo->setCurrentByID(id);
-}
-
-void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
-{
-	std::string name = mTitleEditor->getText();
-	std::string desc = mNotesEditor->getText();
-
-	LLStringUtil::trim(name);
-	LLStringUtil::trim(desc);
-
-	// If typed name is empty use the parcel name instead.
-	if (name.empty())
+	// Remove land selection when panel hides.
+	if (!new_visibility)
 	{
-		name = mParcelName->getText();
-
-		// If no parcel exists use the region name instead.
-		if (name.empty())
+		if (!parcel_mgr->selectionEmpty())
 		{
-			name = mRegionName->getText();
+			parcel_mgr->deselectLand();
 		}
 	}
-
-	LLStringUtil::replaceChar(desc, '\n', ' ');
-	// If no folder chosen use the "Landmarks" folder.
-	LLLandmarkActions::createLandmarkHere(name, desc,
-		folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK));
 }
 
 void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel)
@@ -942,159 +283,10 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit*
 	pick_panel->setPickData(&data);
 }
 
-// virtual
-void LLPanelPlaceInfo::handleVisibilityChange (BOOL new_visibility)
-{
-	LLPanel::handleVisibilityChange(new_visibility);
-
-	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
-	if (!parcel_mgr)
-		return;
-
-	// Remove land selection when panel hides.
-	if (!new_visibility)
-	{
-		if (!parcel_mgr->selectionEmpty())
-		{
-			parcel_mgr->deselectLand();
-		}
-	}
-}
-
-void LLPanelPlaceInfo::populateFoldersList()
-{
-	// Collect all folders that can contain landmarks.
-	LLInventoryModel::cat_array_t cats;
-	collectLandmarkFolders(cats);
-
-	mFolderCombo->removeall();
-
-	// Put the "Landmarks" folder first in list.
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-	const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id);
-	if (!cat)
-	{
-		llwarns << "Cannot find the landmarks folder" << llendl;
-	}
-	std::string cat_full_name = getFullFolderName(cat);
-	mFolderCombo->add(cat_full_name, cat->getUUID());
-
-	typedef std::vector<folder_pair_t> folder_vec_t;
-	folder_vec_t folders;
-	// Sort the folders by their full name.
-	for (S32 i = 0; i < cats.count(); i++)
-	{
-		cat = cats.get(i);
-		cat_full_name = getFullFolderName(cat);
-		folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name));
-	}
-	sort(folders.begin(), folders.end(), cmp_folders);
-
-	// Finally, populate the combobox.
-	for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++)
-		mFolderCombo->add(it->second, LLSD(it->first));
-}
-
-//static
-void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata)
-{
-	//YouAreHere Banner should be displayed only for selected places, 
-	// If you want to display it for landmark or teleport history item, you should check by mParcelId
-	
-	LLPanelPlaceInfo* self  = static_cast<LLPanelPlaceInfo*>(userdata);
-	if(!self->getVisible())
-		return;
-	if(!gDisconnected)
-	{
-		static F32 radius  = gSavedSettings.getF32("YouAreHereDistance");
-
-		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && 
-			LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
-
-		self->mYouAreHerePanel->setVisible(display_banner);
-	}
-}
-
-void LLPanelPlaceInfo::onForSaleBannerClick()
-{
-	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
-	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
-	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
-	if(!hParcel.isNull() && selected_region)
-	{
-		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && 
-				mLastSelectedRegionID ==selected_region->getRegionID())
-		{
-			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
-			{
-				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
-			}
-			else
-			{
-				LLViewerParcelMgr::getInstance()->startBuyLand();
-			}
-		}
-		else
-		{
-			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL; 
-		}
-		
-	}
-	
-	
-}
-
-/*static*/
-std::string LLPanelPlaceInfo::getFullFolderName(const LLViewerInventoryCategory* cat)
-{
-	std::string name = cat->getName();
-	LLUUID parent_id;
-
-	// translate category name, if it's right below the root
-	// FIXME: it can throw notification about non existent string in strings.xml
-	if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID())
-	{
-		LLTrans::findString(name, "InvFolder " + name);
-	}
-
-	// we don't want "My Inventory" to appear in the name
-	while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID())
-	{
-		cat = gInventory.getCategory(parent_id);
-		name = cat->getName() + "/" + name;
-	}
-
-	return name;
-}
-
-static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right)
-{
-	return left.second < right.second;
-}
-
-static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats)
+// static
+void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text,
+										   const std::string& first,
+										   const std::string& last)
 {
-	LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
-
-	// Add descendent folders of the "Landmarks" category.
-	LLInventoryModel::item_array_t items; // unused
-	LLIsType is_category(LLAssetType::AT_CATEGORY);
-	gInventory.collectDescendentsIf(
-		landmarks_id,
-		cats,
-		items,
-		LLInventoryModel::EXCLUDE_TRASH,
-		is_category);
-
-	// Add the "My Favorites" category.
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
-	LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id);
-	if (!favorites_cat)
-	{
-		llwarns << "Cannot find the favorites folder" << llendl;
-	}
-	else
-	{
-		cats.put(favorites_cat);
-	}
+	text->setText(first + " " + last);
 }
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 07a2434d59f598ded18f1baf63ae50cd3accbe06..ec30397cff5388a53bcae89c8c807ef10a40acd7 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -1,10 +1,10 @@
 /** 
  * @file llpanelplaceinfo.h
- * @brief Displays place information in Side Tray.
+ * @brief Base class for place information in Side Tray.
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -38,19 +38,13 @@
 #include "v3dmath.h"
 #include "lluuid.h"
 
-#include "llpanelmedia.h"
 #include "llremoteparcelrequest.h"
 
-class LLButton;
-class LLComboBox;
 class LLExpandableTextBox;
 class LLInventoryItem;
-class LLLineEditor;
 class LLPanelPickEdit;
 class LLParcel;
-class LLIconCtrl;
 class LLTextBox;
-class LLTextEditor;
 class LLTextureCtrl;
 class LLViewerRegion;
 class LLViewerInventoryCategory;
@@ -74,30 +68,18 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 
 	// Ignore all old location information, useful if you are 
 	// recycling an existing dialog and need to clear it.
-	void resetLocation();
+	virtual void resetLocation();
 
 	// Sends a request for data about the given parcel, which will
 	// only update the location if there is none already available.
 	/*virtual*/ void setParcelID(const LLUUID& parcel_id);
 
-	// Depending on how the panel was triggered 
-	// (from landmark or current location, or other) 
+	// Depending on how the panel was triggered
+	// (from landmark or current location, or other)
 	// sets a corresponding title and contents.
-	void setInfoType(INFO_TYPE type);
-
-	// Create a landmark for the current location
-	// in a folder specified by folder_id.
-	void createLandmark(const LLUUID& folder_id);
-	
-	// Create a pick for the location specified
-	// by global_pos.
-	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
-
-	BOOL isMediaPanelVisible();
-	void toggleMediaPanel(BOOL visible);
-	void displayItemInfo(const LLInventoryItem* pItem);
-	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
+	virtual void setInfoType(INFO_TYPE type);
 
+	// Requests remote parcel info by parcel ID.
 	void sendParcelInfoRequest();
 
 	// Displays information about a remote parcel.
@@ -105,109 +87,37 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	void displayParcelInfo(const LLUUID& region_id,
 						   const LLVector3d& pos_global);
 
-	// Displays information about the currently selected parcel
-	// without sending a request to the server.
-	// If is_current_parcel true shows "You Are Here" banner.
-	void displaySelectedParcelInfo(LLParcel* parcel,
-								LLViewerRegion* region,
-								const LLVector3d& pos_global,
-								bool is_current_parcel);
-
-	void updateEstateName(const std::string& name);
-	void updateEstateOwnerName(const std::string& name);
-	void updateCovenantText(const std::string &text);
-	void updateLastVisitedText(const LLDate &date);
-
-	void nameUpdatedCallback(LLTextBox* text,
-							 const std::string& first,
-							 const std::string& last);
-
-	void toggleLandmarkEditMode(BOOL enabled);
-
-	const std::string& getLandmarkTitle() const;
-	const std::string getLandmarkNotes() const;
-	const LLUUID getLandmarkFolder() const;
-
-	// Select current landmark folder in combobox.
-	BOOL setLandmarkFolder(const LLUUID& id);
+	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
 
 	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
 	/*virtual*/ void handleVisibilityChange (BOOL new_visibility);
-	
-	 static std::string getFullFolderName(const LLViewerInventoryCategory* cat);
 
-private:
+	// Create a pick for the location specified
+	// by global_pos.
+	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
 
-	void populateFoldersList();
-	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
-	void onForSaleBannerClick();
+protected:
+	static void nameUpdatedCallback(LLTextBox* text,
+									const std::string& first,
+									const std::string& last);
 
 	/**
 	 * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() 
 	 */
-	LLUUID			mParcelID;
-	LLUUID			mRequestedID;
-	LLUUID			mLandmarkID;
-	LLVector3		mPosRegion;
-	std::string		mCurrentTitle;
-	S32				mMinHeight;
-	INFO_TYPE 		mInfoType;
-
-	/**
-	 * Hold last displayed parcel. Needs for YouAreHere banner.
-	 */
-	S32			mSelectedParcelID;
-	LLUUID		mLastSelectedRegionID;
-
-	LLTextBox*			mTitle;
-	LLPanel*			mForSalePanel;
-	LLPanel*			mYouAreHerePanel;
-	LLTextureCtrl*		mSnapshotCtrl;
-	LLTextBox*			mRegionName;
-	LLTextBox*			mParcelName;
-	LLExpandableTextBox*mDescEditor;
-	LLTextBox*			mMaturityRatingText;
-	LLTextBox*			mParcelOwner;
-	LLTextBox*			mLastVisited;
-
-	LLTextBox*			mRatingText;
-	LLTextBox*			mVoiceText;
-	LLTextBox*			mFlyText;
-	LLTextBox*			mPushText;
-	LLTextBox*			mBuildText;
-	LLTextBox*			mScriptsText;
-	LLTextBox*			mDamageText;
-
-	LLTextBox*			mRegionNameText;
-	LLTextBox*			mRegionTypeText;
-	LLTextBox*			mRegionRatingText;
-	LLTextBox*			mRegionOwnerText;
-	LLTextBox*			mRegionGroupText;
-
-	LLTextBox*			mEstateNameText;
-	LLTextBox*			mEstateRatingText;
-	LLTextBox*			mEstateOwnerText;
-	LLTextEditor*		mCovenantText;
-
-	LLTextBox*			mSalesPriceText;
-	LLTextBox*			mAreaText;
-	LLTextBox*			mTrafficText;
-	LLTextBox*			mPrimitivesText;
-	LLTextBox*			mParcelScriptsText;
-	LLTextBox*			mTerraformLimitsText;
-	LLTextEditor*		mSubdivideText;
-	LLTextEditor*		mResaleText;
-	LLTextBox*			mSaleToText;
-
-	LLTextBox*			mOwner;
-	LLTextBox*			mCreator;
-	LLTextBox*			mCreated;
-	LLLineEditor*		mTitleEditor;
-	LLTextEditor*		mNotesEditor;
-	LLComboBox*			mFolderCombo;
-	LLPanel*            mScrollingPanel;
-	LLPanel*			mInfoPanel;
-	LLMediaPanel*		mMediaPanel;
+	LLUUID					mParcelID;
+	LLUUID					mRequestedID;
+	LLVector3				mPosRegion;
+	std::string				mCurrentTitle;
+	S32						mMinHeight;
+	INFO_TYPE 				mInfoType;
+
+	LLTextBox*				mTitle;
+	LLTextureCtrl*			mSnapshotCtrl;
+	LLTextBox*				mRegionName;
+	LLTextBox*				mParcelName;
+	LLExpandableTextBox*	mDescEditor;
+	LLTextBox*				mMaturityRatingText;
 };
 
 #endif // LL_LLPANELPLACEINFO_H
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2a9ba4697d6b62edf513f4ebc573b9f5ac06ebec
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -0,0 +1,586 @@
+/**
+ * @file llpanelplaceprofile.cpp
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelplaceprofile.h"
+
+#include "llparcel.h"
+
+#include "lliconctrl.h"
+#include "lllineeditor.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
+#include "llagent.h"
+#include "llagentui.h"
+#include "llappviewer.h"
+#include "llcallbacklist.h"
+#include "llfloaterbuycurrency.h"
+#include "llstatusbar.h"
+#include "llviewercontrol.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+
+static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
+
+// Statics for textures filenames
+static std::string icon_pg;
+static std::string icon_m;
+static std::string icon_r;
+static std::string icon_voice;
+static std::string icon_voice_no;
+static std::string icon_fly;
+static std::string icon_fly_no;
+static std::string icon_push;
+static std::string icon_push_no;
+static std::string icon_build;
+static std::string icon_build_no;
+static std::string icon_scripts;
+static std::string icon_scripts_no;
+static std::string icon_damage;
+static std::string icon_damage_no;
+
+LLPanelPlaceProfile::LLPanelPlaceProfile()
+:	LLPanelPlaceInfo(),
+	mForSalePanel(NULL),
+	mYouAreHerePanel(NULL),
+	mSelectedParcelID(-1)
+{}
+
+// virtual
+LLPanelPlaceProfile::~LLPanelPlaceProfile()
+{}
+
+// virtual
+BOOL LLPanelPlaceProfile::postBuild()
+{
+	LLPanelPlaceInfo::postBuild();
+
+	mForSalePanel = getChild<LLPanel>("for_sale_panel");
+	mYouAreHerePanel = getChild<LLPanel>("here_panel");
+	gIdleCallbacks.addFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this);
+
+	//Icon value should contain sale price of last selected parcel.
+	mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")->
+				setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this));
+
+	mParcelOwner = getChild<LLTextBox>("owner_value");
+	mLastVisited = getChild<LLTextBox>("last_visited_value");
+
+	mParcelRatingIcon = getChild<LLIconCtrl>("rating_icon");
+	mParcelRatingText = getChild<LLTextBox>("rating_value");
+	mVoiceIcon = getChild<LLIconCtrl>("voice_icon");
+	mVoiceText = getChild<LLTextBox>("voice_value");
+	mFlyIcon = getChild<LLIconCtrl>("fly_icon");
+	mFlyText = getChild<LLTextBox>("fly_value");
+	mPushIcon = getChild<LLIconCtrl>("push_icon");
+	mPushText = getChild<LLTextBox>("push_value");
+	mBuildIcon = getChild<LLIconCtrl>("build_icon");
+	mBuildText = getChild<LLTextBox>("build_value");
+	mScriptsIcon = getChild<LLIconCtrl>("scripts_icon");
+	mScriptsText = getChild<LLTextBox>("scripts_value");
+	mDamageIcon = getChild<LLIconCtrl>("damage_icon");
+	mDamageText = getChild<LLTextBox>("damage_value");
+
+	mRegionNameText = getChild<LLTextBox>("region_name");
+	mRegionTypeText = getChild<LLTextBox>("region_type");
+	mRegionRatingIcon = getChild<LLIconCtrl>("region_rating_icon");
+	mRegionRatingText = getChild<LLTextBox>("region_rating");
+	mRegionOwnerText = getChild<LLTextBox>("region_owner");
+	mRegionGroupText = getChild<LLTextBox>("region_group");
+
+	mEstateNameText = getChild<LLTextBox>("estate_name");
+	mEstateRatingText = getChild<LLTextBox>("estate_rating");
+	mEstateOwnerText = getChild<LLTextBox>("estate_owner");
+	mCovenantText = getChild<LLTextEditor>("covenant");
+
+	mSalesPriceText = getChild<LLTextBox>("sales_price");
+	mAreaText = getChild<LLTextBox>("area");
+	mTrafficText = getChild<LLTextBox>("traffic");
+	mPrimitivesText = getChild<LLTextBox>("primitives");
+	mParcelScriptsText = getChild<LLTextBox>("parcel_scripts");
+	mTerraformLimitsText = getChild<LLTextBox>("terraform_limits");
+	mSubdivideText = getChild<LLTextEditor>("subdivide");
+	mResaleText = getChild<LLTextEditor>("resale");
+	mSaleToText = getChild<LLTextBox>("sale_to");
+
+	icon_pg = getString("icon_PG");
+	icon_m = getString("icon_M");
+	icon_r = getString("icon_R");
+	icon_voice = getString("icon_Voice");
+	icon_voice_no = getString("icon_VoiceNo");
+	icon_fly = getString("icon_Fly");
+	icon_fly_no = getString("icon_FlyNo");
+	icon_push = getString("icon_Push");
+	icon_push_no = getString("icon_PushNo");
+	icon_build = getString("icon_Build");
+	icon_build_no = getString("icon_BuildNo");
+	icon_scripts = getString("icon_Scripts");
+	icon_scripts_no = getString("icon_ScriptsNo");
+	icon_damage = getString("icon_Damage");
+	icon_damage_no = getString("icon_DamageNo");
+
+	return TRUE;
+}
+
+// virtual
+void LLPanelPlaceProfile::resetLocation()
+{
+	LLPanelPlaceInfo::resetLocation();
+
+	mForSalePanel->setVisible(FALSE);
+	mYouAreHerePanel->setVisible(FALSE);
+
+	std::string not_available = getString("not_available");
+	mParcelOwner->setValue(not_available);
+	mLastVisited->setValue(not_available);
+
+	mParcelRatingIcon->setValue(not_available);
+	mParcelRatingText->setText(not_available);
+	mVoiceIcon->setValue(not_available);
+	mVoiceText->setText(not_available);
+	mFlyIcon->setValue(not_available);
+	mFlyText->setText(not_available);
+	mPushIcon->setValue(not_available);
+	mPushText->setText(not_available);
+	mBuildIcon->setValue(not_available);
+	mBuildText->setText(not_available);
+	mScriptsIcon->setValue(not_available);
+	mScriptsText->setText(not_available);
+	mDamageIcon->setValue(not_available);
+	mDamageText->setText(not_available);
+
+	mRegionNameText->setValue(not_available);
+	mRegionTypeText->setValue(not_available);
+	mRegionRatingIcon->setValue(not_available);
+	mRegionRatingText->setValue(not_available);
+	mRegionOwnerText->setValue(not_available);
+	mRegionGroupText->setValue(not_available);
+
+	mEstateNameText->setValue(not_available);
+	mEstateRatingText->setValue(not_available);
+	mEstateOwnerText->setValue(not_available);
+	mCovenantText->setValue(not_available);
+
+	mSalesPriceText->setValue(not_available);
+	mAreaText->setValue(not_available);
+	mTrafficText->setValue(not_available);
+	mPrimitivesText->setValue(not_available);
+	mParcelScriptsText->setValue(not_available);
+	mTerraformLimitsText->setValue(not_available);
+	mSubdivideText->setValue(not_available);
+	mResaleText->setValue(not_available);
+	mSaleToText->setValue(not_available);
+}
+
+// virtual
+void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
+{
+	bool is_info_type_agent = type == AGENT;
+	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
+
+	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
+	mMaturityRatingText->setVisible(!is_info_type_agent);
+
+	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
+	mParcelOwner->setVisible(is_info_type_agent);
+
+	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
+	mLastVisited->setVisible(is_info_type_teleport_history);
+
+	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
+
+	switch(type)
+	{
+		case AGENT:
+		case PLACE:
+		default:
+			mCurrentTitle = getString("title_place");
+		break;
+
+		case TELEPORT_HISTORY:
+			mCurrentTitle = getString("title_teleport_history");
+		break;
+	}
+
+	LLPanelPlaceInfo::setInfoType(type);
+}
+
+void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
+													LLViewerRegion* region,
+													const LLVector3d& pos_global,
+													bool is_current_parcel)
+{
+	if (!region || !parcel)
+		return;
+
+	// send EstateCovenantInfo message
+	LLMessageSystem *msg = gMessageSystem;
+	msg->newMessage("EstateCovenantRequest");
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+	msg->sendReliable(region->getHost());
+
+	LLParcelData parcel_data;
+
+	// HACK: Converting sim access flags to the format
+	// returned by remote parcel response.
+	U8 sim_access = region->getSimAccess();
+	switch(sim_access)
+	{
+	case SIM_ACCESS_MATURE:
+		parcel_data.flags = 0x1;
+
+		mParcelRatingIcon->setValue(icon_m);
+		mRegionRatingIcon->setValue(icon_m);
+		break;
+
+	case SIM_ACCESS_ADULT:
+		parcel_data.flags = 0x2;
+
+		mParcelRatingIcon->setValue(icon_r);
+		mRegionRatingIcon->setValue(icon_r);
+		break;
+
+	default:
+		parcel_data.flags = 0;
+
+		mParcelRatingIcon->setValue(icon_pg);
+		mRegionRatingIcon->setValue(icon_pg);
+	}
+
+	std::string rating = LLViewerRegion::accessToString(sim_access);
+	mParcelRatingText->setText(rating);
+	mRegionRatingText->setText(rating);
+
+	parcel_data.desc = parcel->getDesc();
+	parcel_data.name = parcel->getName();
+	parcel_data.sim_name = region->getName();
+	parcel_data.snapshot_id = parcel->getSnapshotID();
+	mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS),
+					  (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS),
+					  (F32)pos_global.mdV[VZ]);
+	parcel_data.global_x = pos_global.mdV[VX];
+	parcel_data.global_y = pos_global.mdV[VY];
+	parcel_data.global_z = pos_global.mdV[VZ];
+
+	std::string on = getString("on");
+	std::string off = getString("off");
+
+	// Processing parcel characteristics
+	if (parcel->getParcelFlagAllowVoice())
+	{
+		mVoiceIcon->setValue(icon_voice);
+		mVoiceText->setText(on);
+	}
+	else
+	{
+		mVoiceIcon->setValue(icon_voice_no);
+		mVoiceText->setText(off);
+	}
+
+	if (!region->getBlockFly() && parcel->getAllowFly())
+	{
+		mFlyIcon->setValue(icon_fly);
+		mFlyText->setText(on);
+	}
+	else
+	{
+		mFlyIcon->setValue(icon_fly_no);
+		mFlyText->setText(off);
+	}
+
+	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
+	{
+		mPushIcon->setValue(icon_push_no);
+		mPushText->setText(off);
+	}
+	else
+	{
+		mPushIcon->setValue(icon_push);
+		mPushText->setText(on);
+	}
+
+	if (parcel->getAllowModify())
+	{
+		mBuildIcon->setValue(icon_build);
+		mBuildText->setText(on);
+	}
+	else
+	{
+		mBuildIcon->setValue(icon_build_no);
+		mBuildText->setText(off);
+	}
+
+	if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
+	   (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
+	   !parcel->getAllowOtherScripts())
+	{
+		mScriptsIcon->setValue(icon_scripts_no);
+		mScriptsText->setText(off);
+	}
+	else
+	{
+		mScriptsIcon->setValue(icon_scripts);
+		mScriptsText->setText(on);
+	}
+
+	if (region->getAllowDamage() || parcel->getAllowDamage())
+	{
+		mDamageIcon->setValue(icon_damage);
+		mDamageText->setText(on);
+	}
+	else
+	{
+		mDamageIcon->setValue(icon_damage_no);
+		mDamageText->setText(off);
+	}
+
+	mRegionNameText->setText(region->getName());
+	mRegionTypeText->setText(region->getSimProductName());
+
+	// Determine parcel owner
+	if (parcel->isPublic())
+	{
+		mParcelOwner->setText(getString("public"));
+		mRegionOwnerText->setText(getString("public"));
+	}
+	else
+	{
+		if (parcel->getIsGroupOwned())
+		{
+			mRegionOwnerText->setText(getString("group_owned_text"));
+
+			if(!parcel->getGroupID().isNull())
+			{
+				// FIXME: Using parcel group as region group.
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3));
+
+				gCacheName->get(parcel->getGroupID(), TRUE,
+								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			}
+			else
+			{
+				std::string owner = getString("none_text");
+				mRegionGroupText->setText(owner);
+				mParcelOwner->setText(owner);
+			}
+		}
+		else
+		{
+			// Figure out the owner's name
+			gCacheName->get(parcel->getOwnerID(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			gCacheName->get(region->getOwner(), FALSE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3));
+		}
+
+		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
+		{
+			mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
+		}
+	}
+
+	mEstateRatingText->setText(region->getSimAccessString());
+
+	S32 area;
+	S32 claim_price;
+	S32 rent_price;
+	F32 dwell;
+	BOOL for_sale = parcel->getForSale();
+	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
+													 &claim_price,
+													 &rent_price,
+													 &for_sale,
+													 &dwell);
+	if (for_sale)
+	{
+		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
+		if(auth_buyer_id.notNull())
+		{
+			gCacheName->get(auth_buyer_id, TRUE,
+							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3));
+
+			// Show sales info to a specific person or a group he belongs to.
+			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
+			{
+				for_sale = FALSE;
+			}
+		}
+		else
+		{
+			mSaleToText->setText(getString("anyone"));
+		}
+
+		mForSalePanel->setVisible(for_sale);
+
+		const U8* sign = (U8*)getString("price_text").c_str();
+		const U8* sqm = (U8*)getString("area_text").c_str();
+
+		mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice()));
+		mAreaText->setText(llformat("%d %s", area, sqm));
+		mTrafficText->setText(llformat("%.0f", dwell));
+
+		// Can't have more than region max tasks, regardless of parcel
+		// object bonus factor.
+		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),
+							   (S32)region->getMaxTasks());
+
+		const U8* available = (U8*)getString("available").c_str();
+		const U8* allocated = (U8*)getString("allocated").c_str();
+
+		mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated));
+
+		if (parcel->getAllowOtherScripts())
+		{
+			mParcelScriptsText->setText(getString("all_residents_text"));
+		}
+		else if (parcel->getAllowGroupScripts())
+		{
+			mParcelScriptsText->setText(getString("group_text"));
+		}
+		else
+		{
+			mParcelScriptsText->setText(off);
+		}
+
+		mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off);
+
+		if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
+		{
+			mSubdivideText->setText(getString("can_change"));
+		}
+		else
+		{
+			mSubdivideText->setText(getString("can_not_change"));
+		}
+		if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
+		{
+			mResaleText->setText(getString("can_not_resell"));
+		}
+		else
+		{
+			mResaleText->setText(getString("can_resell"));
+		}
+	}
+
+	mSelectedParcelID = parcel->getLocalID();
+	mLastSelectedRegionID = region->getRegionID();
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	mYouAreHerePanel->setVisible(is_current_parcel);
+	getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale);
+}
+
+void LLPanelPlaceProfile::updateEstateName(const std::string& name)
+{
+	mEstateNameText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateEstateOwnerName(const std::string& name)
+{
+	mEstateOwnerText->setText(name);
+}
+
+void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
+{
+	mCovenantText->setText(text);
+}
+
+void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date)
+{
+	if (date.isNull())
+	{
+		mLastVisited->setText(getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquired_date");
+		LLSD substitution;
+		substitution["datetime"] = (S32) date.secondsSinceEpoch();
+		LLStringUtil::format (timeStr, substitution);
+		mLastVisited->setText(timeStr);
+	}
+}
+
+void LLPanelPlaceProfile::onForSaleBannerClick()
+{
+	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
+	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
+	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
+	if(!hParcel.isNull() && selected_region)
+	{
+		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID &&
+				mLastSelectedRegionID ==selected_region->getRegionID())
+		{
+			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
+			{
+				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
+			}
+			else
+			{
+				LLViewerParcelMgr::getInstance()->startBuyLand();
+			}
+		}
+		else
+		{
+			LL_WARNS("Places") << "User  is trying  to buy remote parcel.Operation is not supported"<< LL_ENDL;
+		}
+
+	}
+}
+
+// static
+void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata)
+{
+	//YouAreHere Banner should be displayed only for selected places,
+	// If you want to display it for landmark or teleport history item, you should check by mParcelId
+
+	LLPanelPlaceProfile* self = static_cast<LLPanelPlaceProfile*>(userdata);
+	if(!self->getVisible())
+		return;
+
+	if(!gDisconnected && gAgent.getRegion())
+	{
+		static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
+
+		BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID &&
+										LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
+
+		self->mYouAreHerePanel->setVisible(display_banner);
+	}
+}
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
new file mode 100644
index 0000000000000000000000000000000000000000..b3ef4acf511f065969792bdf4e8f10bf270ba204
--- /dev/null
+++ b/indra/newview/llpanelplaceprofile.h
@@ -0,0 +1,121 @@
+/**
+ * @file llpanelplaceprofile.h
+ * @brief Displays place profile in Side Tray.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELPLACEPROFILE_H
+#define LL_LLPANELPLACEPROFILE_H
+
+#include "llpanelplaceinfo.h"
+
+class LLIconCtrl;
+class LLTextEditor;
+
+class LLPanelPlaceProfile : public LLPanelPlaceInfo
+{
+public:
+	LLPanelPlaceProfile();
+	/*virtual*/ ~LLPanelPlaceProfile();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void resetLocation();
+
+	/*virtual*/ void setInfoType(INFO_TYPE type);
+
+	// Displays information about the currently selected parcel
+	// without sending a request to the server.
+	// If is_current_parcel true shows "You Are Here" banner.
+	void displaySelectedParcelInfo(LLParcel* parcel,
+								   LLViewerRegion* region,
+								   const LLVector3d& pos_global,
+								   bool is_current_parcel);
+
+	void updateEstateName(const std::string& name);
+	void updateEstateOwnerName(const std::string& name);
+	void updateCovenantText(const std::string &text);
+	void updateLastVisitedText(const LLDate &date);
+
+private:
+	void onForSaleBannerClick();
+
+	static void updateYouAreHereBanner(void*);// added to gIdleCallbacks
+
+	/**
+	 * Holds last displayed parcel. Needed for YouAreHere banner.
+	 */
+	S32					mSelectedParcelID;
+	LLUUID				mLastSelectedRegionID;
+
+	LLPanel*			mForSalePanel;
+	LLPanel*			mYouAreHerePanel;
+
+	LLTextBox*			mParcelOwner;
+	LLTextBox*			mLastVisited;
+
+	LLIconCtrl*			mParcelRatingIcon;
+	LLTextBox*			mParcelRatingText;
+	LLIconCtrl*			mVoiceIcon;
+	LLTextBox*			mVoiceText;
+	LLIconCtrl*			mFlyIcon;
+	LLTextBox*			mFlyText;
+	LLIconCtrl*			mPushIcon;
+	LLTextBox*			mPushText;
+	LLIconCtrl*			mBuildIcon;
+	LLTextBox*			mBuildText;
+	LLIconCtrl*			mScriptsIcon;
+	LLTextBox*			mScriptsText;
+	LLIconCtrl*			mDamageIcon;
+	LLTextBox*			mDamageText;
+
+	LLTextBox*			mRegionNameText;
+	LLTextBox*			mRegionTypeText;
+	LLIconCtrl*			mRegionRatingIcon;
+	LLTextBox*			mRegionRatingText;
+	LLTextBox*			mRegionOwnerText;
+	LLTextBox*			mRegionGroupText;
+
+	LLTextBox*			mEstateNameText;
+	LLTextBox*			mEstateRatingText;
+	LLTextBox*			mEstateOwnerText;
+	LLTextEditor*		mCovenantText;
+
+	LLTextBox*			mSalesPriceText;
+	LLTextBox*			mAreaText;
+	LLTextBox*			mTrafficText;
+	LLTextBox*			mPrimitivesText;
+	LLTextBox*			mParcelScriptsText;
+	LLTextBox*			mTerraformLimitsText;
+	LLTextEditor*		mSubdivideText;
+	LLTextEditor*		mResaleText;
+	LLTextBox*			mSaleToText;
+};
+
+#endif // LL_LLPANELPLACEPROFILE_H
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index b2e9110e966311e287f2a29fea78bfbbb0de1efc..8d117afcfe0cffaddb6ea8c7e5890de9fef9fdfa 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  *
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -57,9 +57,10 @@
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
 #include "lllandmarklist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanellandmarkinfo.h"
 #include "llpanellandmarks.h"
 #include "llpanelpick.h"
+#include "llpanelplaceprofile.h"
 #include "llpanelteleporthistory.h"
 #include "llteleporthistorystorage.h"
 #include "lltoggleablemenu.h"
@@ -121,7 +122,8 @@ LLPanelPlaces::LLPanelPlaces()
 		mFilterSubString(LLStringUtil::null),
 		mActivePanel(NULL),
 		mFilterEditor(NULL),
-		mPlaceInfo(NULL),
+		mPlaceProfile(NULL),
+		mLandmarkInfo(NULL),
 		mPickPanel(NULL),
 		mItem(NULL),
 		mPlaceMenu(NULL),
@@ -135,7 +137,7 @@ LLPanelPlaces::LLPanelPlaces()
 	gInventory.addObserver(mInventoryObserver);
 
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
-			boost::bind(&LLPanelPlaces::onAgentParcelChange, this));
+			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
 	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
@@ -158,9 +160,6 @@ BOOL LLPanelPlaces::postBuild()
 	
 	mShowOnMapBtn = getChild<LLButton>("map_btn");
 	mShowOnMapBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShowOnMapButtonClicked, this));
-	
-	mShareBtn = getChild<LLButton>("share_btn");
-	//mShareBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onShareButtonClicked, this));
 
 	mEditBtn = getChild<LLButton>("edit_btn");
 	mEditBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
@@ -206,25 +205,32 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
 	}
 
-	mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info");
+	mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile");
+	mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info");
+	if (!mPlaceProfile || !mLandmarkInfo)
+		return FALSE;
+
+	LLButton* back_btn = mPlaceProfile->getChild<LLButton>("back_btn");
+	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 
-	LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn");
+	back_btn = mLandmarkInfo->getChild<LLButton>("back_btn");
 	back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 
-	LLLineEditor* title_editor = mPlaceInfo->getChild<LLLineEditor>("title_editor");
+	LLLineEditor* title_editor = mLandmarkInfo->getChild<LLLineEditor>("title_editor");
 	title_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this), NULL);
 
-	LLTextEditor* notes_editor = mPlaceInfo->getChild<LLTextEditor>("notes_editor");
+	LLTextEditor* notes_editor = mLandmarkInfo->getChild<LLTextEditor>("notes_editor");
 	notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
 
-	LLComboBox* folder_combo = mPlaceInfo->getChild<LLComboBox>("folder_combo");
+	LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
 	folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));
+
 	return TRUE;
 }
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
-	if(mPlaceInfo == NULL || key.size() == 0)
+	if(!mPlaceProfile || !mLandmarkInfo || key.size() == 0)
 		return;
 
 	mFilterEditor->clear();
@@ -239,11 +245,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 	if (mPlaceInfoType == AGENT_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::AGENT);
 	}
 	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK);
 
 		if (key.has("x") && key.has("y") && key.has("z"))
 		{
@@ -256,11 +262,11 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 			mPosGlobal = gAgent.getPositionGlobal();
 		}
 
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
+		mLandmarkInfo->setInfoType(LLPanelPlaceInfo::LANDMARK);
 
 		LLInventoryItem* item = gInventory.getItem(key["id"].asUUID());
 		if (!item)
@@ -270,17 +276,12 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 	}
 	else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 	{
-		if (mPlaceInfo->isMediaPanelVisible())
-		{
-			toggleMediaPanel();
-		}
-
 		mPosGlobal = LLVector3d(key["x"].asReal(),
 								key["y"].asReal(),
 								key["z"].asReal());
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::PLACE);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 	else if (mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
@@ -291,9 +292,9 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 		mPosGlobal = hist_items[index].mGlobalPos;
 
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
-		mPlaceInfo->updateLastVisitedText(hist_items[index].mDate);
-		mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+		mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
+		mPlaceProfile->updateLastVisitedText(hist_items[index].mDate);
+		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -321,7 +322,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 void LLPanelPlaces::setItem(LLInventoryItem* item)
 {
-	if (!mPlaceInfo || !item)
+	if (!mLandmarkInfo || !item)
 		return;
 
 	mItem = item;
@@ -351,19 +352,19 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 	if (is_landmark_editable)
 	{
-		if(!mPlaceInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
+		if(!mLandmarkInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull())
 		{
 			const LLViewerInventoryCategory* cat = gInventory.getCategory(mItem->getParentUUID());
-			if(cat)
+			if (cat)
 			{
-				std::string cat_fullname = LLPanelPlaceInfo::getFullFolderName(cat);
-				LLComboBox* folderList = mPlaceInfo->getChild<LLComboBox>("folder_combo");
-				folderList->add(cat_fullname, cat->getUUID(),ADD_TOP);
+				std::string cat_fullname = LLPanelLandmarkInfo::getFullFolderName(cat);
+				LLComboBox* folderList = mLandmarkInfo->getChild<LLComboBox>("folder_combo");
+				folderList->add(cat_fullname, cat->getUUID(), ADD_TOP);
 			}
 		}
 	}
 
-	mPlaceInfo->displayItemInfo(mItem);
+	mLandmarkInfo->displayItemInfo(mItem);
 
 	LLLandmark* lm = gLandmarkList.getAsset(mItem->getAssetUUID(),
 											boost::bind(&LLPanelPlaces::onLandmarkLoaded, this, _1));
@@ -375,13 +376,13 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	LLUUID region_id;
 	landmark->getRegionID(region_id);
 	landmark->getGlobalPos(mPosGlobal);
-	mPlaceInfo->displayParcelInfo(region_id, mPosGlobal);
+	mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal);
 }
 
 void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter)
@@ -409,19 +410,10 @@ void LLPanelPlaces::onTabSelected()
 	mActivePanel->updateVerbs();
 }
 
-/*
-void LLPanelPlaces::onShareButtonClicked()
-{
-	// TODO: Launch the "Things" Share wizard
-}
-*/
-
 void LLPanelPlaces::onTeleportButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		if (mPlaceInfoType == LANDMARK_INFO_TYPE)
 		{
@@ -450,10 +442,8 @@ void LLPanelPlaces::onTeleportButtonClicked()
 
 void LLPanelPlaces::onShowOnMapButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-
-	if (mPlaceInfo->getVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel && panel->getVisible())
 	{
 		LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
 		if(!worldmap_instance)
@@ -496,31 +486,31 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
 
 void LLPanelPlaces::onEditButtonClicked()
 {
-	if (!mPlaceInfo || isLandmarkEditModeOn)
+	if (!mLandmarkInfo || isLandmarkEditModeOn)
 		return;
 
 	isLandmarkEditModeOn = true;
 
-	mPlaceInfo->toggleLandmarkEditMode(TRUE);
+	mLandmarkInfo->toggleLandmarkEditMode(TRUE);
 
 	updateVerbs();
 }
 
 void LLPanelPlaces::onSaveButtonClicked()
 {
-	if (!mPlaceInfo || mItem.isNull())
+	if (!mLandmarkInfo || mItem.isNull())
 		return;
 
-	std::string current_title_value = mPlaceInfo->getLandmarkTitle();
+	std::string current_title_value = mLandmarkInfo->getLandmarkTitle();
 	std::string item_title_value = mItem->getName();
-	std::string current_notes_value = mPlaceInfo->getLandmarkNotes();
+	std::string current_notes_value = mLandmarkInfo->getLandmarkNotes();
 	std::string item_notes_value = mItem->getDescription();
 
 	LLStringUtil::trim(current_title_value);
 	LLStringUtil::trim(current_notes_value);
 
 	LLUUID item_id = mItem->getUUID();
-	LLUUID folder_id = mPlaceInfo->getLandmarkFolder();
+	LLUUID folder_id = mLandmarkInfo->getLandmarkFolder();
 
 	LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(mItem);
 
@@ -553,7 +543,7 @@ void LLPanelPlaces::onSaveButtonClicked()
 
 void LLPanelPlaces::onCancelButtonClicked()
 {
-	if (!mPlaceInfo)
+	if (!mLandmarkInfo)
 		return;
 
 	if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)
@@ -562,13 +552,13 @@ void LLPanelPlaces::onCancelButtonClicked()
 	}
 	else
 	{
-		mPlaceInfo->toggleLandmarkEditMode(FALSE);
+		mLandmarkInfo->toggleLandmarkEditMode(FALSE);
 		isLandmarkEditModeOn = false;
 
 		updateVerbs();
 
 		// Reload the landmark properties.
-		mPlaceInfo->displayItemInfo(mItem);
+		mLandmarkInfo->displayItemInfo(mItem);
 	}
 }
 
@@ -597,7 +587,7 @@ void LLPanelPlaces::onOverflowButtonClicked()
 		if (mItem.notNull())
 		{
 			const LLUUID& item_id = mItem->getUUID();
-			const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) &&
 									!gInventory.isObjectDescendentOf(item_id, trash_id);
 		}
@@ -652,9 +642,6 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 	}
 	else if (item == "pick")
 	{
-		if (!mPlaceInfo)
-			return;
-
 		if (mPickPanel == NULL)
 		{
 			mPickPanel = LLPanelPickEdit::create();
@@ -667,7 +654,12 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 		togglePickPanel(TRUE);
 		mPickPanel->onOpen(LLSD());
-		mPlaceInfo->createPick(mPosGlobal, mPickPanel);
+
+		LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+		if (panel)
+		{
+			panel->createPick(mPosGlobal, mPickPanel);
+		}
 
 		LLRect rect = getRect();
 		mPickPanel->reshape(rect.getWidth(), rect.getHeight());
@@ -677,7 +669,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
     {
         if ( mItem.notNull() ) 
         {
-            LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+            const LLUUID& favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
             if ( favorites_id.notNull() )
             {
                 copy_inventory_item(gAgent.getID(),
@@ -694,39 +686,16 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param)
 
 void LLPanelPlaces::onBackButtonClicked()
 {
-	if (!mPlaceInfo)
-		return;
-	
-	if (mPlaceInfo->isMediaPanelVisible())
-	{
-		toggleMediaPanel();
-	}
-	else
-	{
-		togglePlaceInfoPanel(FALSE);
+	togglePlaceInfoPanel(FALSE);
 
-		// Resetting mPlaceInfoType when Place Info panel is closed.
-		mPlaceInfoType = LLStringUtil::null;
+	// Resetting mPlaceInfoType when Place Info panel is closed.
+	mPlaceInfoType = LLStringUtil::null;
 
-		isLandmarkEditModeOn = false;
-	}
+	isLandmarkEditModeOn = false;
 
 	updateVerbs();
 }
 
-void LLPanelPlaces::toggleMediaPanel()
-{
-	if (!mPlaceInfo)
-		return;
-
-	mPlaceInfo->toggleMediaPanel(!mPlaceInfo->isMediaPanelVisible());
-
-	// Refresh the current place info because
-	// the media panel controls can't refer to
-	// the remote parcel media.
-	onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
-}
-
 void LLPanelPlaces::togglePickPanel(BOOL visible)
 {
 	setAllChildrenVisible(this, !visible);
@@ -737,26 +706,50 @@ void LLPanelPlaces::togglePickPanel(BOOL visible)
 
 void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile || !mLandmarkInfo)
 		return;
 
-	mPlaceInfo->setVisible(visible);
 	mFilterEditor->setVisible(!visible);
 	mTabContainer->setVisible(!visible);
 
-	if (visible)
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 	{
-		mPlaceInfo->resetLocation();
+		mPlaceProfile->setVisible(visible);
 
-		LLRect rect = getRect();
-		LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
-		mPlaceInfo->reshape(new_rect.getWidth(),new_rect.getHeight());
+		if (visible)
+		{
+			mPlaceProfile->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mLandmarkInfo->setVisible(FALSE);
+		}
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		mLandmarkInfo->setVisible(visible);
+
+		if (visible)
+		{
+			mLandmarkInfo->resetLocation();
+
+			LLRect rect = getRect();
+			LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
+			mLandmarkInfo->reshape(new_rect.getWidth(), new_rect.getHeight());
+
+			mPlaceProfile->setVisible(FALSE);
+		}
 	}
 }
 
 void LLPanelPlaces::changedParcelSelection()
 {
-	if (!mPlaceInfo)
+	if (!mPlaceProfile)
 		return;
 
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
@@ -782,8 +775,8 @@ void LLPanelPlaces::changedParcelSelection()
 		}
 	}
 
-	mPlaceInfo->resetLocation();
-	mPlaceInfo->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
+	mPlaceProfile->resetLocation();
+	mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);
 
 	updateVerbs();
 }
@@ -830,41 +823,32 @@ void LLPanelPlaces::changedInventory(U32 mask)
 	gInventory.removeObserver(mInventoryObserver);
 }
 
-void LLPanelPlaces::onAgentParcelChange()
+void LLPanelPlaces::updateVerbs()
 {
-	if (!mPlaceInfo)
-		return;
+	bool is_place_info_visible;
 
-	if (mPlaceInfo->isMediaPanelVisible())
+	LLPanelPlaceInfo* panel = getCurrentInfoPanel();
+	if (panel)
 	{
-		onOpen(LLSD().insert("type", AGENT_INFO_TYPE));
+		is_place_info_visible = panel->getVisible();
 	}
 	else
 	{
-		updateVerbs();
+		is_place_info_visible = false;
 	}
-}
-
-void LLPanelPlaces::updateVerbs()
-{
-	if (!mPlaceInfo)
-		return;
 
-	bool is_place_info_visible = mPlaceInfo->getVisible();
 	bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
 	bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE;
-	bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible();
 
 	mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
-	mShareBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mOverflowBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
 	mEditBtn->setVisible(mPlaceInfoType == LANDMARK_INFO_TYPE && !isLandmarkEditModeOn);
 	mSaveBtn->setVisible(isLandmarkEditModeOn);
 	mCancelBtn->setVisible(isLandmarkEditModeOn);
 	mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn);
 
-	mOverflowBtn->setEnabled(is_place_info_visible && !is_media_panel_visible && !is_create_landmark_visible);
+	mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible);
 
 	if (is_place_info_visible)
 	{
@@ -872,16 +856,13 @@ void LLPanelPlaces::updateVerbs()
 		{
 			// We don't need to teleport to the current location
 			// so check if the location is not within the current parcel.
-			mTeleportBtn->setEnabled(!is_media_panel_visible &&
-									 !mPosGlobal.isExactlyZero() &&
+			mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() &&
 									 !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal));
 		}
 		else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 		{
 			mTeleportBtn->setEnabled(TRUE);
 		}
-
-		mShowOnMapBtn->setEnabled(!is_media_panel_visible);
 	}
 	else
 	{
@@ -890,6 +871,23 @@ void LLPanelPlaces::updateVerbs()
 	}
 }
 
+LLPanelPlaceInfo* LLPanelPlaces::getCurrentInfoPanel()
+{
+	if (mPlaceInfoType == AGENT_INFO_TYPE ||
+		mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+		mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
+	{
+		return mPlaceProfile;
+	}
+	else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
+			 mPlaceInfoType == LANDMARK_INFO_TYPE)
+	{
+		return mLandmarkInfo;
+	}
+
+	return NULL;
+}
+
 static bool is_agent_in_selected_parcel(LLParcel* parcel)
 {
 	LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index e2d281dd84061a6434f20cfbe575ad0842d22bed..0d97353b661b5cb76d8e7babfc709983dbf16541 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -37,6 +37,10 @@
 class LLInventoryItem;
 class LLFilterEditor;
 class LLLandmark;
+
+class LLPanelLandmarkInfo;
+class LLPanelPlaceProfile;
+
 class LLPanelPickEdit;
 class LLPanelPlaceInfo;
 class LLPanelPlacesTab;
@@ -69,7 +73,6 @@ class LLPanelPlaces : public LLPanel
 	void onFilterEdit(const std::string& search_string, bool force_filter);
 	void onTabSelected();
 
-	//void onShareButtonClicked();
 	void onTeleportButtonClicked();
 	void onShowOnMapButtonClicked();
 	void onEditButtonClicked();
@@ -85,20 +88,22 @@ class LLPanelPlaces : public LLPanel
 	void togglePickPanel(BOOL visible);
 	void togglePlaceInfoPanel(BOOL visible);
 
-	void onAgentParcelChange();
 	void updateVerbs();
 
+	LLPanelPlaceInfo* getCurrentInfoPanel();
+
 	LLFilterEditor*				mFilterEditor;
 	LLPanelPlacesTab*			mActivePanel;
 	LLTabContainer*				mTabContainer;
-	LLPanelPlaceInfo*			mPlaceInfo;
+	LLPanelPlaceProfile*		mPlaceProfile;
+	LLPanelLandmarkInfo*		mLandmarkInfo;
+
 	LLPanelPickEdit*			mPickPanel;
 	LLToggleableMenu*			mPlaceMenu;
 	LLToggleableMenu*			mLandmarkMenu;
 
 	LLButton*					mTeleportBtn;
 	LLButton*					mShowOnMapBtn;
-	LLButton*					mShareBtn;
 	LLButton*					mEditBtn;
 	LLButton*					mSaveBtn;
 	LLButton*					mCancelBtn;
diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp
index 7c0a7b0cc4aeb2aab3ece5fadc4448fe9e652a7c..42c871a41aa146ec6a1be880eb9ad502a139d910 100644
--- a/indra/newview/llpanelplacestab.cpp
+++ b/indra/newview/llpanelplacestab.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -51,7 +51,6 @@ bool LLPanelPlacesTab::isTabVisible()
 
 void LLPanelPlacesTab::setPanelPlacesButtons(LLPanelPlaces* panel)
 {
-	//mShareBtn = panel->getChild<LLButton>("share_btn");
 	mTeleportBtn = panel->getChild<LLButton>("teleport_btn");
 	mShowOnMapBtn = panel->getChild<LLButton>("map_btn");
 }
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
index 1c70869414f06cf1216fbabb3b969fbbba097367..458694d766da36d1a061e03da2454155156d3dae 100644
--- a/indra/newview/llpanelplacestab.h
+++ b/indra/newview/llpanelplacestab.h
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2004-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -44,10 +44,8 @@ class LLPanelPlacesTab : public LLPanel
 
 	virtual void onSearchEdit(const std::string& string) = 0;
 	virtual void updateVerbs() = 0;		// Updates buttons at the bottom of Places panel
-	//virtual void onShare() = 0;
 	virtual void onShowOnMap() = 0;
 	virtual void onTeleport() = 0;
-	//virtual void onCopySLURL() = 0;
 
 	bool isTabVisible(); // Check if parent TabContainer is visible.
 
@@ -58,7 +56,6 @@ class LLPanelPlacesTab : public LLPanel
 										const LLUUID& snapshot_id,
 										bool teleport);
 protected:
-	//LLButton*				mShareBtn;
 	LLButton*				mTeleportBtn;
 	LLButton*				mShowOnMapBtn;
 };
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index e4b32c4820d379cbe98ddcc317995c6f03a88f01..d33fcc55123b36ba18d658d38f42a9ff8025db02 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -228,7 +228,11 @@ void LLPanelPrimMediaControls::updateShape()
 
 	bool can_navigate = parcel->getMediaAllowNavigate();
 	bool enabled = false;
-	bool has_focus = media_impl->hasFocus();
+	bool is_zoomed = (mCurrentZoom != ZOOM_NONE);
+	// There is no such thing as "has_focus" being different from normal controls set
+	// anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus'
+	// to 'true' (or, actually, we use a setting)
+	bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true;
 	setVisible(enabled);
 
 	if (objectp)
@@ -253,7 +257,7 @@ void LLPanelPrimMediaControls::updateShape()
 		LLUICtrl* stop_ctrl					= getChild<LLUICtrl>("stop");
 		LLUICtrl* media_stop_ctrl			= getChild<LLUICtrl>("media_stop");
 		LLUICtrl* home_ctrl					= getChild<LLUICtrl>("home");
-		LLUICtrl* close_ctrl				= getChild<LLUICtrl>("close");
+		LLUICtrl* unzoom_ctrl				= getChild<LLUICtrl>("close"); // This is actually "unzoom"
 		LLUICtrl* open_ctrl					= getChild<LLUICtrl>("new_window");
         LLUICtrl* zoom_ctrl					= getChild<LLUICtrl>("zoom_frame");
 		LLPanel* media_loading_panel		= getChild<LLPanel>("media_progress_indicator");
@@ -280,7 +284,8 @@ void LLPanelPrimMediaControls::updateShape()
 		reload_ctrl->setVisible(has_focus);
 		stop_ctrl->setVisible(false);
 		home_ctrl->setVisible(has_focus);
-		close_ctrl->setVisible(has_focus);
+		zoom_ctrl->setVisible(!is_zoomed);
+		unzoom_ctrl->setVisible(has_focus && is_zoomed);
 		open_ctrl->setVisible(true);
 		media_address_ctrl->setVisible(has_focus && !mini_controls);
 		media_play_slider_panel->setVisible(has_focus && !mini_controls);
@@ -291,6 +296,7 @@ void LLPanelPrimMediaControls::updateShape()
 		whitelist_icon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
 		// Disable zoom if HUD
 		zoom_ctrl->setEnabled(!objectp->isHUDAttachment());
+		unzoom_ctrl->setEnabled(!objectp->isHUDAttachment());
 		secure_lock_icon->setVisible(false);
 		mCurrentURL = media_impl->getCurrentMediaURL();
 		
@@ -310,8 +316,8 @@ void LLPanelPrimMediaControls::updateShape()
 			fwd_ctrl->setEnabled(has_focus);
 			media_address_ctrl->setVisible(false);
 			media_address_ctrl->setEnabled(false);
-			media_play_slider_panel->setVisible(!mini_controls);
-			media_play_slider_panel->setEnabled(!mini_controls);
+			media_play_slider_panel->setVisible(has_focus && !mini_controls);
+			media_play_slider_panel->setEnabled(has_focus && !mini_controls);
 				
 			volume_ctrl->setVisible(has_focus);
 			volume_up_ctrl->setVisible(has_focus);
@@ -688,24 +694,32 @@ bool LLPanelPrimMediaControls::isMouseOver()
 		getWindow()->getCursorPosition(&cursor_pos_window);
 		getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl);
 		
-		LLPanel* controls_panel = NULL;
-		controls_panel = getChild<LLPanel>("media_hover_controls");
-		if(controls_panel && !controls_panel->getVisible())
-		{
-			// The hover controls aren't visible -- use the focused controls instead.
-			controls_panel = getChild<LLPanel>("media_focused_controls");
-		}
+		LLView* controls_view = NULL;
+		controls_view = getChild<LLView>("media_controls");
 		
-		if(controls_panel && controls_panel->getVisible())
+		//FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow?
+		if(controls_view && controls_view->getVisible())
 		{
-			controls_panel->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
+			controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
 
-			LLView *hit_child = controls_panel->childFromPoint(x, y);
-			if(hit_child)
+			LLView *hit_child = controls_view->childFromPoint(x, y);
+			if(hit_child && hit_child->getVisible())
 			{
 				// This was useful for debugging both coordinate translation and view hieararchy problems...
-//				llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl;
-				result = true;
+				// llinfos << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << llendl;
+
+				// This will be a direct child of the LLLayoutStack, which should be a layout_panel.
+				// These may not shown/hidden by the logic in updateShape(), so we need to do another hit test on the children of the layout panel,
+				// which are the actual controls.
+				hit_child->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
+				
+				LLView *hit_child_2 = hit_child->childFromPoint(x, y);
+				if(hit_child_2 && hit_child_2->getVisible())
+				{
+					// This was useful for debugging both coordinate translation and view hieararchy problems...
+					// llinfos << "    mouse coords: " << x << ", " << y << " hit child 2 " << hit_child_2->getName() << llendl;
+					result = true;
+				}
 			}
 		}
 	}
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index bec670cdaa7f74b1ff3df25197d5e4c990e192fe..8147ff17f0fc2bda63efcc067d6aa042c61b764a 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -59,17 +59,61 @@ class LLAgentHandler : public LLCommandHandler
 			return false;
 		}
 
-		if (params[1].asString() == "about")
+		const std::string verb = params[1].asString();
+		if (verb == "about")
 		{
 			LLAvatarActions::showProfile(avatar_id);
 			return true;
 		}
 
-		if (params[1].asString() == "inspect")
+		if (verb == "inspect")
 		{
 			LLFloaterReg::showInstance("inspect_avatar", LLSD().insert("avatar_id", avatar_id));
 			return true;
 		}
+
+		if (verb == "im")
+		{
+			LLAvatarActions::startIM(avatar_id);
+			return true;
+		}
+
+		if (verb == "pay")
+		{
+			LLAvatarActions::pay(avatar_id);
+			return true;
+		}
+
+		if (verb == "offerteleport")
+		{
+			LLAvatarActions::offerTeleport(avatar_id);
+			return true;
+		}
+
+		if (verb == "requestfriend")
+		{
+			LLAvatarActions::requestFriendshipDialog(avatar_id);
+			return true;
+		}
+
+		if (verb == "mute")
+		{
+			if (! LLAvatarActions::isBlocked(avatar_id))
+			{
+				LLAvatarActions::toggleBlock(avatar_id);
+			}
+			return true;
+		}
+
+		if (verb == "unmute")
+		{
+			if (LLAvatarActions::isBlocked(avatar_id))
+			{
+				LLAvatarActions::toggleBlock(avatar_id);
+			}
+			return true;
+		}
+
 		return false;
 	}
 };
diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index b59d1d42f31acbcda672ae1f9379829adb3d3bc5..45c2fc116e7ff4ec0f8f8b2bbb5c12a793f9b114 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -36,6 +36,8 @@
 #include "llpanel.h"
 #include "llpanelprofile.h"
 #include "llavatarpropertiesprocessor.h"
+#include "llagent.h"
+#include "lltooldraganddrop.h"
 
 class LLPanelProfile;
 class LLPanelProfileTab;
@@ -64,6 +66,18 @@ class LLPanelProfileView : public LLPanelProfile
 
 	/*virtual*/ void togglePanel(LLPanel* panel);
 
+	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
+						   BOOL drop, EDragAndDropType cargo_type,
+						   void *cargo_data, EAcceptance *accept,
+						   std::string& tooltip_msg)
+	{
+		LLToolDragAndDrop::handleGiveDragAndDrop(getAvatarId(), gAgent.getSessionID(), drop,
+				 cargo_type, cargo_data, accept);
+
+		return TRUE;
+	}
+
+
 protected:
 
 	void onBackBtnClick();
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 7dd9df674c0c15302dbda39af77831e0187edc36..057cdde6f055b3a8f6ade4e70eb02afba90f8021 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
@@ -71,9 +71,10 @@ class LLTeleportHistoryFlatItem : public LLPanel
 
 	static void showPlaceInfoPanel(S32 index);
 private:
-	void onInfoBtnClick();
+	void onProfileBtnClick();
 
-	LLButton* mInfoBtn;
+	LLButton* mProfileBtn;
+	
 	LLTeleportHistoryPanel::ContextMenu *mContextMenu;
 
 	S32 mIndex;
@@ -95,8 +96,9 @@ BOOL LLTeleportHistoryFlatItem::postBuild()
 	LLTextBox *region = getChild<LLTextBox>("region");
 	region->setValue(mRegionName);
 
-	mInfoBtn = getChild<LLButton>("info_btn");
-	mInfoBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onInfoBtnClick, this));
+	mProfileBtn = getChild<LLButton>("profile_btn");
+        
+	mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this));
 
 	return true;
 }
@@ -111,7 +113,7 @@ void LLTeleportHistoryFlatItem::setValue(const LLSD& value)
 void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", true);
-	mInfoBtn->setVisible(true);
+	mProfileBtn->setVisible(true);
 
 	LLPanel::onMouseEnter(x, y, mask);
 }
@@ -119,7 +121,7 @@ void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 void LLTeleportHistoryFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", false);
-	mInfoBtn->setVisible(false);
+	mProfileBtn->setVisible(false);
 
 	LLPanel::onMouseLeave(x, y, mask);
 }
@@ -142,7 +144,7 @@ void LLTeleportHistoryFlatItem::showPlaceInfoPanel(S32 index)
 	LLSideTray::getInstance()->showPanel("panel_places", params);
 }
 
-void LLTeleportHistoryFlatItem::onInfoBtnClick()
+void LLTeleportHistoryFlatItem::onProfileBtnClick()
 {
 	LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex);
 }
@@ -161,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index,
 		if (parent)
 		{
 			parent->removeChild(mMenu);
-			mMenu->setParent(NULL);
 		}
 		delete mMenu;
 	}
@@ -357,7 +358,7 @@ void LLTeleportHistoryPanel::onCopySLURL()
 
 	U64 new_region_handle = to_region_handle(global_pos);
 
-	LLWorldMap::url_callback_t cb = boost::bind(
+	LLWorldMapMessage::url_callback_t cb = boost::bind(
 			&LLPanelPlacesTab::onRegionResponse, this,
 			global_pos, _1, _2, _3, _4);
 
@@ -404,6 +405,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L
 
 		if (tab_idx <= tabs_cnt - 4)
 		{
+			// All tabs, except last three, are tabs for one day, so just push tab_date back by one day
 			tab_date.secondsSinceEpoch(tab_date.secondsSinceEpoch() - seconds_in_day);
 		}
 		else if (tab_idx == tabs_cnt - 3) // 6 day and older, low boundary is 1 month
@@ -440,6 +442,7 @@ void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, L
 	}
 }
 
+// Called to add items, no more, than ADD_LIMIT at time
 void LLTeleportHistoryPanel::refresh()
 {
 	if (!mHistoryAccordion)
@@ -450,12 +453,16 @@ void LLTeleportHistoryPanel::refresh()
 
 	const LLTeleportHistoryStorage::slurl_list_t& items = mTeleportHistory->getItems();
 
+	// Setting tab_boundary_date to "now", so date from any item would be earlier, than boundary.
+	// That leads to call to getNextTab to get right tab_idx in first pass
 	LLDate tab_boundary_date =  LLDate::now();
+
 	LLFlatListView* curr_flat_view = NULL;
 
 	U32 added_items = 0;
 	while (mCurrentItem >= 0)
 	{
+		// Filtering
 		std::string landmark_title = items[mCurrentItem].mTitle;
 		LLStringUtil::toUpper(landmark_title);
 
@@ -468,10 +475,14 @@ void LLTeleportHistoryPanel::refresh()
 			continue;
 		}
 
+		// Checking whether date of item is earlier, than tab_boundary_date.
+		// In that case, item should be added to another tab
 		const LLDate &date = items[mCurrentItem].mDate;
 
 		if (date < tab_boundary_date)
 		{
+			// Getting apropriate tab_idx for this and subsequent items,
+			// tab_boundary_date would be earliest possible date for this tab
 			S32 tab_idx = 0;
 			getNextTab(date, tab_idx, tab_boundary_date);
 
@@ -578,6 +589,9 @@ void LLTeleportHistoryPanel::replaceItem(S32 removed_index)
 void LLTeleportHistoryPanel::showTeleportHistory()
 {
 	mDirty = true;
+
+	// Starting to add items from last one, in reverse order,
+	// since TeleportHistory keeps most recent item at the end
 	mCurrentItem = mTeleportHistory->getItems().size() - 1;
 
 	for (S32 n = mItemContainers.size() - 1; n >= 0; --n)
@@ -643,7 +657,6 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y
 		if (parent)
 		{
 			parent->removeChild(mAccordionTabMenu);
-			mAccordionTabMenu->setParent(NULL);
 		}
 		delete mAccordionTabMenu;
 	}
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index 7c1b403432475a4ae6225ae2b78505795631d43e..b34d9e876c7b47c1115bc4a857845ca3bc244da9 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
- * Copyright (c) 2001-2009, Linden Research, Inc.
+ * Copyright (c) 2009, Linden Research, Inc.
  * 
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 4ac109bf3d2391c754896b8dd6b16dca7ba6583c..5a70842a733bf0d1e525733ea74cac9cfa098cc8 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -57,7 +57,6 @@
 #include "llfirstuse.h"
 #include "llfocusmgr.h"
 #include "llmanipscale.h"
-#include "llpanelinventory.h"
 #include "llpreviewscript.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h
index 9d197aafa58b00d66f0aa265cbc7951271eca468..7bc935f986f053497611784610d64a0a17cc1dfc 100644
--- a/indra/newview/llpanelvolume.h
+++ b/indra/newview/llpanelvolume.h
@@ -45,7 +45,6 @@ class LLUICtrl;
 class LLButton;
 class LLViewerObject;
 class LLComboBox;
-class LLPanelInventory;
 class LLColorSwatchCtrl;
 
 class LLPanelVolume : public LLPanel
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index e97eb1df2b66e8f1df7f4145e31f9c07acaf35bb..2be0781487c66b32067e0fbaa268cae8de47dda3 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -32,22 +32,37 @@
 
 #include "llviewerprecompiledheaders.h"
 
+// common includes
+#include "lltrans.h"
+#include "llavataractions.h"
+#include "llagent.h"
+
 #include "llparticipantlist.h"
 #include "llavatarlist.h"
 #include "llspeakers.h"
 
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
+#if LL_MSVC
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list):
 	mSpeakerMgr(data_source),
-	mAvatarList(avatar_list)
+	mAvatarList(avatar_list),
+	mSortOrder(E_SORT_BY_NAME)
 {
-	mSpeakerAddListener = new SpeakerAddListener(mAvatarList);
-	mSpeakerRemoveListener = new SpeakerRemoveListener(mAvatarList);
-	mSpeakerClearListener = new SpeakerClearListener(mAvatarList);
+	mSpeakerAddListener = new SpeakerAddListener(*this);
+	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);
+	mSpeakerClearListener = new SpeakerClearListener(*this);
+	mSpeakerModeratorListener = new SpeakerModeratorUpdateListener(*this);
 
 	mSpeakerMgr->addListener(mSpeakerAddListener, "add");
 	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");
 	mSpeakerMgr->addListener(mSpeakerClearListener, "clear");
+	mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator");
+
+	mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
+	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
+	mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2));
 
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
@@ -56,26 +71,90 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mSpeakerMgr->getSpeakerList(&speaker_list, true);
 	for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
 	{
-		group_members.push_back((*it)->mID);
+		const LLPointer<LLSpeaker>& speakerp = *it;
+		group_members.push_back(speakerp->mID);
+		if ( speakerp->mIsModerator )
+		{
+			mModeratorList.insert(speakerp->mID);
+		}
 	}
-	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
 }
 
 LLParticipantList::~LLParticipantList()
 {
-	delete mSpeakerAddListener;
-	delete mSpeakerRemoveListener;
-	delete mSpeakerClearListener;
-	mSpeakerAddListener = NULL;
-	mSpeakerRemoveListener = NULL;
-	mSpeakerClearListener = NULL;
 }
 
-//
-// LLParticipantList::SpeakerAddListener
-//
-bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
+{
+	LLUUID clicked_id = list->getSelectedUUID();
+
+	if (clicked_id.isNull() || clicked_id == gAgent.getID())
+		return;
+	
+	LLAvatarActions::startIM(clicked_id);
+}
+
+void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
+{
+	LLAvatarList* list = dynamic_cast<LLAvatarList*>(ctrl);
+	if (list)
+	{
+		const std::string moderator_indicator(LLTrans::getString("IM_moderator_label")); 
+		const std::size_t moderator_indicator_len = moderator_indicator.length();
+
+		// Firstly remove moderators indicator
+		std::set<LLUUID>::const_iterator
+			moderator_list_it = mModeratorToRemoveList.begin(),
+			moderator_list_end = mModeratorToRemoveList.end();
+		for (;moderator_list_it != moderator_list_end; ++moderator_list_it)
+		{
+			LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it));
+			if ( item )
+			{
+				std::string name = item->getAvatarName();
+				size_t found = name.find(moderator_indicator);
+				if (found == std::string::npos)
+				{
+					name.erase(found, moderator_indicator_len);
+					item->setName(name);
+				}
+			}
+		}
+
+		mModeratorToRemoveList.clear();
+
+		// Add moderators indicator
+		moderator_list_it = mModeratorList.begin();
+		moderator_list_end = mModeratorList.end();
+		for (;moderator_list_it != moderator_list_end; ++moderator_list_it)
+		{
+			LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*> (list->getItemByValue(*moderator_list_it));
+			if ( item )
+			{
+				std::string name = item->getAvatarName();
+				size_t found = name.find(moderator_indicator);
+				if (found == std::string::npos)
+				{
+					name += " ";
+					name += moderator_indicator;
+					item->setName(name);
+				}
+			}
+		}
+	}
+}
+
+void LLParticipantList::setSortOrder(EParticipantSortOrder order)
+{
+	if ( mSortOrder != order )
+	{
+		mSortOrder = order;
+		sort();
+	}
+}
+
+bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLUUID uu_id = event->getValue().asUUID();
@@ -88,15 +167,13 @@ bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::L
 	}
 
 	group_members.push_back(uu_id);
+	// Mark AvatarList as dirty one
 	mAvatarList->setDirty();
-	mAvatarList->sortByName();
+	sort();
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerRemoveListener
-//
-bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	LLAvatarList::uuid_vector_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID());
@@ -108,10 +185,7 @@ bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents
 	return true;
 }
 
-//
-// LLParticipantList::SpeakerClearListener
-//
-bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 	group_members.clear();
@@ -119,3 +193,75 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents:
 	return true;
 }
 
+bool LLParticipantList::onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	const LLSD& evt_data = event->getValue();
+	if ( evt_data.has("id") && evt_data.has("is_moderator") )
+	{
+		LLUUID id = evt_data["id"];
+		bool is_moderator = evt_data["is_moderator"];
+		if ( id.notNull() )
+		{
+			if ( is_moderator )
+				mModeratorList.insert(id);
+			else
+			{
+				std::set<LLUUID>::iterator it = mModeratorList.find (id);
+				if ( it != mModeratorList.end () )
+				{
+					mModeratorToRemoveList.insert(id);
+					mModeratorList.erase(id);
+				}
+			}
+		}
+	}
+	return true;
+}
+
+void LLParticipantList::sort()
+{
+	if ( !mAvatarList )
+		return;
+
+	// TODO: Implement more sorting orders after specs updating (EM)
+	switch ( mSortOrder ) {
+	case E_SORT_BY_NAME :
+		mAvatarList->sortByName();
+		break;
+	default :
+		llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl;
+		return;
+	}
+}
+
+//
+// LLParticipantList::SpeakerAddListener
+//
+bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onAddItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerRemoveListener
+//
+bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onRemoveItemEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerClearListener
+//
+bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+	return mParent.onClearListEvent(event, userdata);
+}
+
+//
+// LLParticipantList::SpeakerModeratorListener
+//
+bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
+{
+		return mParent.onModeratorUpdateEvent(event, userdata);
+}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 68aae0aee540dca7e64e12d1aa4a622efccaeb00..fc34dd308bafa627697e6d4fe5ab43cc90886958 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -35,49 +35,91 @@
 
 class LLSpeakerMgr;
 class LLAvatarList;
+class LLUICtrl;
 
 class LLParticipantList
 {
+	LOG_CLASS(LLParticipantList);
 	public:
 		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list);
 		~LLParticipantList();
 
+		typedef enum e_participant_sort_oder {
+			E_SORT_BY_NAME = 0,
+		} EParticipantSortOrder;
+
+		/**
+		  * Set and sort Avatarlist by given order
+		  */
+		void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME);
+
 	protected:
+		/**
+		 * LLSpeakerMgr event handlers
+		 */
+		bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+
+		/**
+		 * Sorts the Avatarlist by stored order
+		 */
+		void sort();
 
 		//List of listeners implementing LLOldEvents::LLSimpleListener.
 		//There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way
 		//that one listener can handle only one type of event
-		class SpeakerAddListener : public LLOldEvents::LLSimpleListener
+		class BaseSpeakerListner : public LLOldEvents::LLSimpleListener
 		{
 		public:
-			SpeakerAddListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
+			BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {}
+		protected:
+			LLParticipantList& mParent;
+		};
 
+		class SpeakerAddListener : public BaseSpeakerListner
+		{
+		public:
+			SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerRemoveListener : public LLOldEvents::LLSimpleListener
+		class SpeakerRemoveListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerRemoveListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
-
+			SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
 
-		class SpeakerClearListener : public LLOldEvents::LLSimpleListener
+		class SpeakerClearListener : public BaseSpeakerListner
 		{
 		public:
-			SpeakerClearListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {}
+			SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
+			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		};
 
+		class SpeakerModeratorUpdateListener : public BaseSpeakerListner
+		{
+		public:
+			SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-			LLAvatarList* mAvatarList;
 		};
+
 	private:
+		void onAvatarListDoubleClicked(LLAvatarList* list);
+		void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param);
+
 		LLSpeakerMgr*		mSpeakerMgr;
-		LLAvatarList* 		mAvatarList;
+		LLAvatarList*		mAvatarList;
+
+		std::set<LLUUID>	mModeratorList;
+		std::set<LLUUID>	mModeratorToRemoveList;
+
+		LLPointer<SpeakerAddListener>				mSpeakerAddListener;
+		LLPointer<SpeakerRemoveListener>			mSpeakerRemoveListener;
+		LLPointer<SpeakerClearListener>				mSpeakerClearListener;
+		LLPointer<SpeakerModeratorUpdateListener>	mSpeakerModeratorListener;
 
-		SpeakerAddListener* mSpeakerAddListener;
-		SpeakerRemoveListener* mSpeakerRemoveListener;
-		SpeakerClearListener* mSpeakerClearListener;
+		EParticipantSortOrder	mSortOrder;
 };
diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp
index b3b48577278f291d02494c2aae3637ef723ed3c0..83443687c92646a86af29f0205ec2dc01516ee3a 100644
--- a/indra/newview/llplacesinventorybridge.cpp
+++ b/indra/newview/llplacesinventorybridge.cpp
@@ -38,6 +38,7 @@
 
 #include "llfloaterinventory.h" // for LLInventoryPanel
 #include "llfolderview.h" // for FIRST_SELECTED_ITEM
+#include "llinventorypanel.h"
 
 
 static const std::string LANDMARKS_INVENTORY_LIST_NAME("landmarks_list");
@@ -83,7 +84,7 @@ void LLPlacesLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		// they should be synchronized with Places/My Landmarks/Gear menu. See EXT-1601 
 	}
 
-	hideContextEntries(menu, items, disabled_items);
+	hide_context_entries(menu, items, disabled_items);
 }
 
 
@@ -116,7 +117,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		// repeat parent functionality
  		sSelf = this; // necessary for "New Folder" functionality
 
-		hideContextEntries(menu, items, disabled_items);
+		hide_context_entries(menu, items, disabled_items);
 	}
 }
 
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index b06e70c00af466743aa88e0b3b023cfef8199d67..34e78b5c469abce87d5aef2c54988ce79f6f9f83 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -45,6 +45,7 @@
 #include "lltooldraganddrop.h"
 #include "llradiogroup.h"
 #include "llassetstorage.h"
+#include "llviewerassettype.h"
 #include "llviewerobject.h"
 #include "llviewerobjectlist.h"
 #include "lldbstrings.h"
@@ -317,7 +318,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
 		   && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y))
 		{
 			EDragAndDropType type;
-			type = LLAssetType::lookupDragAndDropType(item->getType());
+			type = LLViewerAssetType::lookupDragAndDropType(item->getType());
 			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY;
 			if(!mObjectUUID.isNull())
 			{
@@ -406,7 +407,7 @@ void LLPreview::onDiscardBtn(void* data)
 	*/
 
 	// Move the item to the trash
-	LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if (item->getParentUUID() != trash_id)
 	{
 		LLInventoryModel::update_list_t update;
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index ab2afb80560c572d304421b99dceddb64fad66f8..7b3a20d1020edf7323f7760f4c74edbb377cf9ae 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -130,10 +130,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob
 	preview->setObjectID(object_id);
 	
 	// Start speculative download of sounds and animations
-	LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_ANIMATION);
+	const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION);
 	gInventory.startBackgroundFetch(animation_folder_id);
 
-	LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_SOUND);
+	const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND);
 	gInventory.startBackgroundFetch(sound_folder_id);
 
 	// this will call refresh when we have everything.
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index ac7abf14485da500d2c80ddbe38e5931ef15228d..2382befcfa7144435ad602aee25fd1b95e30589d 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -89,7 +89,6 @@
 #include "lltrans.h"
 #include "llviewercontrol.h"
 #include "llappviewer.h"
-#include "llpanelinventory.h"
 
 const std::string HELLO_LSL =
 	"default\n"
@@ -452,7 +451,7 @@ bool LLScriptEdCore::hasChanged()
 {
 	if (!mEditor) return false;
 
-	return !mEditor->isPristine();
+	return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
 }
 
 void LLScriptEdCore::draw()
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 9c21faa3be5d386ea38bcd604cf909b57bef7fe7..3eab13fc4a23b942e51957a09529d91bbefe9704 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -48,6 +48,7 @@
 #include "lltextbox.h"
 #include "lltextureview.h"
 #include "llui.h"
+#include "llviewerinventory.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
 #include "lluictrlfactory.h"
@@ -63,7 +64,7 @@ const F32 PREVIEW_TEXTURE_MIN_ASPECT = 0.005f;
 
 
 LLPreviewTexture::LLPreviewTexture(const LLSD& key)
-	: LLPreview( key ),
+	: LLPreview(key),
 	  mLoadingFullImage( FALSE ),
 	  mShowKeepDiscard(FALSE),
 	  mCopyToInv(FALSE),
@@ -71,7 +72,8 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	  mUpdateDimensions(TRUE),
 	  mLastHeight(0),
 	  mLastWidth(0),
-	  mAspectRatio(0.f)
+	  mAspectRatio(0.f),
+	  mPreviewToSave(FALSE)
 {
 	const LLInventoryItem *item = getItem();
 	if(item)
@@ -104,6 +106,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 		mIsCopyable = TRUE;
 	}
 
+	if (key.has("save_as"))
+	{
+		mPreviewToSave = TRUE;
+	}
 	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
 }
 
@@ -181,6 +187,12 @@ void LLPreviewTexture::draw()
 
 		if ( mImage.notNull() )
 		{
+			// Automatically bring up SaveAs dialog if we opened this to save the texture.
+			if (mPreviewToSave)
+			{
+				mPreviewToSave = FALSE;
+				saveAs();
+			}
 			// Draw the texture
 			glColor3f( 1.f, 1.f, 1.f );
 			gl_draw_scaled_image(interior.mLeft,
@@ -209,7 +221,7 @@ void LLPreviewTexture::draw()
 
 			if( mLoadingFullImage )
 			{
-				LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving:"), 0,
+				LLFontGL::getFontSansSerif()->renderUTF8(LLTrans::getString("Receiving"), 0,
 					interior.mLeft + 4, 
 					interior.mBottom + 4,
 					LLColor4::white, LLFontGL::LEFT, LLFontGL::BOTTOM,
@@ -304,6 +316,11 @@ void LLPreviewTexture::onFocusReceived()
 	LLPreview::onFocusReceived();
 }
 
+void LLPreviewTexture::openToSave()
+{
+	mPreviewToSave = TRUE;
+}
+
 // static
 void LLPreviewTexture::onFileLoadedForSave(BOOL success, 
 											LLViewerFetchedTexture *src_vi,
@@ -356,6 +373,7 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success,
 	{
 		LLNotifications::instance().add("CannotDownloadFile");
 	}
+
 }
 
 
@@ -552,8 +570,9 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata)
 
 void LLPreviewTexture::loadAsset()
 {
-	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
+	mImage->forceToSaveRawImage(0) ;
 	mAssetStatus = PREVIEW_ASSET_LOADING;
 	updateDimensions();
 }
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index 520626b49f12e0e92ab9ea40f4dbd2faf9987426..9b3c91d831253fff05ffe91cbbc67bd20dfbdeb7 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -67,8 +67,7 @@ class LLPreviewTexture : public LLPreview
 							S32 discard_level, 
 							BOOL final,
 							void* userdata );
-
-
+	void 				openToSave();
 protected:
 	void				init();
 	/* virtual */ BOOL	postBuild();
@@ -77,14 +76,17 @@ class LLPreviewTexture : public LLPreview
 	
 private:
 	void				updateDimensions();
-	LLUUID						mImageID;
+	LLUUID				mImageID;
 	LLPointer<LLViewerFetchedTexture>		mImage;
 	BOOL				mLoadingFullImage;
 	std::string			mSaveFileName;
 	LLFrameTimer		mSavedFileTimer;
 	BOOL                mShowKeepDiscard;
 	BOOL                mCopyToInv;
-	
+
+	// Save the image once it's loaded.
+	BOOL                mPreviewToSave;
+
 	// This is stored off in a member variable, because the save-as
 	// button and drag and drop functionality need to know.
 	BOOL mIsCopyable;
@@ -94,6 +96,4 @@ class LLPreviewTexture : public LLPreview
 	F32 mAspectRatio;
 	BOOL mUpdateDimensions;
 };
-
-
 #endif  // LL_LLPREVIEWTEXTURE_H
diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h
index 46b79150bbf4c54cabbf45971a2ba19b8c30cd72..b4b90426895daa292c8ed8a095b113ef2c4d353c 100644
--- a/indra/newview/llresourcedata.h
+++ b/indra/newview/llresourcedata.h
@@ -39,11 +39,12 @@
 struct LLResourceData
 {
 	LLAssetInfo mAssetInfo;
-	LLAssetType::EType mPreferredLocation;
+	LLFolderType::EType mPreferredLocation;
 	LLInventoryType::EType mInventoryType;
 	U32 mNextOwnerPerm;
 	S32 mExpectedUploadCost;
 	void *mUserData;
+	static const S8 INVALID_LOCATION = -2;
 };
 
 #endif
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 987bc4b596aaea6d8671eb8bd30c4e807b45bf7e..fd31690622f8b65ad63a16c7de08f5bb7d184b04 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -204,8 +204,7 @@ class LLScreenChannel : public LLScreenChannelBase
 	// signal on rejecting of a toast event
 	typedef boost::function<void (LLUUID id)> reject_tost_callback_t;
 	typedef boost::signals2::signal<void (LLUUID id)> reject_tost_signal_t;
-	reject_tost_signal_t mRejectToastSignal;	
-	boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); }
+	reject_tost_signal_t mRejectToastSignal; boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mRejectToastSignal.connect(cb); }
 
 private:
 	struct ToastElem
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 0a520ff65fbb155803fd9da76a1288e1fdd418dd..1fbaeb94f534b1378402f6a36a829d659bf0a080 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)
 	F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() );
 	if (current_weight != new_weight )
 	{
-		self->mWearable->setVisualParamWeight( param->getID(), new_weight, TRUE );
+		self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE );
 		gAgent.getAvatarObject()->updateVisualParams();
 	}
 }
@@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
 			if (slider->getMinValue() < new_percent
 				&& new_percent < slider->getMaxValue())
 			{
-				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, TRUE);
+				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE);
 				gAgent.getAvatarObject()->updateVisualParams();
 
 				slider->setValue( weightToPercent( new_weight ) );
@@ -330,7 +330,7 @@ void LLScrollingPanelParam::onHintMinMouseUp( void* userdata )
 			if (slider->getMinValue() < new_percent
 				&& new_percent < slider->getMaxValue())
 			{
-				self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+				self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE);
 				slider->setValue( self->weightToPercent( new_weight ) );
 			}
 		}
@@ -364,7 +364,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
 				if (slider->getMinValue() < new_percent
 					&& new_percent < slider->getMaxValue())
 				{
-					self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+					self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, FALSE);
 					slider->setValue( self->weightToPercent( new_weight ) );
 				}
 			}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index a2d0b71962ff8172196ba07b7cb27fa469c8f1a3..e0e4dcb45de6bbd86d552c2b92ea5b48e3940ffa 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -67,6 +67,7 @@
 #include "llinventorymodel.h"
 #include "llmenugl.h"
 #include "llmutelist.h"
+#include "llsidepaneltaskinfo.h"
 #include "llslurl.h"
 #include "llstatusbar.h"
 #include "llsurface.h"
@@ -800,6 +801,8 @@ LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32
 		return NULL;
 	}
 
+	mHoverObjects->mPrimaryObject = objectp; 
+
 	objectp = objectp->getRootEdit();
 
 	// is the requested object the same as the existing hover object root?
@@ -833,6 +836,11 @@ LLSelectNode *LLSelectMgr::getHoverNode()
 	return mHoverObjects->getFirstRootNode();
 }
 
+LLSelectNode *LLSelectMgr::getPrimaryHoverNode()
+{
+	return mHoverObjects->mSelectNodeMap[mHoverObjects->mPrimaryObject];
+}
+
 void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
 {
 	if (!objectp)
@@ -1440,7 +1448,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
 				// Texture picker defaults aren't inventory items
 				// * Don't need to worry about permissions for them
 				// * Can just apply the texture and be done with it.
-				objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+				objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 			}
 			return true;
 		}
@@ -1596,7 +1604,7 @@ BOOL LLSelectMgr::selectionRevertTextures()
 					}
 					else
 					{
-						object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+						object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 					}
 				}
 			}
@@ -2819,7 +2827,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response,
 	case 0:
 		{
 			// TODO: Make sure you have delete permissions on all of them.
-			LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			// attempt to derez into the trash.
 			LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id);
 			LLSelectMgr::getInstance()->sendListToRegions("DeRezObject",
@@ -3398,7 +3406,7 @@ void LLSelectMgr::deselectAll()
 	{
 		return;
 	}
-
+		
 	// Zap the angular velocity, as the sim will set it to zero
 	for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
 		 iter != mSelectedObjects->end(); iter++ )
@@ -3488,6 +3496,7 @@ void LLSelectMgr::deselectAllIfTooFar()
 	LLVector3d selectionCenter = getSelectionCenterGlobal();
 	if (gSavedSettings.getBOOL("LimitSelectDistance")
 		&& (!mSelectedObjects->getPrimaryObject() || !mSelectedObjects->getPrimaryObject()->isAvatar())
+		&& (mSelectedObjects->getPrimaryObject() != LLViewerMediaFocus::getInstance()->getFocusedObject())
 		&& !mSelectedObjects->isAttachment()
 		&& !selectionCenter.isExactlyZero())
 	{
@@ -4596,7 +4605,7 @@ void LLSelectMgr::updateSilhouettes()
 
 	if (!mSilhouetteImagep)
 	{
-		mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, TRUE);
+		mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI);
 	}
 
 	mHighlightedObjects->cleanupNodes();
@@ -4898,12 +4907,21 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 	}
 	if (mSelectedObjects->getNumNodes())
 	{
-		LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 		LLUUID inspect_item_id= LLUUID::null;
+#if 0		
+		LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 		if(inspect_instance)
 		{
 			inspect_item_id = inspect_instance->getSelectedUUID();
 		}
+#endif
+		LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
+		if (panel_task_info)
+		{
+			inspect_item_id = panel_task_info->getSelectedUUID();
+		}
+
+		LLUUID focus_item_id = LLViewerMediaFocus::getInstance()->getFocusedObjectID();
 		for (S32 pass = 0; pass < 2; pass++)
 		{
 			for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
@@ -4917,7 +4935,11 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 				{
 					continue;
 				}
-				if(objectp->getID() == inspect_item_id)
+				if (objectp->getID() == focus_item_id)
+				{
+					node->renderOneSilhouette(gFocusMgr.getFocusColor());
+				}
+				else if(objectp->getID() == inspect_item_id)
 				{
 					node->renderOneSilhouette(sHighlightInspectColor);
 				}
@@ -4971,19 +4993,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 		}
 	}
 
-#if 0	
-	// Hilight focused media object
-	{
-		LLViewerObject* objectp = LLViewerMediaFocus::getInstance()->getFocusedObject();
-		if(objectp)
-		{
-			// FIXME: how do I construct a silhouette for an object that's not selected?
-			// Would we need to add another LLObjectSelectionHandle for this purpose?
-			node->renderOneSilhouette(gFocusMgr.getFocusColor());
-		}
-	}
-#endif
-
 	if (for_hud && avatar)
 	{
 		glMatrixMode(GL_PROJECTION);
@@ -5565,12 +5574,19 @@ void dialog_refresh_all()
 	}
 
 	LLFloaterProperties::dirtyAll();
-	
+
+#if 0	
 	LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
 	if(inspect_instance)
 	{
 		inspect_instance->dirty();
 	}
+#endif
+	LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel();
+	if (panel_task_info)
+	{
+		panel_task_info->dirty();
+	}
 }
 
 S32 get_family_count(LLViewerObject *parent)
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index b51876594619ef254bc1a8e59556e268293ec523..73bd7b805d824f2be1b343e05c4f4a19b18688ca 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -405,6 +405,7 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 
 	LLObjectSelectionHandle setHoverObject(LLViewerObject *objectp, S32 face = -1);
 	LLSelectNode *getHoverNode();
+	LLSelectNode *getPrimaryHoverNode();
 
 	void highlightObjectOnly(LLViewerObject *objectp);
 	void highlightObjectAndFamily(LLViewerObject *objectp);
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6aa5c53194f5573a2d2391f2fdd82547fca34b38
--- /dev/null
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -0,0 +1,274 @@
+/**
+ * @file LLSidepanelInventory.cpp
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventory.h"
+
+#include "llagent.h"
+#include "llbutton.h"
+#include "llinventorybridge.h"
+#include "llinventorypanel.h"
+#include "llpanelmaininventory.h"
+#include "llsidepaneliteminfo.h"
+#include "llsidepaneltaskinfo.h"
+#include "lltabcontainer.h"
+#include "llselectmgr.h"
+
+static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
+
+LLSidepanelInventory::LLSidepanelInventory()
+	:	LLPanel(),
+		mItemPanel(NULL)
+{
+
+	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+}
+
+LLSidepanelInventory::~LLSidepanelInventory()
+{
+}
+
+BOOL LLSidepanelInventory::postBuild()
+{
+	// UI elements from inventory panel
+	{
+		mInventoryPanel = getChild<LLPanel>("sidepanel__inventory_panel");
+		
+		mInfoBtn = mInventoryPanel->getChild<LLButton>("info_btn");
+		mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this));
+		
+		mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");
+		mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
+		
+		mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");
+		mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
+		
+		mPlayBtn = mInventoryPanel->getChild<LLButton>("play_btn");
+		mPlayBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onPlayButtonClicked, this));
+		
+		mTeleportBtn = mInventoryPanel->getChild<LLButton>("teleport_btn");
+		mTeleportBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onTeleportButtonClicked, this));
+		
+		mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
+		mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
+		
+		LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+		panel_main_inventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+	}
+
+	// UI elements from item panel
+	{
+		mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+		
+		LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
+		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+	}
+
+	// UI elements from task panel
+	{
+		mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
+		if (mTaskPanel)
+		{
+			LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
+			back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
+		}
+	}
+	
+	return TRUE;
+}
+
+void LLSidepanelInventory::onOpen(const LLSD& key)
+{
+	if(key.size() == 0)
+		return;
+
+	mItemPanel->reset();
+
+	if (key.has("id"))
+	{
+		mItemPanel->setItemID(key["id"].asUUID());
+		if (key.has("object"))
+		{
+			mItemPanel->setObjectID(key["object"].asUUID());
+		}
+		showItemInfoPanel();
+	}
+	if (key.has("task"))
+	{
+		if (mTaskPanel)
+			mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
+		showTaskInfoPanel();
+	}
+}
+
+void LLSidepanelInventory::onInfoButtonClicked()
+{
+	LLInventoryItem *item = getSelectedItem();
+	if (item)
+	{
+		mItemPanel->reset();
+		mItemPanel->setItemID(item->getUUID());
+		showItemInfoPanel();
+	}
+}
+
+void LLSidepanelInventory::onShareButtonClicked()
+{
+}
+
+void LLSidepanelInventory::performActionOnSelection(const std::string &action)
+{
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return;
+	}
+	current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action);
+}
+
+void LLSidepanelInventory::onWearButtonClicked()
+{
+	performActionOnSelection("wear");
+	performActionOnSelection("attach");
+}
+
+void LLSidepanelInventory::onPlayButtonClicked()
+{
+	performActionOnSelection("activate");
+}
+
+void LLSidepanelInventory::onTeleportButtonClicked()
+{
+	performActionOnSelection("teleport");
+}
+
+void LLSidepanelInventory::onOverflowButtonClicked()
+{
+}
+
+void LLSidepanelInventory::onBackButtonClicked()
+{
+	showInventoryPanel();
+}
+
+void LLSidepanelInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
+{
+	updateVerbs();
+}
+
+void LLSidepanelInventory::showItemInfoPanel()
+{
+	mItemPanel->setVisible(TRUE);
+	if (mTaskPanel)
+		mTaskPanel->setVisible(FALSE);
+	mInventoryPanel->setVisible(FALSE);
+
+	mItemPanel->dirty();
+	mItemPanel->setIsEditing(FALSE);
+}
+
+void LLSidepanelInventory::showTaskInfoPanel()
+{
+	mItemPanel->setVisible(FALSE);
+	mInventoryPanel->setVisible(FALSE);
+
+	if (mTaskPanel)
+	{
+		mTaskPanel->setVisible(TRUE);
+		mTaskPanel->dirty();
+		mTaskPanel->setIsEditing(FALSE);
+	}
+}
+
+void LLSidepanelInventory::showInventoryPanel()
+{
+	mItemPanel->setVisible(FALSE);
+	if (mTaskPanel)
+		mTaskPanel->setVisible(FALSE);
+	mInventoryPanel->setVisible(TRUE);
+	updateVerbs();
+}
+
+void LLSidepanelInventory::updateVerbs()
+{
+	mInfoBtn->setEnabled(FALSE);
+	mShareBtn->setEnabled(FALSE);
+
+	mWearBtn->setVisible(FALSE);
+	mWearBtn->setEnabled(FALSE);
+	mPlayBtn->setVisible(FALSE);
+	mPlayBtn->setEnabled(FALSE);
+ 	mTeleportBtn->setVisible(FALSE);
+ 	mTeleportBtn->setEnabled(FALSE);
+	
+	const LLInventoryItem *item = getSelectedItem();
+	if (!item)
+		return;
+
+	mInfoBtn->setEnabled(TRUE);
+	mShareBtn->setEnabled(TRUE);
+
+	switch(item->getInventoryType())
+	{
+		case LLInventoryType::IT_WEARABLE:
+		case LLInventoryType::IT_OBJECT:
+		case LLInventoryType::IT_ATTACHMENT:
+			mWearBtn->setVisible(TRUE);
+			mWearBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_SOUND:
+		case LLInventoryType::IT_GESTURE:
+		case LLInventoryType::IT_ANIMATION:
+			mPlayBtn->setVisible(TRUE);
+			mPlayBtn->setEnabled(TRUE);
+			break;
+		case LLInventoryType::IT_LANDMARK:
+			mTeleportBtn->setVisible(TRUE);
+			mTeleportBtn->setEnabled(TRUE);
+			break;
+		default:
+			break;
+	}
+}
+
+LLInventoryItem *LLSidepanelInventory::getSelectedItem()
+{
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+	if (!current_item)
+	{
+		return NULL;
+	}
+	const LLUUID &item_id = current_item->getListener()->getUUID();
+	LLInventoryItem *item = gInventory.getItem(item_id);
+	return item;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
new file mode 100644
index 0000000000000000000000000000000000000000..681af7fafabc0e418f6f45c95a31f3dfad599acd
--- /dev/null
+++ b/indra/newview/llsidepanelinventory.h
@@ -0,0 +1,90 @@
+/** 
+ * @file LLSidepanelInventory.h
+ * @brief Side Bar "Inventory" panel
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORY_H
+#define LL_LLSIDEPANELINVENTORY_H
+
+#include "llpanel.h"
+
+class LLFolderViewItem;
+class LLInventoryItem;
+class LLPanelMainInventory;
+class LLSidepanelItemInfo;
+class LLSidepanelTaskInfo;
+
+class LLSidepanelInventory : public LLPanel
+{
+public:
+	LLSidepanelInventory();
+	virtual ~LLSidepanelInventory();
+
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+
+protected:
+	// Tracks highlighted (selected) item in inventory panel.
+	LLInventoryItem *getSelectedItem();
+	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
+	// "wear", "teleport", etc.
+	void performActionOnSelection(const std::string &action);
+
+	void showItemInfoPanel();
+	void showTaskInfoPanel();
+	void showInventoryPanel();
+	void updateVerbs();
+
+	//
+	// UI Elements
+	//
+private:
+	LLPanel*					mInventoryPanel; // Main inventory view
+	LLSidepanelItemInfo*		mItemPanel; // Individual item view
+	LLSidepanelTaskInfo*		mTaskPanel; // Individual in-world object view
+
+protected:
+	void 						onInfoButtonClicked();
+	void 						onShareButtonClicked();
+	void 						onWearButtonClicked();
+	void 						onPlayButtonClicked();
+	void 						onTeleportButtonClicked();
+	void 						onOverflowButtonClicked();
+	void 						onBackButtonClicked();
+private:
+	LLButton*					mInfoBtn;
+	LLButton*					mShareBtn;
+	LLButton*					mWearBtn;
+	LLButton*					mPlayBtn;
+	LLButton*					mTeleportBtn;
+	LLButton*					mOverflowBtn;
+
+};
+
+#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..162198f1c55c193b19f786d5160b28eed87d9260
--- /dev/null
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -0,0 +1,155 @@
+/** 
+ * @file llsidepanelinventorysubpanel.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepanelinventorysubpanel.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelInventorySubpanel
+///----------------------------------------------------------------------------
+
+// Default constructor
+LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel()
+  : LLPanel(),
+	mIsDirty(TRUE),
+	mIsEditing(FALSE),
+	mEditBtn(NULL),
+	mCancelBtn(NULL),
+	mSaveBtn(NULL)
+{
+}
+
+// Destroys the object
+LLSidepanelInventorySubpanel::~LLSidepanelInventorySubpanel()
+{
+}
+
+// virtual
+BOOL LLSidepanelInventorySubpanel::postBuild()
+{
+	mEditBtn = getChild<LLButton>("edit_btn");
+	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onEditButtonClicked, this));
+
+	mSaveBtn = getChild<LLButton>("save_btn");
+	mSaveBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onSaveButtonClicked, this));
+
+	mCancelBtn = getChild<LLButton>("cancel_btn");
+	mCancelBtn->setClickedCallback(boost::bind(&LLSidepanelInventorySubpanel::onCancelButtonClicked, this));
+	return TRUE;
+}
+
+void LLSidepanelInventorySubpanel::setVisible(BOOL visible)
+{
+	if (visible)
+	{
+		dirty();
+	}
+	LLPanel::setVisible(visible);
+}
+
+void LLSidepanelInventorySubpanel::setIsEditing(BOOL edit)
+{
+	mIsEditing = edit;
+	mIsDirty = TRUE;
+}
+
+BOOL LLSidepanelInventorySubpanel::getIsEditing() const
+{
+	return mIsEditing;
+}
+
+void LLSidepanelInventorySubpanel::reset()
+{
+	mIsDirty = TRUE;
+}
+
+void LLSidepanelInventorySubpanel::draw()
+{
+	if (mIsDirty)
+	{
+		mIsDirty = FALSE;
+		refresh();
+		updateVerbs();
+	}
+
+	LLPanel::draw();
+}
+
+void LLSidepanelInventorySubpanel::dirty()
+{
+	mIsDirty = TRUE;
+	setIsEditing(FALSE);
+}
+
+void LLSidepanelInventorySubpanel::updateVerbs()
+{
+	mEditBtn->setVisible(!mIsEditing);
+	mSaveBtn->setVisible(mIsEditing);
+	mCancelBtn->setVisible(mIsEditing);
+}
+
+void LLSidepanelInventorySubpanel::onEditButtonClicked()
+{
+	setIsEditing(TRUE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onSaveButtonClicked()
+{
+	save();
+	setIsEditing(FALSE);
+	refresh();
+	updateVerbs();
+}
+
+void LLSidepanelInventorySubpanel::onCancelButtonClicked()
+{
+	setIsEditing(FALSE);
+	refresh();
+	updateVerbs();
+}
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
new file mode 100644
index 0000000000000000000000000000000000000000..6503887cd1a97f79c0623627a92b3ff7699c1b04
--- /dev/null
+++ b/indra/newview/llsidepanelinventorysubpanel.h
@@ -0,0 +1,82 @@
+/** 
+ * @file llsidepanelinventorysubpanel.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELINVENTORYSUBPANEL_H
+#define LL_LLSIDEPANELINVENTORYSUBPANEL_H
+
+#include "llpanel.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelInventorySubpanel
+// Base class for inventory sidepanel panels (e.g. item info, task info).
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+
+class LLSidepanelInventorySubpanel : public LLPanel
+{
+public:
+	LLSidepanelInventorySubpanel();
+	virtual ~LLSidepanelInventorySubpanel();
+
+	/*virtual*/ void setVisible(BOOL visible);
+	virtual BOOL postBuild();
+	virtual void draw();
+	virtual void reset();
+
+	void dirty();
+	void setIsEditing(BOOL edit);
+protected:
+	virtual void refresh() = 0;
+	virtual void save() = 0;
+	virtual void updateVerbs();
+	
+	BOOL getIsEditing() const;
+	
+	//
+	// UI Elements
+	// 
+protected:
+	void 						onEditButtonClicked();
+	void 						onSaveButtonClicked();
+	void 						onCancelButtonClicked();
+	LLButton*					mEditBtn;
+	LLButton*					mSaveBtn;
+	LLButton*					mCancelBtn;
+
+private:
+	BOOL mIsDirty; 		// item properties need to be updated
+	BOOL mIsEditing; 	// if we're in edit mode
+};
+
+#endif // LL_LLSIDEPANELINVENTORYSUBPANEL_H
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9d2960fbed15ce00021ba7946baa104c6283b66c
--- /dev/null
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -0,0 +1,882 @@
+/** 
+ * @file llsidepaneliteminfo.cpp
+ * @brief A floater which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llsidepaneliteminfo.h"
+
+#include "roles_constants.h"
+
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llbutton.h"
+#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llinventorymodel.h"
+#include "lllineeditor.h"
+#include "llradiogroup.h"
+#include "llviewercontrol.h"
+#include "llviewerinventory.h"
+#include "llviewerobjectlist.h"
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLItemPropertiesObserver
+//
+// Helper class to watch for changes to the item.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLItemPropertiesObserver : public LLInventoryObserver
+{
+public:
+	LLItemPropertiesObserver(LLSidepanelItemInfo* floater)
+		: mFloater(floater)
+	{
+		gInventory.addObserver(this);
+	}
+	virtual ~LLItemPropertiesObserver()
+	{
+		gInventory.removeObserver(this);
+	}
+	virtual void changed(U32 mask);
+private:
+	LLSidepanelItemInfo* mFloater;
+};
+
+void LLItemPropertiesObserver::changed(U32 mask)
+{
+	// if there's a change we're interested in.
+	if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
+	{
+		mFloater->dirty();
+	}
+}
+
+
+
+///----------------------------------------------------------------------------
+/// Class LLSidepanelItemInfo
+///----------------------------------------------------------------------------
+
+static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
+
+// Default constructor
+LLSidepanelItemInfo::LLSidepanelItemInfo()
+  : mItemID(LLUUID::null)
+{
+	mPropertiesObserver = new LLItemPropertiesObserver(this);
+	
+	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
+}
+
+// Destroys the object
+LLSidepanelItemInfo::~LLSidepanelItemInfo()
+{
+	delete mPropertiesObserver;
+	mPropertiesObserver = NULL;
+}
+
+// virtual
+BOOL LLSidepanelItemInfo::postBuild()
+{
+	LLSidepanelInventorySubpanel::postBuild();
+
+	// build the UI
+	// item name & description
+	childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe);
+	//getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
+	childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe);
+	//getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
+
+	// Creator information
+	getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this));
+
+	// owner information
+	getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this));
+
+	refresh();
+	return TRUE;
+}
+
+void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
+{
+	mObjectID = object_id;
+}
+
+void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
+{
+	mItemID = item_id;
+}
+
+void LLSidepanelItemInfo::reset()
+{
+	LLSidepanelInventorySubpanel::reset();
+
+	mObjectID = LLUUID::null;
+	mItemID = LLUUID::null;
+}
+
+void LLSidepanelItemInfo::refresh()
+{
+	LLInventoryItem* item = findItem();
+	if(item)
+	{
+		refreshFromItem(item);
+		updateVerbs();
+	}
+	else
+	{
+		if (getIsEditing())
+		{
+			setIsEditing(FALSE);
+			return;
+		}
+	}
+
+	if (!getIsEditing())
+	{
+		const std::string no_item_names[]={
+			"LabelItemName",
+			"LabelItemDesc",
+			"LabelCreatorName",
+			"LabelOwnerName",
+			"CheckOwnerModify",
+			"CheckOwnerCopy",
+			"CheckOwnerTransfer",
+			"CheckShareWithGroup",
+			"CheckEveryoneCopy",
+			"CheckNextOwnerModify",
+			"CheckNextOwnerCopy",
+			"CheckNextOwnerTransfer",
+			"CheckPurchase",
+			"RadioSaleType",
+			"Edit Cost"
+		};
+
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
+		{
+			childSetEnabled(no_item_names[t],false);
+		}
+		
+		const std::string hide_names[]={
+			"BaseMaskDebug",
+			"OwnerMaskDebug",
+			"GroupMaskDebug",
+			"EveryoneMaskDebug",
+			"NextMaskDebug"
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(hide_names); ++t)
+		{
+			childSetVisible(hide_names[t],false);
+		}
+	}
+
+	if (!item)
+	{
+		const std::string no_edit_mode_names[]={
+			"BtnCreator",
+			"BtnOwner",
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_edit_mode_names); ++t)
+		{
+			childSetEnabled(no_edit_mode_names[t],false);
+		}
+	}
+
+	updateVerbs();
+}
+
+void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
+{
+	////////////////////////
+	// PERMISSIONS LOOKUP //
+	////////////////////////
+
+	// do not enable the UI for incomplete items.
+	LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
+	BOOL is_complete = i->isComplete();
+	const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
+	const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
+	const LLPermissions& perm = item->getPermissions();
+	const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm, 
+															GP_OBJECT_MANIPULATE);
+	const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm, 
+													  GP_OBJECT_SET_SALE) &&
+		!cannot_restrict_permissions;
+	const BOOL is_link = i->getIsLinkType();
+
+	// You need permission to modify the object to modify an inventory
+	// item in it.
+	LLViewerObject* object = NULL;
+	if(!mObjectID.isNull()) object = gObjectList.findObject(mObjectID);
+	BOOL is_obj_modify = TRUE;
+	if(object)
+	{
+		is_obj_modify = object->permOwnerModify();
+	}
+
+	//////////////////////
+	// ITEM NAME & DESC //
+	//////////////////////
+	BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+											   GP_OBJECT_MANIPULATE)
+		&& is_obj_modify && is_complete;
+
+	childSetEnabled("LabelItemNameTitle",TRUE);
+	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
+	childSetText("LabelItemName",item->getName());
+	childSetEnabled("LabelItemDescTitle",TRUE);
+	childSetEnabled("LabelItemDesc",is_modifiable);
+	childSetVisible("IconLocked",!is_modifiable);
+	childSetText("LabelItemDesc",item->getDescription());
+
+	//////////////////
+	// CREATOR NAME //
+	//////////////////
+	if(!gCacheName) return;
+	if(!gAgent.getRegion()) return;
+
+	if (item->getCreatorUUID().notNull())
+	{
+		std::string name;
+		gCacheName->getFullName(item->getCreatorUUID(), name);
+		childSetEnabled("BtnCreator",TRUE);
+		childSetEnabled("LabelCreatorTitle",TRUE);
+		childSetEnabled("LabelCreatorName",TRUE);
+		childSetText("LabelCreatorName",name);
+	}
+	else
+	{
+		childSetEnabled("BtnCreator",FALSE);
+		childSetEnabled("LabelCreatorTitle",FALSE);
+		childSetEnabled("LabelCreatorName",FALSE);
+		childSetText("LabelCreatorName",getString("unknown"));
+	}
+
+	////////////////
+	// OWNER NAME //
+	////////////////
+	if(perm.isOwned())
+	{
+		std::string name;
+		if (perm.isGroupOwned())
+		{
+			gCacheName->getGroupName(perm.getGroup(), name);
+		}
+		else
+		{
+			gCacheName->getFullName(perm.getOwner(), name);
+		}
+		childSetEnabled("BtnOwner",TRUE);
+		childSetEnabled("LabelOwnerTitle",TRUE);
+		childSetEnabled("LabelOwnerName",TRUE);
+		childSetText("LabelOwnerName",name);
+	}
+	else
+	{
+		childSetEnabled("BtnOwner",FALSE);
+		childSetEnabled("LabelOwnerTitle",FALSE);
+		childSetEnabled("LabelOwnerName",FALSE);
+		childSetText("LabelOwnerName",getString("public"));
+	}
+	
+	//////////////////
+	// ACQUIRE DATE //
+	//////////////////
+	
+	time_t time_utc = item->getCreationDate();
+	if (0 == time_utc)
+	{
+		childSetText("LabelAcquiredDate",getString("unknown"));
+	}
+	else
+	{
+		std::string timeStr = getString("acquiredDate");
+		LLSD substitution;
+		substitution["datetime"] = (S32) time_utc;
+		LLStringUtil::format (timeStr, substitution);
+		childSetText ("LabelAcquiredDate", timeStr);
+	}
+
+	///////////////////////
+	// OWNER PERMISSIONS //
+	///////////////////////
+	if(can_agent_manipulate)
+	{
+		childSetText("OwnerLabel",getString("you_can"));
+	}
+	else
+	{
+		childSetText("OwnerLabel",getString("owner_can"));
+	}
+
+	U32 base_mask		= perm.getMaskBase();
+	U32 owner_mask		= perm.getMaskOwner();
+	U32 group_mask		= perm.getMaskGroup();
+	U32 everyone_mask	= perm.getMaskEveryone();
+	U32 next_owner_mask	= perm.getMaskNextOwner();
+
+	childSetEnabled("OwnerLabel",TRUE);
+	childSetEnabled("CheckOwnerModify",FALSE);
+	childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
+	childSetEnabled("CheckOwnerCopy",FALSE);
+	childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
+	childSetEnabled("CheckOwnerTransfer",FALSE);
+	childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
+
+	///////////////////////
+	// DEBUG PERMISSIONS //
+	///////////////////////
+
+	if( gSavedSettings.getBOOL("DebugPermissions") )
+	{
+		BOOL slam_perm 			= FALSE;
+		BOOL overwrite_group	= FALSE;
+		BOOL overwrite_everyone	= FALSE;
+
+		if (item->getType() == LLAssetType::AT_OBJECT)
+		{
+			U32 flags = item->getFlags();
+			slam_perm 			= flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+			overwrite_everyone	= flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+			overwrite_group		= flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+		}
+		
+		std::string perm_string;
+
+		perm_string = "B: ";
+		perm_string += mask_to_string(base_mask);
+		childSetText("BaseMaskDebug",perm_string);
+		childSetVisible("BaseMaskDebug",TRUE);
+		
+		perm_string = "O: ";
+		perm_string += mask_to_string(owner_mask);
+		childSetText("OwnerMaskDebug",perm_string);
+		childSetVisible("OwnerMaskDebug",TRUE);
+		
+		perm_string = "G";
+		perm_string += overwrite_group ? "*: " : ": ";
+		perm_string += mask_to_string(group_mask);
+		childSetText("GroupMaskDebug",perm_string);
+		childSetVisible("GroupMaskDebug",TRUE);
+		
+		perm_string = "E";
+		perm_string += overwrite_everyone ? "*: " : ": ";
+		perm_string += mask_to_string(everyone_mask);
+		childSetText("EveryoneMaskDebug",perm_string);
+		childSetVisible("EveryoneMaskDebug",TRUE);
+		
+		perm_string = "N";
+		perm_string += slam_perm ? "*: " : ": ";
+		perm_string += mask_to_string(next_owner_mask);
+		childSetText("NextMaskDebug",perm_string);
+		childSetVisible("NextMaskDebug",TRUE);
+	}
+	else
+	{
+		childSetVisible("BaseMaskDebug",FALSE);
+		childSetVisible("OwnerMaskDebug",FALSE);
+		childSetVisible("GroupMaskDebug",FALSE);
+		childSetVisible("EveryoneMaskDebug",FALSE);
+		childSetVisible("NextMaskDebug",FALSE);
+	}
+
+	/////////////
+	// SHARING //
+	/////////////
+
+	// Check for ability to change values.
+	if (is_link || cannot_restrict_permissions)
+	{
+		childSetEnabled("CheckShareWithGroup",FALSE);
+		childSetEnabled("CheckEveryoneCopy",FALSE);
+	}
+	else if (is_obj_modify && can_agent_manipulate)
+	{
+		childSetEnabled("CheckShareWithGroup",TRUE);
+		childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
+	}
+	else
+	{
+		childSetEnabled("CheckShareWithGroup",FALSE);
+		childSetEnabled("CheckEveryoneCopy",FALSE);
+	}
+
+	// Set values.
+	BOOL is_group_copy = (group_mask & PERM_COPY) ? TRUE : FALSE;
+	BOOL is_group_modify = (group_mask & PERM_MODIFY) ? TRUE : FALSE;
+	BOOL is_group_move = (group_mask & PERM_MOVE) ? TRUE : FALSE;
+
+	if (is_group_copy && is_group_modify && is_group_move)
+	{
+		childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
+
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(FALSE);
+		}
+	}
+	else if (!is_group_copy && !is_group_modify && !is_group_move)
+	{
+		childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(FALSE);
+		}
+	}
+	else
+	{
+		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+		if(ctl)
+		{
+			ctl->setTentative(TRUE);
+			ctl->set(TRUE);
+		}
+	}
+	
+	childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
+
+	///////////////
+	// SALE INFO //
+	///////////////
+
+	const LLSaleInfo& sale_info = item->getSaleInfo();
+	BOOL is_for_sale = sale_info.isForSale();
+	// Check for ability to change values.
+	if (is_obj_modify && can_agent_sell 
+		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
+	{
+		childSetEnabled("SaleLabel",is_complete);
+		childSetEnabled("CheckPurchase",is_complete);
+
+		childSetEnabled("NextOwnerLabel",TRUE);
+		childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
+
+		childSetEnabled("RadioSaleType",is_complete && is_for_sale);
+		childSetEnabled("TextPrice",is_complete && is_for_sale);
+		childSetEnabled("Edit Cost",is_complete && is_for_sale);
+	}
+	else
+	{
+		childSetEnabled("SaleLabel",FALSE);
+		childSetEnabled("CheckPurchase",FALSE);
+
+		childSetEnabled("NextOwnerLabel",FALSE);
+		childSetEnabled("CheckNextOwnerModify",FALSE);
+		childSetEnabled("CheckNextOwnerCopy",FALSE);
+		childSetEnabled("CheckNextOwnerTransfer",FALSE);
+
+		childSetEnabled("RadioSaleType",FALSE);
+		childSetEnabled("TextPrice",FALSE);
+		childSetEnabled("Edit Cost",FALSE);
+	}
+
+	// Set values.
+	childSetValue("CheckPurchase", is_for_sale);
+	childSetEnabled("combobox sale copy", is_for_sale);
+	childSetEnabled("Edit Cost", is_for_sale);
+	childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
+	childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
+	childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
+
+	LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+	if (is_for_sale)
+	{
+		radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
+		S32 numerical_price;
+		numerical_price = sale_info.getSalePrice();
+		childSetText("Edit Cost",llformat("%d",numerical_price));
+	}
+	else
+	{
+		radioSaleType->setSelectedIndex(-1);
+		childSetText("Edit Cost",llformat("%d",0));
+	}
+}
+
+void LLSidepanelItemInfo::onClickCreator()
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	if(!item->getCreatorUUID().isNull())
+	{
+		LLAvatarActions::showProfile(item->getCreatorUUID());
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onClickOwner()
+{
+	LLInventoryItem* item = findItem();
+	if(!item) return;
+	if(item->getPermissions().isGroupOwned())
+	{
+		LLGroupActions::show(item->getPermissions().getGroup());
+	}
+	else
+	{
+		LLAvatarActions::showProfile(item->getPermissions().getOwner());
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitName()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item)
+	{
+		return;
+	}
+	LLLineEditor* labelItemName = getChild<LLLineEditor>("LabelItemName");
+
+	if(labelItemName&&
+	   (item->getName() != labelItemName->getText()) && 
+	   (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)) )
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->rename(labelItemName->getText());
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+}
+
+void LLSidepanelItemInfo::onCommitDescription()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+
+	LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
+	if(!labelItemDesc)
+	{
+		return;
+	}
+	if((item->getDescription() != labelItemDesc->getText()) && 
+	   (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)))
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+		new_item->setDescription(labelItemDesc->getText());
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitPermissions()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl;
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+	LLPermissions perm(item->getPermissions());
+
+
+	LLCheckBoxCtrl* CheckShareWithGroup = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
+
+	if(CheckShareWithGroup)
+	{
+		perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
+						CheckShareWithGroup->get(),
+						PERM_MODIFY | PERM_MOVE | PERM_COPY);
+	}
+	LLCheckBoxCtrl* CheckEveryoneCopy = getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
+	if(CheckEveryoneCopy)
+	{
+		perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
+						 CheckEveryoneCopy->get(), PERM_COPY);
+	}
+
+	LLCheckBoxCtrl* CheckNextOwnerModify = getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
+	if(CheckNextOwnerModify)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerModify->get(), PERM_MODIFY);
+	}
+	LLCheckBoxCtrl* CheckNextOwnerCopy = getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
+	if(CheckNextOwnerCopy)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerCopy->get(), PERM_COPY);
+	}
+	LLCheckBoxCtrl* CheckNextOwnerTransfer = getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
+	if(CheckNextOwnerTransfer)
+	{
+		perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
+							CheckNextOwnerTransfer->get(), PERM_TRANSFER);
+	}
+	if(perm != item->getPermissions()
+		&& item->isComplete())
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+		new_item->setPermissions(perm);
+		U32 flags = new_item->getFlags();
+		// If next owner permissions have changed (and this is an object)
+		// then set the slam permissions flag so that they are applied on rez.
+		if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner())
+		   && (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM;
+		}
+		// If everyone permissions have changed (and this is an object)
+		// then set the overwrite everyone permissions flag so they
+		// are applied on rez.
+		if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone())
+			&& (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE;
+		}
+		// If group permissions have changed (and this is an object)
+		// then set the overwrite group permissions flag so they
+		// are applied on rez.
+		if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup())
+			&& (item->getType() == LLAssetType::AT_OBJECT))
+		{
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
+		}
+		new_item->setFlags(flags);
+		if(mObjectID.isNull())
+		{
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+	else
+	{
+		// need to make sure we don't just follow the click
+		refresh();
+	}
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleInfo()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitSaleInfo()" << llendl;
+	updateSaleInfo();
+}
+
+// static
+void LLSidepanelItemInfo::onCommitSaleType()
+{
+	//llinfos << "LLSidepanelItemInfo::onCommitSaleType()" << llendl;
+	updateSaleInfo();
+}
+
+void LLSidepanelItemInfo::updateSaleInfo()
+{
+	LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if(!item) return;
+	LLSaleInfo sale_info(item->getSaleInfo());
+	if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
+	{
+		childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
+	}
+
+	if((BOOL)childGetValue("CheckPurchase"))
+	{
+		// turn on sale info
+		LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
+	
+		LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
+		if(RadioSaleType)
+		{
+			switch (RadioSaleType->getSelectedIndex())
+			{
+			case 0:
+				sale_type = LLSaleInfo::FS_ORIGINAL;
+				break;
+			case 1:
+				sale_type = LLSaleInfo::FS_COPY;
+				break;
+			case 2:
+				sale_type = LLSaleInfo::FS_CONTENTS;
+				break;
+			default:
+				sale_type = LLSaleInfo::FS_COPY;
+				break;
+			}
+		}
+
+		if (sale_type == LLSaleInfo::FS_COPY 
+			&& !gAgent.allowOperation(PERM_COPY, item->getPermissions(), 
+									  GP_OBJECT_SET_SALE))
+		{
+			sale_type = LLSaleInfo::FS_ORIGINAL;
+		}
+
+	     
+		
+		S32 price = -1;
+		price =  getChild<LLUICtrl>("Edit Cost")->getValue().asInteger();;
+
+		// Invalid data - turn off the sale
+		if (price < 0)
+		{
+			sale_type = LLSaleInfo::FS_NOT;
+			price = 0;
+		}
+
+		sale_info.setSaleType(sale_type);
+		sale_info.setSalePrice(price);
+	}
+	else
+	{
+		sale_info.setSaleType(LLSaleInfo::FS_NOT);
+	}
+	if(sale_info != item->getSaleInfo()
+		&& item->isComplete())
+	{
+		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+
+		// Force an update on the sale price at rez
+		if (item->getType() == LLAssetType::AT_OBJECT)
+		{
+			U32 flags = new_item->getFlags();
+			flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE;
+			new_item->setFlags(flags);
+		}
+
+		new_item->setSaleInfo(sale_info);
+		if(mObjectID.isNull())
+		{
+			// This is in the agent's inventory.
+			new_item->updateServer(FALSE);
+			gInventory.updateItem(new_item);
+			gInventory.notifyObservers();
+		}
+		else
+		{
+			// This is in an object's contents.
+			LLViewerObject* object = gObjectList.findObject(mObjectID);
+			if(object)
+			{
+				object->updateInventory(
+					new_item,
+					TASK_INVENTORY_ITEM_KEY,
+					false);
+			}
+		}
+	}
+	else
+	{
+		// need to make sure we don't just follow the click
+		refresh();
+	}
+}
+
+LLInventoryItem* LLSidepanelItemInfo::findItem() const
+{
+	LLInventoryItem* item = NULL;
+	if(mObjectID.isNull())
+	{
+		// it is in agent inventory
+		item = gInventory.getItem(mItemID);
+	}
+	else
+	{
+		LLViewerObject* object = gObjectList.findObject(mObjectID);
+		if(object)
+		{
+			item = (LLInventoryItem*)object->getInventoryObject(mItemID);
+		}
+	}
+	return item;
+}
+
+// virtual
+void LLSidepanelItemInfo::updateVerbs()
+{
+	LLSidepanelInventorySubpanel::updateVerbs();
+
+	const LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+	if (item)
+	{
+		const LLPermissions& perm = item->getPermissions();
+		BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
+												   GP_OBJECT_MANIPULATE);
+		mEditBtn->setEnabled(is_modifiable);
+	}
+}
+
+// virtual
+void LLSidepanelItemInfo::save()
+{
+	onCommitName();
+	onCommitDescription();
+	onCommitPermissions();
+	onCommitSaleInfo();
+	onCommitSaleType();
+}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..b348b5cceba2b5cdaa46b64b36c7978ff21c44b0
--- /dev/null
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -0,0 +1,91 @@
+/** 
+ * @file llsidepaneliteminfo.h
+ * @brief A panel which shows an inventory item's properties.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELITEMINFO_H
+#define LL_LLSIDEPANELITEMINFO_H
+
+#include "llsidepanelinventorysubpanel.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelItemInfo
+// Object properties for inventory side panel.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLButton;
+class LLInventoryItem;
+class LLItemPropertiesObserver;
+class LLViewerObject;
+class LLPermissions;
+
+class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
+{
+public:
+	LLSidepanelItemInfo();
+	virtual ~LLSidepanelItemInfo();
+	
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void reset();
+
+	void setObjectID(const LLUUID& object_id);
+	void setItemID(const LLUUID& item_id);
+	void setEditMode(BOOL edit);
+
+protected:
+	/*virtual*/ void refresh();
+	/*virtual*/ void save();
+	/*virtual*/ void updateVerbs();
+
+	LLInventoryItem* findItem() const;
+	LLViewerObject*  findObject() const;
+	
+	void refreshFromItem(LLInventoryItem* item);
+
+private:
+	LLUUID mItemID; 	// inventory UUID for the inventory item.
+	LLUUID mObjectID; 	// in-world task UUID, or null if in agent inventory.
+	LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
+	
+	//
+	// UI Elements
+	// 
+protected:
+	void 						onClickCreator();
+	void 						onClickOwner();
+	void 						onCommitName();
+	void 						onCommitDescription();
+	void 						onCommitPermissions();
+	void 						onCommitSaleInfo();
+	void 						onCommitSaleType();
+	void 						updateSaleInfo();
+};
+
+#endif // LL_LLSIDEPANELITEMINFO_H
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..01c832d7d565c7b0db37b8eb29702b7161fffc44
--- /dev/null
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -0,0 +1,1124 @@
+/** 
+ * @file llsidepaneltaskinfo.cpp
+ * @brief LLSidepanelTaskInfo class implementation
+ * This class represents the panel in the build view for
+ * viewing/editing object names, owners, permissions, etc.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llsidepaneltaskinfo.h"
+
+#include "lluuid.h"
+#include "llpermissions.h"
+#include "llcategory.h"
+#include "llclickaction.h"
+#include "llfocusmgr.h"
+#include "llstring.h"
+
+#include "llviewerwindow.h"
+#include "llresmgr.h"
+#include "lltextbox.h"
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llviewerobject.h"
+#include "llselectmgr.h"
+#include "llagent.h"
+#include "llstatusbar.h"		// for getBalance()
+#include "lllineeditor.h"
+#include "llcombobox.h"
+#include "lluiconstants.h"
+#include "lldbstrings.h"
+#include "llfloatergroups.h"
+#include "llfloaterreg.h"
+#include "llavataractions.h"
+#include "llnamebox.h"
+#include "llviewercontrol.h"
+#include "llviewermenu.h"
+#include "lluictrlfactory.h"
+#include "llspinctrl.h"
+#include "roles_constants.h"
+#include "llgroupactions.h"
+
+///----------------------------------------------------------------------------
+/// Class llsidepaneltaskinfo
+///----------------------------------------------------------------------------
+
+LLSidepanelTaskInfo* LLSidepanelTaskInfo::sActivePanel = NULL;
+
+static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
+
+// Default constructor
+LLSidepanelTaskInfo::LLSidepanelTaskInfo()
+{
+	setMouseOpaque(FALSE);
+}
+
+
+LLSidepanelTaskInfo::~LLSidepanelTaskInfo()
+{
+	if (sActivePanel == this)
+		sActivePanel = NULL;
+}
+
+// virtual
+BOOL LLSidepanelTaskInfo::postBuild()
+{
+	LLSidepanelInventorySubpanel::postBuild();
+
+	mOpenBtn = getChild<LLButton>("open_btn");
+	mOpenBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onOpenButtonClicked, this));
+	mPayBtn = getChild<LLButton>("pay_btn");
+	mPayBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onPayButtonClicked, this));
+	mBuyBtn = getChild<LLButton>("buy_btn");
+	mBuyBtn->setClickedCallback(boost::bind(&LLSidepanelTaskInfo::onBuyButtonClicked, this));
+
+	childSetPrevalidate("Object Name",LLLineEditor::prevalidatePrintableNotPipe);
+	childSetPrevalidate("Object Description",LLLineEditor::prevalidatePrintableNotPipe);
+
+//	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
+//	childSetAction("button deed",LLSidepanelTaskInfo::onClickDeedToGroup,this);
+
+	mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
+
+	return TRUE;
+}
+
+// virtual
+void LLSidepanelTaskInfo::setVisible(BOOL visible)
+{
+	LLPanel::setVisible(visible);
+	if (visible)
+	{
+		sActivePanel = this;
+	}
+	else
+	{
+		sActivePanel = NULL;
+	}
+}
+
+void LLSidepanelTaskInfo::refresh()
+{
+	LLButton*	BtnDeedToGroup = getChild<LLButton>("button deed");
+	if(BtnDeedToGroup)
+	{	
+		std::string deedText;
+		if (gWarningSettings.getBOOL("DeedObject"))
+		{
+			deedText = getString("text deed continued");
+		}
+		else
+		{
+			deedText = getString("text deed");
+		}
+		BtnDeedToGroup->setLabelSelected(deedText);
+		BtnDeedToGroup->setLabelUnselected(deedText);
+	}
+	BOOL root_selected = TRUE;
+	LLSelectNode* nodep = mObjectSelection->getFirstRootNode();
+	S32 object_count = mObjectSelection->getRootObjectCount();
+	if(!nodep || 0 == object_count)
+	{
+		nodep = mObjectSelection->getFirstNode();
+		object_count = mObjectSelection->getObjectCount();
+		root_selected = FALSE;
+	}
+
+	//BOOL attachment_selected = mObjectSelection->isAttachment();
+	//attachment_selected = false;
+	LLViewerObject* objectp = NULL;
+	if(nodep) objectp = nodep->getObject();
+	if(!nodep || !objectp)// || attachment_selected)
+	{
+		// ...nothing selected
+		childSetEnabled("perm_modify",false);
+		childSetText("perm_modify",LLStringUtil::null);
+
+		childSetEnabled("Creator:",false);
+		childSetText("Creator Name",LLStringUtil::null);
+		childSetEnabled("Creator Name",false);
+
+		childSetEnabled("Owner:",false);
+		childSetText("Owner Name",LLStringUtil::null);
+		childSetEnabled("Owner Name",false);
+
+		childSetEnabled("Group:",false);
+		childSetText("Group Name",LLStringUtil::null);
+		childSetEnabled("Group Name",false);
+		childSetEnabled("button set group",false);
+
+		childSetText("Object Name",LLStringUtil::null);
+		childSetEnabled("Object Name",false);
+		childSetEnabled("Name:",false);
+		childSetText("Group Name",LLStringUtil::null);
+		childSetEnabled("Group Name",false);
+		childSetEnabled("Description:",false);
+		childSetText("Object Description",LLStringUtil::null);
+		childSetEnabled("Object Description",false);
+
+		childSetEnabled("Permissions:",false);
+		
+		childSetValue("checkbox share with group",FALSE);
+		childSetEnabled("checkbox share with group",false);
+		childSetEnabled("button deed",false);
+
+		childSetValue("checkbox allow everyone move",FALSE);
+		childSetEnabled("checkbox allow everyone move",false);
+		childSetValue("checkbox allow everyone copy",FALSE);
+		childSetEnabled("checkbox allow everyone copy",false);
+
+		//Next owner can:
+		childSetEnabled("Next owner can:",false);
+		childSetValue("checkbox next owner can modify",FALSE);
+		childSetEnabled("checkbox next owner can modify",false);
+		childSetValue("checkbox next owner can copy",FALSE);
+		childSetEnabled("checkbox next owner can copy",false);
+		childSetValue("checkbox next owner can transfer",FALSE);
+		childSetEnabled("checkbox next owner can transfer",false);
+
+		//checkbox for sale
+		childSetValue("checkbox for sale",FALSE);
+		childSetEnabled("checkbox for sale",false);
+
+		//checkbox include in search
+		childSetValue("search_check", FALSE);
+		childSetEnabled("search_check", false);
+		
+		LLComboBox*	combo_sale_type = getChild<LLComboBox>("sale type");
+		combo_sale_type->setValue(LLSaleInfo::FS_COPY);
+		combo_sale_type->setEnabled(FALSE);
+		
+		childSetEnabled("Cost",false);
+		childSetText("Cost",getString("Cost Default"));
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+		
+		childSetEnabled("label click action",false);
+		LLComboBox*	ComboClickAction = getChild<LLComboBox>("clickaction");
+		if(ComboClickAction)
+		{
+			ComboClickAction->setEnabled(FALSE);
+			ComboClickAction->clear();
+		}
+		childSetVisible("B:",false);
+		childSetVisible("O:",false);
+		childSetVisible("G:",false);
+		childSetVisible("E:",false);
+		childSetVisible("N:",false);
+		childSetVisible("F:",false);
+
+		return;
+	}
+
+	// figure out a few variables
+	BOOL is_one_object = (object_count == 1);
+
+	// BUG: fails if a root and non-root are both single-selected.
+	BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() 
+							&& LLSelectMgr::getInstance()->selectGetRootsModify()) 
+							|| LLSelectMgr::getInstance()->selectGetModify();
+	const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
+	S32 string_index = 0;
+	std::string MODIFY_INFO_STRINGS[] =
+	{
+		getString("text modify info 1"),
+		getString("text modify info 2"),
+		getString("text modify info 3"),
+		getString("text modify info 4")
+	};
+	if(!is_perm_modify)
+	{
+		string_index += 2;
+	}
+	if(!is_one_object)
+	{
+		++string_index;
+	}
+	childSetEnabled("perm_modify",true);
+	childSetText("perm_modify",MODIFY_INFO_STRINGS[string_index]);
+
+	childSetEnabled("Permissions:",true);
+	
+	// Update creator text field
+	childSetEnabled("Creator:",true);
+	BOOL creators_identical;
+	std::string creator_name;
+	creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID,
+													  creator_name);
+
+	childSetText("Creator Name",creator_name);
+	childSetEnabled("Creator Name",TRUE);
+
+	// Update owner text field
+	childSetEnabled("Owner:",true);
+
+	BOOL owners_identical;
+	std::string owner_name;
+	owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
+
+//	llinfos << "owners_identical " << (owners_identical ? "TRUE": "FALSE") << llendl;
+
+	if (mOwnerID.isNull())
+	{
+		if(LLSelectMgr::getInstance()->selectIsGroupOwned())
+		{
+			// Group owned already displayed by selectGetOwner
+		}
+		else
+		{
+			// Display last owner if public
+			std::string last_owner_name;
+			LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name);
+
+			// It should never happen that the last owner is null and the owner
+			// is null, but it seems to be a bug in the simulator right now. JC
+			if (!mLastOwnerID.isNull() && !last_owner_name.empty())
+			{
+				owner_name.append(", last ");
+				owner_name.append( last_owner_name );
+			}
+		}
+	}
+
+	childSetText("Owner Name",owner_name);
+	childSetEnabled("Owner Name",TRUE);
+
+	// update group text field
+	childSetEnabled("Group:",true);
+	childSetText("Group Name",LLStringUtil::null);
+	LLUUID group_id;
+	BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
+	if (groups_identical)
+	{
+		if(mLabelGroupName)
+		{
+			mLabelGroupName->setNameID(group_id, TRUE);
+			mLabelGroupName->setEnabled(TRUE);
+		}
+	}
+	else
+	{
+		if(mLabelGroupName)
+		{
+			mLabelGroupName->setNameID(LLUUID::null, TRUE);
+			mLabelGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, TRUE);
+			mLabelGroupName->setEnabled(FALSE);
+		}
+	}
+	
+	childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID()));
+
+	// figure out the contents of the name, description, & category
+	BOOL edit_name_desc = FALSE;
+	if(is_one_object && objectp->permModify())
+	{
+		edit_name_desc = TRUE;
+	}
+
+	childSetEnabled("Name:",true);
+	LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name");
+	childSetEnabled("Description:",true);
+	LLLineEditor*	LineEditorObjectDesc = getChild<LLLineEditor>("Object Description");
+
+	if(is_one_object)
+	{
+		if(keyboard_focus_view != LineEditorObjectName)
+		{
+			childSetText("Object Name",nodep->mName);
+		}
+
+		if(LineEditorObjectDesc)
+		{
+			if(keyboard_focus_view != LineEditorObjectDesc)
+			{
+				LineEditorObjectDesc->setText(nodep->mDescription);
+			}
+		}
+	}
+	else
+	{
+		childSetText("Object Name",LLStringUtil::null);
+		LineEditorObjectDesc->setText(LLStringUtil::null);
+	}
+
+	if(edit_name_desc)
+	{
+		childSetEnabled("Object Name",true);
+		childSetEnabled("Object Description",true);
+	}
+	else
+	{
+		childSetEnabled("Object Name",false);
+		childSetEnabled("Object Description",false);
+	}
+
+	S32 total_sale_price = 0;
+	S32 individual_sale_price = 0;
+	BOOL is_for_sale_mixed = FALSE;
+	BOOL is_sale_price_mixed = FALSE;
+	U32 num_for_sale = FALSE;
+    LLSelectMgr::getInstance()->selectGetAggregateSaleInfo(num_for_sale,
+										   is_for_sale_mixed,
+										   is_sale_price_mixed,
+										   total_sale_price,
+										   individual_sale_price);
+
+	const BOOL self_owned = (gAgent.getID() == mOwnerID);
+	const BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ;
+	const BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned());
+	const BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer();
+	const BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();
+
+	if(!owners_identical)
+	{
+		childSetEnabled("Cost",false);
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+	}
+	// You own these objects.
+	else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
+	{
+		// If there are multiple items for sale then set text to PRICE PER UNIT.
+		if (num_for_sale > 1)
+		{
+			childSetText("Cost",getString("Cost Per Unit"));
+		}
+		else
+		{
+			childSetText("Cost",getString("Cost Default"));
+		}
+		
+		LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+		if(!edit_price->hasFocus())
+		{
+			// If the sale price is mixed then set the cost to MIXED, otherwise
+			// set to the actual cost.
+			if (num_for_sale > 0 && is_for_sale_mixed)
+			{
+				edit_price->setTentative(TRUE);
+			}
+			else if (num_for_sale > 0 && is_sale_price_mixed)
+			{
+				edit_price->setTentative(TRUE);
+			}
+			else 
+			{
+				edit_price->setValue(individual_sale_price);
+			}
+		}
+		// The edit fields are only enabled if you can sell this object
+		// and the sale price is not mixed.
+		bool enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : false;
+		childSetEnabled("Cost",enable_edit);
+		childSetEnabled("Edit Cost",enable_edit);
+	}
+	// Someone, not you, owns these objects.
+	else if(!public_owned)
+	{
+		childSetEnabled("Cost",false);
+		childSetEnabled("Edit Cost",false);
+		
+		// Don't show a price if none of the items are for sale.
+		if (num_for_sale)
+			childSetText("Edit Cost",llformat("%d",total_sale_price));
+		else
+			childSetText("Edit Cost",LLStringUtil::null);
+
+		// If multiple items are for sale, set text to TOTAL PRICE.
+		if (num_for_sale > 1)
+			childSetText("Cost",getString("Cost Total"));
+		else
+			childSetText("Cost",getString("Cost Default"));
+	}
+	// This is a public object.
+	else
+	{
+		childSetEnabled("Cost",false);
+		childSetText("Cost",getString("Cost Default"));
+		
+		childSetText("Edit Cost",LLStringUtil::null);
+		childSetEnabled("Edit Cost",false);
+	}
+
+	// Enable and disable the permissions checkboxes
+	// based on who owns the object.
+	// TODO: Creator permissions
+
+	BOOL valid_base_perms		= FALSE;
+	BOOL valid_owner_perms		= FALSE;
+	BOOL valid_group_perms		= FALSE;
+	BOOL valid_everyone_perms	= FALSE;
+	BOOL valid_next_perms		= FALSE;
+
+	U32 base_mask_on;
+	U32 base_mask_off;
+	U32 owner_mask_on;
+	U32 owner_mask_off;
+	U32 group_mask_on;
+	U32 group_mask_off;
+	U32 everyone_mask_on;
+	U32 everyone_mask_off;
+	U32 next_owner_mask_on = 0;
+	U32 next_owner_mask_off = 0;
+
+	valid_base_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_BASE,
+									  &base_mask_on,
+									  &base_mask_off);
+
+	valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
+									  &owner_mask_on,
+									  &owner_mask_off);
+
+	valid_group_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_GROUP,
+									  &group_mask_on,
+									  &group_mask_off);
+	
+	valid_everyone_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_EVERYONE,
+									  &everyone_mask_on,
+									  &everyone_mask_off);
+	
+	valid_next_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_NEXT_OWNER,
+									  &next_owner_mask_on,
+									  &next_owner_mask_off);
+
+	
+	if( gSavedSettings.getBOOL("DebugPermissions") )
+	{
+		std::string perm_string;
+		if (valid_base_perms)
+		{
+			perm_string = "B: ";
+			perm_string += mask_to_string(base_mask_on);
+			childSetText("B:",perm_string);
+			childSetVisible("B:",true);
+			
+			perm_string = "O: ";
+			perm_string += mask_to_string(owner_mask_on);
+			childSetText("O:",perm_string);
+			childSetVisible("O:",true);
+			
+			perm_string = "G: ";
+			perm_string += mask_to_string(group_mask_on);
+			childSetText("G:",perm_string);
+			childSetVisible("G:",true);
+			
+			perm_string = "E: ";
+			perm_string += mask_to_string(everyone_mask_on);
+			childSetText("E:",perm_string);
+			childSetVisible("E:",true);
+			
+			perm_string = "N: ";
+			perm_string += mask_to_string(next_owner_mask_on);
+			childSetText("N:",perm_string);
+			childSetVisible("N:",true);
+		}
+		perm_string = "F: ";
+		U32 flag_mask = 0x0;
+		if (objectp->permMove())
+			flag_mask |= PERM_MOVE;
+		if (objectp->permModify())
+			flag_mask |= PERM_MODIFY;
+		if (objectp->permCopy())
+			flag_mask |= PERM_COPY;
+		if (objectp->permTransfer())
+			flag_mask |= PERM_TRANSFER;
+		perm_string += mask_to_string(flag_mask);
+		childSetText("F:",perm_string);
+		childSetVisible("F:",true);
+	}
+	else
+	{
+		childSetVisible("B:",false);
+		childSetVisible("O:",false);
+		childSetVisible("G:",false);
+		childSetVisible("E:",false);
+		childSetVisible("N:",false);
+		childSetVisible("F:",false);
+	}
+
+	bool has_change_perm_ability = false;
+	bool has_change_sale_ability = false;
+
+	if(valid_base_perms 
+	   && (self_owned 
+		   || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_MANIPULATE))))
+	{
+		has_change_perm_ability = true;
+	}
+	if(valid_base_perms 
+	   && (self_owned 
+		   || (group_owned && gAgent.hasPowerInGroup(group_id, GP_OBJECT_SET_SALE))))
+	{
+		has_change_sale_ability = true;
+	}
+
+	if (!has_change_perm_ability && !has_change_sale_ability && !root_selected)
+	{
+		// ...must select root to choose permissions
+		childSetValue("perm_modify", getString("text modify warning"));
+	}
+
+	if (has_change_perm_ability)
+	{
+		childSetEnabled("checkbox share with group",true);
+		childSetEnabled("checkbox allow everyone move",owner_mask_on & PERM_MOVE);
+		childSetEnabled("checkbox allow everyone copy",owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
+	}
+	else
+	{
+		childSetEnabled("checkbox share with group", FALSE);
+		childSetEnabled("checkbox allow everyone move", FALSE);
+		childSetEnabled("checkbox allow everyone copy", FALSE);
+	}
+
+	if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))
+	{
+		childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale));
+		// Set the checkbox to tentative if the prices of each object selected
+		// are not the same.
+		childSetTentative("checkbox for sale", is_for_sale_mixed);
+		childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed);
+
+		childSetEnabled("Next owner can:", TRUE);
+		childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY);
+		childSetEnabled("checkbox next owner can copy",base_mask_on & PERM_COPY);
+		childSetEnabled("checkbox next owner can transfer",next_owner_mask_on & PERM_COPY);
+	}
+	else 
+	{
+		childSetEnabled("checkbox for sale",FALSE);
+		childSetEnabled("sale type",FALSE);
+
+		childSetEnabled("Next owner can:",FALSE);
+		childSetEnabled("checkbox next owner can modify",FALSE);
+		childSetEnabled("checkbox next owner can copy",FALSE);
+		childSetEnabled("checkbox next owner can transfer",FALSE);
+	}
+
+	if(valid_group_perms)
+	{
+		if((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE))
+		{
+			childSetValue("checkbox share with group",TRUE);
+			childSetTentative("checkbox share with group",FALSE);
+			childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+		}
+		else if((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE))
+		{
+			childSetValue("checkbox share with group",FALSE);
+			childSetTentative("checkbox share with group",false);
+			childSetEnabled("button deed",false);
+		}
+		else
+		{
+			childSetValue("checkbox share with group",TRUE);
+			childSetTentative("checkbox share with group",true);
+			childSetEnabled("button deed",gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+		}
+	}			
+
+	if(valid_everyone_perms)
+	{
+		// Move
+		if(everyone_mask_on & PERM_MOVE)
+		{
+			childSetValue("checkbox allow everyone move",TRUE);
+			childSetTentative("checkbox allow everyone move",false);
+		}
+		else if(everyone_mask_off & PERM_MOVE)
+		{
+			childSetValue("checkbox allow everyone move",FALSE);
+			childSetTentative("checkbox allow everyone move",false);
+		}
+		else
+		{
+			childSetValue("checkbox allow everyone move",TRUE);
+			childSetTentative("checkbox allow everyone move",true);
+		}
+
+		// Copy == everyone can't copy
+		if(everyone_mask_on & PERM_COPY)
+		{
+			childSetValue("checkbox allow everyone copy",TRUE);
+			childSetTentative("checkbox allow everyone copy",!can_copy || !can_transfer);
+		}
+		else if(everyone_mask_off & PERM_COPY)
+		{
+			childSetValue("checkbox allow everyone copy",FALSE);
+			childSetTentative("checkbox allow everyone copy",false);
+		}
+		else
+		{
+			childSetValue("checkbox allow everyone copy",TRUE);
+			childSetTentative("checkbox allow everyone copy",true);
+		}
+	}
+
+	if(valid_next_perms)
+	{
+		// Modify == next owner canot modify
+		if(next_owner_mask_on & PERM_MODIFY)
+		{
+			childSetValue("checkbox next owner can modify",TRUE);
+			childSetTentative("checkbox next owner can modify",false);
+		}
+		else if(next_owner_mask_off & PERM_MODIFY)
+		{
+			childSetValue("checkbox next owner can modify",FALSE);
+			childSetTentative("checkbox next owner can modify",false);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can modify",TRUE);
+			childSetTentative("checkbox next owner can modify",true);
+		}
+
+		// Copy == next owner cannot copy
+		if(next_owner_mask_on & PERM_COPY)
+		{			
+			childSetValue("checkbox next owner can copy",TRUE);
+			childSetTentative("checkbox next owner can copy",!can_copy);
+		}
+		else if(next_owner_mask_off & PERM_COPY)
+		{
+			childSetValue("checkbox next owner can copy",FALSE);
+			childSetTentative("checkbox next owner can copy",FALSE);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can copy",TRUE);
+			childSetTentative("checkbox next owner can copy",TRUE);
+		}
+
+		// Transfer == next owner cannot transfer
+		if(next_owner_mask_on & PERM_TRANSFER)
+		{
+			childSetValue("checkbox next owner can transfer",TRUE);
+			childSetTentative("checkbox next owner can transfer",!can_transfer);
+		}
+		else if(next_owner_mask_off & PERM_TRANSFER)
+		{
+			childSetValue("checkbox next owner can transfer",FALSE);
+			childSetTentative("checkbox next owner can transfer",FALSE);
+		}
+		else
+		{
+			childSetValue("checkbox next owner can transfer",TRUE);
+			childSetTentative("checkbox next owner can transfer",TRUE);
+		}
+	}
+
+	// reflect sale information
+	LLSaleInfo sale_info;
+	BOOL valid_sale_info = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
+	LLSaleInfo::EForSale sale_type = sale_info.getSaleType();
+
+	LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type");
+	if (valid_sale_info)
+	{
+		combo_sale_type->setValue(sale_type == LLSaleInfo::FS_NOT ? LLSaleInfo::FS_COPY : sale_type);
+		combo_sale_type->setTentative(FALSE); // unfortunately this doesn't do anything at the moment.
+	}
+	else
+	{
+		// default option is sell copy, determined to be safest
+		combo_sale_type->setValue(LLSaleInfo::FS_COPY);
+		combo_sale_type->setTentative(TRUE); // unfortunately this doesn't do anything at the moment.
+	}
+
+	childSetValue("checkbox for sale", num_for_sale != 0);
+
+	// HACK: There are some old objects in world that are set for sale,
+	// but are no-transfer.  We need to let users turn for-sale off, but only
+	// if for-sale is set.
+	bool cannot_actually_sell = !can_transfer || (!can_copy && sale_type == LLSaleInfo::FS_COPY);
+	if (num_for_sale && has_change_sale_ability && cannot_actually_sell)
+	{
+		childSetEnabled("checkbox for sale", true);
+	}
+		
+	// Check search status of objects
+	BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
+	bool include_in_search;
+	bool all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
+	childSetEnabled("search_check", has_change_sale_ability && all_volume);
+	childSetValue("search_check", include_in_search);
+	childSetTentative("search_check", ! all_include_in_search);
+
+	// Click action (touch, sit, buy)
+	U8 click_action = 0;
+	if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action))
+	{
+		LLComboBox*	ComboClickAction = getChild<LLComboBox>("clickaction");
+		if(ComboClickAction)
+		{
+			ComboClickAction->setCurrentByIndex((S32)click_action);
+		}
+	}
+	childSetEnabled("label click action",is_perm_modify && all_volume);
+	childSetEnabled("clickaction",is_perm_modify && all_volume);
+
+	if (!getIsEditing())
+	{
+		const std::string no_item_names[]={
+			"Object Name",
+			"Object Description",
+			"button set group",
+			"checkbox share with group",
+			"button deed",
+			"checkbox allow everyone move",
+			"checkbox allow everyone copy",
+			"checkbox for sale",
+			"sale type",
+			"Edit Cost",
+			"checkbox next owner can modify",
+			"checkbox next owner can copy",
+			"checkbox next owner can transfer",
+			"clickaction",
+			"search_check",
+			"perm_modify",
+			"Group Name",
+		};
+		for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
+		{
+			childSetEnabled(no_item_names[t],false);
+		}
+	}
+	updateVerbs();
+}
+
+
+// static
+void LLSidepanelTaskInfo::onClickClaim(void*)
+{
+	// try to claim ownership
+	LLSelectMgr::getInstance()->sendOwner(gAgent.getID(), gAgent.getGroupID());
+}
+
+// static
+void LLSidepanelTaskInfo::onClickRelease(void*)
+{
+	// try to release ownership
+	LLSelectMgr::getInstance()->sendOwner(LLUUID::null, LLUUID::null);
+}
+
+void LLSidepanelTaskInfo::onClickGroup()
+{
+	LLUUID owner_id;
+	std::string name;
+	BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, name);
+	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
+
+	if(owners_identical && (owner_id == gAgent.getID()))
+	{
+		LLFloaterGroupPicker* fg = 	LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID()));
+		if (fg)
+		{
+			fg->setSelectGroupCallback( boost::bind(&LLSidepanelTaskInfo::cbGroupID, this, _1) );
+
+			if (parent_floater)
+			{
+				LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, fg);
+				fg->setOrigin(new_rect.mLeft, new_rect.mBottom);
+				parent_floater->addDependentFloater(fg);
+			}
+		}
+	}
+}
+
+void LLSidepanelTaskInfo::cbGroupID(LLUUID group_id)
+{
+	if(mLabelGroupName)
+	{
+		mLabelGroupName->setNameID(group_id, TRUE);
+	}
+	LLSelectMgr::getInstance()->sendGroup(group_id);
+}
+
+static bool callback_deed_to_group(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if (0 == option)
+	{
+		LLUUID group_id;
+		BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
+		if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED)))
+		{
+			LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
+//			LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
+		}
+	}
+	return false;
+}
+
+void LLSidepanelTaskInfo::onClickDeedToGroup()
+{
+	LLNotifications::instance().add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group);
+}
+
+///----------------------------------------------------------------------------
+/// Permissions checkboxes
+///----------------------------------------------------------------------------
+
+void LLSidepanelTaskInfo::onCommitPerm(LLCheckBoxCtrl *ctrl, U8 field, U32 perm)
+{
+	LLViewerObject* object = mObjectSelection->getFirstRootObject();
+	if(!object) return;
+
+	BOOL new_state = ctrl->get();
+	LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
+}
+
+void LLSidepanelTaskInfo::onCommitGroupShare()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox share with group");
+	onCommitPerm(ctrl, PERM_GROUP, PERM_MODIFY | PERM_MOVE | PERM_COPY);
+}
+
+void LLSidepanelTaskInfo::onCommitEveryoneMove()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone move");
+	onCommitPerm(ctrl, PERM_EVERYONE, PERM_MOVE);
+}
+
+
+void LLSidepanelTaskInfo::onCommitEveryoneCopy()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox allow everyone copy");
+	onCommitPerm(ctrl, PERM_EVERYONE, PERM_COPY);
+}
+
+void LLSidepanelTaskInfo::onCommitNextOwnerModify()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can modify");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_MODIFY);
+}
+
+void LLSidepanelTaskInfo::onCommitNextOwnerCopy()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can copy");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_COPY);
+}
+
+void LLSidepanelTaskInfo::onCommitNextOwnerTransfer()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("checkbox next owner can transfer");
+	onCommitPerm(ctrl, PERM_NEXT_OWNER, PERM_TRANSFER);
+}
+
+void LLSidepanelTaskInfo::onCommitName()
+{
+	LLLineEditor* tb = getChild<LLLineEditor>("Object Name");
+	LLSelectMgr::getInstance()->selectionSetObjectName(tb->getText());
+}
+
+void LLSidepanelTaskInfo::onCommitDesc()
+{
+	LLLineEditor* le = getChild<LLLineEditor>("Object Description");
+	LLSelectMgr::getInstance()->selectionSetObjectDescription(le->getText());
+}
+
+void LLSidepanelTaskInfo::onCommitSaleInfo()
+{
+	setAllSaleInfo();
+}
+
+void LLSidepanelTaskInfo::onCommitSaleType()
+{
+	setAllSaleInfo();
+}
+
+void LLSidepanelTaskInfo::setAllSaleInfo()
+{
+	llinfos << "LLSidepanelTaskInfo::setAllSaleInfo()" << llendl;
+	LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
+
+	LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
+	
+	// Set the sale type if the object(s) are for sale.
+	if(checkPurchase && checkPurchase->get())
+	{
+		sale_type = static_cast<LLSaleInfo::EForSale>(getChild<LLComboBox>("sale type")->getValue().asInteger());
+	}
+
+	S32 price = -1;
+	
+	LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+	price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger();
+
+	// If somehow an invalid price, turn the sale off.
+	if (price < 0)
+		sale_type = LLSaleInfo::FS_NOT;
+
+	LLSaleInfo sale_info(sale_type, price);
+	LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info);
+	
+	// If turned off for-sale, make sure click-action buy is turned
+	// off as well
+	if (sale_type == LLSaleInfo::FS_NOT)
+	{
+		U8 click_action = 0;
+		LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
+		if (click_action == CLICK_ACTION_BUY)
+		{
+			LLSelectMgr::getInstance()->selectionSetClickAction(CLICK_ACTION_TOUCH);
+		}
+	}
+}
+
+struct LLSelectionPayable : public LLSelectedObjectFunctor
+{
+	virtual bool apply(LLViewerObject* obj)
+	{
+		// can pay if you or your parent has money() event in script
+		LLViewerObject* parent = (LLViewerObject*)obj->getParent();
+		return (obj->flagTakesMoney() 
+			   || (parent && parent->flagTakesMoney()));
+	}
+};
+
+// static
+void LLSidepanelTaskInfo::onCommitClickAction(U8 click_action)
+{
+	if (click_action == CLICK_ACTION_BUY)
+	{
+		LLSaleInfo sale_info;
+		LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
+		if (!sale_info.isForSale())
+		{
+			LLNotifications::instance().add("CantSetBuyObject");
+
+			// Set click action back to its old value
+			U8 click_action = 0;
+			LLSelectMgr::getInstance()->selectionGetClickAction(&click_action);
+//			box->setCurrentByIndex((S32)click_action);
+
+			return;
+		}
+	}
+	else if (click_action == CLICK_ACTION_PAY)
+	{
+		// Verify object has script with money() handler
+		LLSelectionPayable payable;
+		bool can_pay = mObjectSelection->applyToObjects(&payable);
+		if (!can_pay)
+		{
+			// Warn, but do it anyway.
+			LLNotifications::instance().add("ClickActionNotPayable");
+		}
+	}
+	LLSelectMgr::getInstance()->selectionSetClickAction(click_action);
+}
+
+// static
+void LLSidepanelTaskInfo::onCommitIncludeInSearch()
+{
+	LLCheckBoxCtrl *ctrl = getChild<LLCheckBoxCtrl>("search_check");
+	LLSelectMgr::getInstance()->selectionSetIncludeInSearch(ctrl->get());
+}
+
+// virtual
+void LLSidepanelTaskInfo::updateVerbs()
+{
+	LLSidepanelInventorySubpanel::updateVerbs();
+
+	mOpenBtn->setVisible(!getIsEditing());
+	mPayBtn->setVisible(!getIsEditing());
+	mBuyBtn->setVisible(!getIsEditing());
+
+	mOpenBtn->setEnabled(enable_object_open());
+	const LLViewerObject *obj = getFirstSelectedObject();
+	mEditBtn->setEnabled(obj && obj->permModify());
+}
+
+void LLSidepanelTaskInfo::onOpenButtonClicked()
+{
+	if (enable_object_open())
+	{
+		handle_object_open();
+	}
+}
+
+void LLSidepanelTaskInfo::onPayButtonClicked()
+{
+	onCommitClickAction(CLICK_ACTION_PAY);
+}
+
+void LLSidepanelTaskInfo::onBuyButtonClicked()
+{
+	onCommitClickAction(CLICK_ACTION_BUY);
+}
+
+// virtual
+void LLSidepanelTaskInfo::save()
+{
+	onCommitGroupShare();
+	onCommitEveryoneMove();
+	onCommitEveryoneCopy();
+	onCommitNextOwnerModify();
+	onCommitNextOwnerCopy();
+	onCommitNextOwnerTransfer();
+	onCommitName();
+	onCommitDesc();
+	onCommitSaleInfo();
+	onCommitSaleType();
+	onCommitIncludeInSearch();
+}
+
+void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
+{
+	mObjectSelection = selection;
+}
+
+LLSidepanelTaskInfo* LLSidepanelTaskInfo::getActivePanel()
+{
+	return sActivePanel;
+}
+
+LLViewerObject* LLSidepanelTaskInfo::getFirstSelectedObject()
+{
+	LLSelectNode *node = mObjectSelection->getFirstRootNode();
+	if (node)
+	{
+		return node->getObject();
+	}
+	return NULL;
+}
+
+const LLUUID& LLSidepanelTaskInfo::getSelectedUUID()
+{
+	const LLViewerObject* obj = getFirstSelectedObject();
+	if (obj)
+	{
+		return obj->getID();
+	}
+	return LLUUID::null;
+}
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..b6dd4dfb2ce71aadd97d96cfacc8b46932351cb9
--- /dev/null
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -0,0 +1,115 @@
+/** 
+ * @file llsidepaneltaskinfo.h
+ * @brief LLSidepanelTaskInfo class header file
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSIDEPANELTASKINFO_H
+#define LL_LLSIDEPANELTASKINFO_H
+
+#include "llsidepanelinventorysubpanel.h"
+#include "lluuid.h"
+#include "llselectmgr.h"
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLSidepanelTaskInfo
+//
+// Panel for permissions of an object.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLNameBox;
+class LLCheckBoxCtrl;
+class LLViewerObject;
+
+class LLSidepanelTaskInfo : public LLSidepanelInventorySubpanel
+{
+public:
+	LLSidepanelTaskInfo();
+	virtual ~LLSidepanelTaskInfo();
+
+	/*virtual*/	BOOL postBuild();
+	/*virtual*/ void setVisible(BOOL visible);
+
+	void setObjectSelection(LLObjectSelectionHandle selection);
+
+	const LLUUID& getSelectedUUID();
+	LLViewerObject* getFirstSelectedObject();
+
+	static LLSidepanelTaskInfo *getActivePanel();
+protected:
+	/*virtual*/ void refresh();	// refresh all labels as needed
+	/*virtual*/ void save();
+	/*virtual*/ void updateVerbs();
+
+	// statics
+	static void onClickClaim(void*);
+	static void onClickRelease(void*);
+		   void onClickGroup();
+		   void cbGroupID(LLUUID group_id);
+
+	void onClickDeedToGroup();
+	void onCommitPerm(LLCheckBoxCtrl* ctrl, U8 field, U32 perm);
+	void onCommitGroupShare();
+	void onCommitEveryoneMove();
+	void onCommitEveryoneCopy();
+	void onCommitNextOwnerModify();
+	void onCommitNextOwnerCopy();
+	void onCommitNextOwnerTransfer();
+	void onCommitName();
+	void onCommitDesc();
+	void onCommitSaleInfo();
+	void onCommitSaleType();
+
+	void onCommitClickAction(U8 click_action);
+	void onCommitIncludeInSearch();
+
+	void setAllSaleInfo();
+
+private:
+	LLNameBox*		mLabelGroupName;		// group name
+
+	LLUUID			mCreatorID;
+	LLUUID			mOwnerID;
+	LLUUID			mLastOwnerID;
+
+protected:
+	void 						onOpenButtonClicked();
+	void 						onPayButtonClicked();
+	void 						onBuyButtonClicked();
+private:
+	LLButton*					mOpenBtn;
+	LLButton*					mPayBtn;
+	LLButton*					mBuyBtn;
+
+	LLObjectSelectionHandle mObjectSelection;
+	static LLSidepanelTaskInfo* sActivePanel;
+};
+
+
+#endif // LL_LLSIDEPANELTASKINFO_H
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index a11ee05532fe8e920607409696d943de7861e618..061587f11b7dc8fc83b102fa7bf9275f8b4e9194 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -100,7 +100,7 @@ LLSideTray* LLSideTray::getInstance()
 {
 	if (!sInstance)
 	{
-		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",gViewerWindow->getRootView(), LLRootView::child_registry_t::instance());
+		sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance());
 	}
 
 	return sInstance;
@@ -148,7 +148,6 @@ class LLSideTrayTab: public LLPanel
 	/*virtual*/ bool	addChild	(LLView* view, S32 tab_group);
 	
 	
-	void			arrange		(S32 width, S32 height);
 	void			reshape		(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	
 	static LLSideTrayTab*  createInstance	();
@@ -156,8 +155,6 @@ class LLSideTrayTab: public LLPanel
 	const std::string& getDescription () const { return mDescription;}
 	const std::string& getTabTitle() const { return mTabTitle;}
 	
-	void draw();
-	
 	void			onOpen		(const LLSD& key);
 	
 private:
@@ -209,60 +206,24 @@ BOOL LLSideTrayTab::postBuild()
 
 static const S32 splitter_margin = 1;
 
-//virtual 
-void	LLSideTrayTab::arrange(S32 width, S32 height )
-{
-	if(!mMainPanel)
-		return;
-	
-	S32 offset = 0;
-
-	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
-	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		offset = title_panel->getRect().getHeight();
-	}
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	mMainPanel->reshape(sRect.getWidth(),sRect.getHeight());
-	mMainPanel->setRect(sRect);
-	
-
-	
-}
-
 void LLSideTrayTab::reshape		(S32 width, S32 height, BOOL called_from_parent )
 {
-	if(!mMainPanel)
-		return;
-	S32 offset = 0;
-
+	LLPanel::reshape(width, height, called_from_parent);
 	LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
-
-	if(title_panel)
+	if (!title_panel)
 	{
-		title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
-		title_panel->reshape(width,title_panel->getRect().getHeight());
-		offset = title_panel->getRect().getHeight();
+		// not fully constructed yet
+		return;
 	}
 
-	
-
-	LLRect sRect = mMainPanel->getRect();
-	sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
-	//mMainPanel->setMaxWidth(sRect.getWidth());
-	mMainPanel->reshape(sRect.getWidth(), sRect.getHeight());
-	
-	mMainPanel->setRect(sRect);
-
-}
+	S32 title_height = title_panel->getRect().getHeight();
+	title_panel->setOrigin( 0, height - title_height );
+	title_panel->reshape(width,title_height);
 
-void LLSideTrayTab::draw()
-{
-	LLPanel::draw();
+	LLRect sRect;
+	sRect.setLeftTopAndSize( splitter_margin, height - title_height - splitter_margin, 
+							width - 2*splitter_margin, height - title_height - 2*splitter_margin);
+	mMainPanel->setShape(sRect);
 }
 
 void	LLSideTrayTab::onOpen		(const LLSD& key)
@@ -300,17 +261,20 @@ LLSideTray::LLSideTray(Params& params)
 	    ,mActiveTab(0)
 		,mCollapsed(false)
 		,mCollapseButton(0)
-	    ,mMaxBarWidth(params.rect.width)
 {
 	mCollapsed=params.collapsed;
 
-
 	LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar();
 
 	// register handler function to process data from the xml. 
 	// panel_name should be specified via "parameter" attribute.
 	commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));
 	LLTransientFloaterMgr::getInstance()->addControlView(this);
+
+	LLPanel::Params p;
+	p.name = "buttons_panel";
+	p.mouse_opaque = false;
+	mButtonsPanel = LLUICtrlFactory::create<LLPanel>(p);
 }
 
 
@@ -399,7 +363,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 	rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height); 
 
 	bparams.name(name);
-	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+	bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
 	bparams.rect (rect);
 	bparams.tab_stop(false);
 	bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
@@ -416,7 +380,7 @@ LLButton* LLSideTray::createButton	(const std::string& name,const std::string& i
 		button->setImageOverlay(image);
 	}
 
-	addChildInBack(button);
+	mButtonsPanel->addChildInBack(button);
 
 	return button;
 }
@@ -491,7 +455,7 @@ void		LLSideTray::onToggleCollapse()
 
 void LLSideTray::reflectCollapseChange()
 {
-	setPanelRect();
+	updateSidetrayVisibility();
 
 	if(mCollapsed)
 	{
@@ -500,23 +464,24 @@ void LLSideTray::reflectCollapseChange()
 	}
 	else
 	{
-		gFloaterView->setSnapOffsetRight(mMaxBarWidth);
+		gFloaterView->setSnapOffsetRight(getRect().getWidth());
 		setFocus(TRUE);
 	}
 
 	gFloaterView->refresh();
 }
 
-void LLSideTray::arrange			()
+void LLSideTray::arrange()
 {
 	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
 
-	setPanelRect();
+	updateSidetrayVisibility();
 	
 	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
+	ctrl_rect.setLeftTopAndSize(0,
+								mButtonsPanel->getRect().getHeight() - sidetray_params.default_button_width,
+								sidetray_params.default_button_width,
+								sidetray_params.default_button_height);
 
 	mCollapseButton->setRect(ctrl_rect);
 
@@ -528,9 +493,10 @@ void LLSideTray::arrange			()
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
 		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
+		ctrl_rect.setLeftTopAndSize(0,
+									mButtonsPanel->getRect().getHeight()-offset,
+									sidetray_params.default_button_width,
+									sidetray_params.default_button_height);
 
 		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
 			continue;
@@ -544,14 +510,11 @@ void LLSideTray::arrange			()
 		btn->setVisible(ctrl_rect.mBottom > 0);
 	}
 
-	ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-
 	//arrange tabs
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
+	for ( child_vector_t::iterator child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
 	{
 		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->setRect(ctrl_rect);
-		sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight());
+		sidebar_tab->setShape(getLocalRect());
 	}
 }
 
@@ -580,7 +543,7 @@ void LLSideTray::collapseSideBar()
 	{
 		mCollapseButton->setImageOverlay( home_tab->mImage );
 	}
-	mActiveTab->setVisible(FALSE);
+	//mActiveTab->setVisible(FALSE);
 	reflectCollapseChange();
 	setFocus( FALSE );
 
@@ -596,7 +559,6 @@ void LLSideTray::expandSideBar()
 	}
 	LLSD key;//empty
 	mActiveTab->onOpen(key);
-	mActiveTab->setVisible(TRUE);
 
 	reflectCollapseChange();
 }
@@ -612,15 +574,6 @@ void LLSideTray::highlightFocused()
 	*/
 }
 
-BOOL	LLSideTray::handleScrollWheel(S32 x, S32 y, S32 mask)
-{
-	BOOL ret = LLPanel::handleScrollWheel(x,y,mask);
-
-	if(!ret && childFromPoint(x,y) != 0 )
-		return TRUE;//mouse wheel over sidetray buttons, eat mouse wheel
-	return ret;
-}
-
 //virtual
 BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 {
@@ -630,58 +583,13 @@ BOOL		LLSideTray::handleMouseDown	(S32 x, S32 y, MASK mask)
 	return ret;
 }
 
-void LLSideTray::reshape			(S32 width, S32 height, BOOL called_from_parent)
+void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
-	
 	LLPanel::reshape(width, height, called_from_parent);
 	if(!mActiveTab)
 		return;
 	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	setPanelRect();
-
-	LLRect ctrl_rect;
-	ctrl_rect.setLeftTopAndSize(0
-							,getRect().getHeight()-sidetray_params.default_button_width
-							,sidetray_params.default_button_width
-							,sidetray_params.default_button_height);
-	
-	mCollapseButton->setRect(ctrl_rect);
-
-	//arrange tab buttons
-	child_vector_const_iter_t child_it;
-	int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)	
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		
-		ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
-								,sidetray_params.default_button_width
-								,sidetray_params.default_button_height);
-
-		if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
-			continue;
-
-		LLButton* btn = mTabButtons[sidebar_tab->getName()];
-
-		btn->setRect(ctrl_rect);
-		offset+=sidetray_params.default_button_height;
-		offset+=sidetray_params.default_button_margin;
-
-		btn->setVisible(ctrl_rect.mBottom > 0);
-	}
-
-	//arrange tabs
-	
-	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
-	{
-		LLSideTrayTab* sidebar_tab = *child_it;
-		sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight());
-		ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
-		sidebar_tab->setRect(ctrl_rect);
-		
-	}
+	arrange();
 }
 
 /**
@@ -729,42 +637,12 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 static const S32	fake_offset = 132;
 static const S32	fake_top_offset = 18;
 
-void LLSideTray::resetPanelRect	()
-{
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset;
-
-	reshape(panel_width,panel_height);
-}
-
-void	LLSideTray::setPanelRect	()
+void	LLSideTray::updateSidetrayVisibility()
 {
-	LLNavigationBar* nav_bar = LLNavigationBar::getInstance();
-	LLRect nav_rect = nav_bar->getRect();
-	
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-
-	const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
-
-	S32 panel_width = sidetray_params.default_button_width;
-	panel_width += mCollapsed ? 0 : mMaxBarWidth;
-
-	S32 panel_height = parent_rect.getHeight()-fake_top_offset - nav_rect.getHeight();
-	S32 panel_top = parent_rect.mTop-fake_top_offset - nav_rect.getHeight();
-
-	LLRect panel_rect;
-	panel_rect.setLeftTopAndSize( parent_rect.mRight-panel_width, panel_top, panel_width, panel_height);
-	setRect(panel_rect);
+	// set visibility of parent container based on collapsed state
+	if (getParent())
+	{
+		getParent()->setVisible(!mCollapsed);
+	}
 }
 
-S32	LLSideTray::getTrayWidth()
-{
-	static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());	
-	return getRect().getWidth() - (sidetray_params.default_button_width + sidetray_params.default_button_margin);
-}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index b49251ec79b5535435d3311eedc8a71c4ec9a9b1..4d6081e230c386781f542c975983a23e924795e1 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -118,6 +118,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 		LLPanel::setVisible(visible);
 	}
 
+	LLPanel*	getButtonsPanel() { return mButtonsPanel; }
+
 public:
 	virtual ~LLSideTray(){};
 
@@ -129,13 +131,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	bool		addChild		(LLView* view, S32 tab_group);
 
 	BOOL		handleMouseDown	(S32 x, S32 y, MASK mask);
-	BOOL		handleScrollWheel(S32 x, S32 y, S32 mask);
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
-	S32			getTrayWidth();
-
-	void		resetPanelRect	();
-	
 
 protected:
 	LLSideTrayTab* getTab		(const std::string& name);
@@ -147,7 +144,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 	void		toggleTabButton	(LLSideTrayTab* tab);
 
-	void		setPanelRect	();
+	void		updateSidetrayVisibility();
 
 	
 
@@ -163,15 +160,15 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 private:
 
-	std::map<std::string,LLButton*>	mTabButtons;
+	LLPanel*						mButtonsPanel;
+	typedef std::map<std::string,LLButton*> button_map_t;
+	button_map_t					mTabButtons;
 	child_vector_t					mTabs;
 	LLSideTrayTab*					mActiveTab;	
 	
 	LLButton*						mCollapseButton;
 	bool							mCollapsed;
 	
-	S32								mMaxBarWidth;
-
 	static LLSideTray*				sInstance;
 };
 
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 9704fe71b78361cbe72b12f5a3e8967e2c93380e..880e690e53e06f6e89d73bcb7d5d9b9fd7700bbf 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -2678,8 +2678,7 @@ void renderTexturePriority(LLDrawable* drawable)
 		//LLViewerTexture* imagep = facep->getTexture();
 		//if (imagep)
 		{
-	
-			//F32 vsize = LLVOVolume::getTextureVirtualSize(facep);
+				
 			//F32 vsize = imagep->mMaxVirtualSize;
 			F32 vsize = facep->getPixelArea();
 
@@ -2703,7 +2702,7 @@ void renderTexturePriority(LLDrawable* drawable)
 		drawBox(center, size);
 		
 		/*S32 boost = imagep->getBoostLevel();
-		if (boost)
+		if (boost>LLViewerTexture::BOOST_NONE)
 		{
 			F32 t = (F32) boost / (F32) (LLViewerTexture::BOOST_MAX_LEVEL-1);
 			LLVector4 col = lerp(boost_cold, boost_hot, t);
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..57ea018f2540c833bb9a19dfe6fbdb30d2fc35f8
--- /dev/null
+++ b/indra/newview/llspeakbutton.cpp
@@ -0,0 +1,185 @@
+/** 
+* @file llspeakbutton.cpp
+* @brief LLSpeakButton class implementation
+*
+* $LicenseInfo:firstyear=2002&license=viewergpl$
+* 
+* Copyright (c) 2002-2009, Linden Research, Inc.
+* 
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab.  Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+* 
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at
+* http://secondlifegrid.net/programs/open_source/licensing/flossexception
+* 
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+* 
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llagent.h"
+#include "llbottomtray.h"
+#include "llfloaterreg.h"
+#include "llvoiceclient.h"
+#include "llvoicecontrolpanel.h"
+#include "lltransientfloatermgr.h"
+
+#include "llavatariconctrl.h"
+#include "llbutton.h"
+#include "llpanel.h"
+#include "lltextbox.h"
+#include "lloutputmonitorctrl.h"
+#include "llgroupmgr.h"
+
+#include "llspeakbutton.h"
+
+static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button");
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLSpeakButton::Params::Params()
+ : speak_button("speak_button")
+ , show_button("show_button")
+ , monitor("monitor")
+{
+	// See widgets/talk_button.xml
+}
+
+void LLSpeakButton::draw()
+{
+	// gVoiceClient is the authoritative global source of info regarding our open-mic state, we merely reflect that state.
+	bool openmic = gVoiceClient->getUserPTTState();
+	mSpeakBtn->setToggleState(openmic);
+	LLUICtrl::draw();
+}
+
+LLSpeakButton::LLSpeakButton(const Params& p)
+: LLUICtrl(p)
+, mPrivateCallPanel(NULL)
+, mOutputMonitor(NULL)
+, mSpeakBtn(NULL)
+, mShowBtn(NULL)
+{
+	LLRect rect = p.rect();
+	LLRect speak_rect(0, rect.getHeight(), rect.getWidth(), 0);
+	LLRect show_rect = p.show_button.rect();
+	show_rect.set(0, rect.getHeight(), show_rect.getWidth(), 0);
+
+	speak_rect.mRight -= show_rect.getWidth();
+	show_rect.mLeft = speak_rect.getWidth();
+	show_rect.mRight = rect.getWidth();
+
+	LLButton::Params speak_params = p.speak_button;
+	speak_params.rect(speak_rect);
+	mSpeakBtn = LLUICtrlFactory::create<LLButton>(speak_params);
+	addChild(mSpeakBtn);
+	LLTransientFloaterMgr::getInstance()->addControlView(mSpeakBtn);
+
+	mSpeakBtn->setMouseDownCallback(boost::bind(&LLSpeakButton::onMouseDown_SpeakBtn, this));
+	mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this));
+	mSpeakBtn->setToggleState(FALSE);
+
+	LLButton::Params show_params = p.show_button;
+	show_params.rect(show_rect);
+	mShowBtn = LLUICtrlFactory::create<LLButton>(show_params);
+	addChild(mShowBtn);
+	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn);
+
+	mShowBtn->setClickedCallback(boost::bind(&LLSpeakButton::onClick_ShowBtn, this));
+	mShowBtn->setToggleState(FALSE);
+
+	static const S32 MONITOR_RIGHT_PAD = 2;
+
+	LLRect monitor_rect = p.monitor.rect();
+	S32 monitor_height = monitor_rect.getHeight();
+	monitor_rect.mLeft = speak_rect.getWidth() - monitor_rect.getWidth() - MONITOR_RIGHT_PAD;
+	monitor_rect.mRight = speak_rect.getWidth() - MONITOR_RIGHT_PAD;
+	monitor_rect.mBottom = (rect.getHeight() / 2) - (monitor_height / 2);
+	monitor_rect.mTop = monitor_rect.mBottom + monitor_height;
+
+	LLOutputMonitorCtrl::Params monitor_params = p.monitor;
+	monitor_params.draw_border(false);
+	monitor_params.rect(monitor_rect);
+	monitor_params.auto_update(true);
+	monitor_params.speaker_id(gAgentID);
+	mOutputMonitor = LLUICtrlFactory::create<LLOutputMonitorCtrl>(monitor_params);
+	mSpeakBtn->addChild(mOutputMonitor);
+
+	// never show "muted" because you can't mute yourself
+	mOutputMonitor->setIsMuted(false);
+	mOutputMonitor->setIsAgentControl(true);
+}
+
+LLSpeakButton::~LLSpeakButton()
+{
+	LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn);
+	LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
+}
+
+void LLSpeakButton::onMouseDown_SpeakBtn()
+{
+	bool down = true;
+	gVoiceClient->inputUserControlState(down); // this method knows/care about whether this translates into a toggle-to-talk or down-to-talk
+}
+void LLSpeakButton::onMouseUp_SpeakBtn()
+{
+	bool down = false;
+	gVoiceClient->inputUserControlState(down);
+}
+
+void LLSpeakButton::onClick_ShowBtn()
+{
+	if(!mShowBtn->getToggleState())
+	{
+		mPrivateCallPanel->onClickClose(mPrivateCallPanel);
+		delete mPrivateCallPanel;
+		mPrivateCallPanel = NULL;
+		mShowBtn->setToggleState(FALSE);
+		return;
+	}
+
+	S32 x = mSpeakBtn->getRect().mLeft;
+	S32 y = 0;
+
+	localPointToScreen(x, y, &x, &y);
+
+	mPrivateCallPanel = new LLVoiceControlPanel;
+	getRootView()->addChild(mPrivateCallPanel);
+
+	y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight();
+
+	LLRect rect;
+	rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight());
+	mPrivateCallPanel->setRect(rect);
+
+
+	LLAvatarListItem* item = new LLAvatarListItem();
+	item->showLastInteractionTime(false);
+	item->showInfoBtn(true);
+	item->showSpeakingIndicator(true);
+	item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE);
+
+	mPrivateCallPanel->addItem(item);
+	mPrivateCallPanel->setVisible(TRUE);
+	mPrivateCallPanel->setFrontmost(TRUE);
+
+	mShowBtn->setToggleState(TRUE);
+}
+
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
new file mode 100644
index 0000000000000000000000000000000000000000..e213c562dd820c5781e234208b14c395a865fa3c
--- /dev/null
+++ b/indra/newview/llspeakbutton.h
@@ -0,0 +1,81 @@
+/** 
+* @file llspeakbutton.h
+* @brief LLSpeakButton class header file
+*
+* $LicenseInfo:firstyear=2002&license=viewergpl$
+* 
+* Copyright (c) 2002-2009, Linden Research, Inc.
+* 
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab.  Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+* 
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at
+* http://secondlifegrid.net/programs/open_source/licensing/flossexception
+* 
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+* 
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+
+#ifndef LL_LLSPEAKBUTTON_H
+#define LL_LLSPEAKBUTTON_H
+
+#include "llinitparam.h"
+#include "lluictrl.h"
+
+class LLVoiceControlPanel;
+class LLButton;
+class LLOutputMonitorCtrl;
+
+/*
+ * Button displaying voice chat status. Displays voice chat options when
+ * clicked.
+*/
+class LLSpeakButton : public LLUICtrl
+{
+public:
+
+	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>
+	{
+		Optional<LLButton::Params>
+			speak_button,
+			show_button;
+
+		Optional<LLOutputMonitorCtrl::Params> monitor;
+
+		Params();
+	};
+
+	/*virtual*/ ~LLSpeakButton();
+	/*virtual*/ void draw();
+
+protected:
+	friend class LLUICtrlFactory;
+	LLSpeakButton(const Params& p);
+
+	void onMouseDown_SpeakBtn();
+	void onMouseUp_SpeakBtn();
+
+	void onClick_ShowBtn();
+
+private:
+	LLButton*	mSpeakBtn;
+	LLButton*	mShowBtn;
+	LLVoiceControlPanel* mPrivateCallPanel;
+	LLOutputMonitorCtrl* mOutputMonitor;
+};
+
+#endif // LL_LLSPEAKBUTTON_H
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 2341fcfc6d64cc2be9d3f747f0df3a57ac0db457..2ed82b7d621c1b8be82159dee900538fd2f0c226 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -87,6 +87,21 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c
 	mDisplayName = first + " " + last;
 }
 
+LLSpeakerUpdateModeratorEvent::LLSpeakerUpdateModeratorEvent(LLSpeaker* source)
+: LLEvent(source, "Speaker add moderator event"),
+  mSpeakerID (source->mID),
+  mIsModerator (source->mIsModerator)
+{
+}
+
+LLSD LLSpeakerUpdateModeratorEvent::getValue()
+{
+	LLSD ret;
+	ret["id"] = mSpeakerID;
+	ret["is_moderator"] = mIsModerator;
+	return ret;
+}
+
 LLSpeakerTextModerationEvent::LLSpeakerTextModerationEvent(LLSpeaker* source)
 : LLEvent(source, "Speaker text moderation event")
 {
@@ -437,9 +452,13 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers)
 
 			if ( speaker_it->second.isMap() )
 			{
+				BOOL is_moderator = speakerp->mIsModerator;
 				speakerp->mIsModerator = speaker_it->second["is_moderator"];
 				speakerp->mModeratorMutedText =
 					speaker_it->second["mutes"]["text"];
+				// Fire event only if moderator changed
+				if ( is_moderator != speakerp->mIsModerator )
+					fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator");
 			}
 		}
 	}
@@ -507,7 +526,11 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
 
 				if (agent_info.has("is_moderator"))
 				{
+					BOOL is_moderator = speakerp->mIsModerator;
 					speakerp->mIsModerator = agent_info["is_moderator"];
+					// Fire event only if moderator changed
+					if ( is_moderator != speakerp->mIsModerator )
+						fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator");
 				}
 
 				if (agent_info.has("mutes"))
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index e0f22bff4f421ba7f75dad8d595bcc19b6a02f4f..04046a85878310409689409bcc54d4f3de4609ec 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -84,6 +84,16 @@ class LLSpeaker : public LLRefCount, public LLOldEvents::LLObservable, public LL
 	BOOL			mModeratorMutedText;
 };
 
+class LLSpeakerUpdateModeratorEvent : public LLOldEvents::LLEvent
+{
+public:
+	LLSpeakerUpdateModeratorEvent(LLSpeaker* source);
+	/*virtual*/ LLSD getValue();
+private:
+	const LLUUID& mSpeakerID;
+	BOOL mIsModerator;
+};
+
 class LLSpeakerTextModerationEvent : public LLOldEvents::LLEvent
 {
 public:
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9aa74e8b9f90c39ebdda57db4dc1ae8120d963d5..2c1f468f77abc9761d5aab8391e81178d5ae7839 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -60,6 +60,7 @@
 #include "llfocusmgr.h"
 #include "llhttpsender.h"
 #include "lllocationhistory.h"
+#include "llimageworker.h"
 #include "llloginflags.h"
 #include "llmd5.h"
 #include "llmemorystream.h"
@@ -168,7 +169,7 @@
 #include "llvoclouds.h"
 #include "llweb.h"
 #include "llworld.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 #include "llxfermanager.h"
 #include "pipeline.h"
 #include "llappviewer.h"
@@ -334,7 +335,7 @@ void populate_favorites_bar()
 	S32 count = lib_cats->count();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(lib_cats->get(i)->getPreferredType() == LLAssetType::AT_LANDMARK)
+		if(lib_cats->get(i)->getPreferredType() == LLFolderType::FT_LANDMARK)
 		{
 			lib_landmarks = lib_cats->get(i)->getUUID();
 			break;
@@ -351,7 +352,7 @@ void populate_favorites_bar()
 	gInventory.getDirectDescendentsOf(lib_landmarks, lm_cats, lm_items);
 	if (!lm_items) return;
 
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
+	const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 	if (favorites_id.isNull())
 	{
 		llerror("My Inventory is missing My Favorites", 0);
@@ -738,11 +739,12 @@ bool idle_startup()
 		}
 		if (!gLoginHandler.getFirstName().empty()
 			|| !gLoginHandler.getLastName().empty()
-			|| !gLoginHandler.getWebLoginKey().isNull() )
+			/*|| !gLoginHandler.getWebLoginKey().isNull()*/ )
 		{
 			// We have at least some login information on a SLURL
 			gFirstname = gLoginHandler.getFirstName();
 			gLastname = gLoginHandler.getLastName();
+			LL_DEBUGS("LLStartup") << "STATE_FIRST: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 
 			// Show the login screen if we don't have everything
 			show_connect_box = 
@@ -753,6 +755,7 @@ bool idle_startup()
             LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
 			gFirstname = cmd_line_login[0].asString();
 			gLastname = cmd_line_login[1].asString();
+			LL_DEBUGS("LLStartup") << "Setting gFirstname, gLastname from gSavedSettings(\"UserLoginInfo\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 
 			LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
 			char md5pass[33];               /* Flawfinder: ignore */
@@ -770,6 +773,7 @@ bool idle_startup()
 		{
 			gFirstname = gSavedSettings.getString("FirstName");
 			gLastname = gSavedSettings.getString("LastName");
+			LL_DEBUGS("LLStartup") << "AutoLogin: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 			gPassword = LLStartUp::loadPasswordFromDisk();
 			gSavedSettings.setBOOL("RememberPassword", TRUE);
 			
@@ -785,6 +789,7 @@ bool idle_startup()
 			// a valid grid is selected
 			gFirstname = gSavedSettings.getString("FirstName");
 			gLastname = gSavedSettings.getString("LastName");
+			LL_DEBUGS("LLStartup") << "normal login: setting gFirstname, gLastname from gSavedSettings(\"First|LastName\"): '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 			gPassword = LLStartUp::loadPasswordFromDisk();
 			show_connect_box = true;
 		}
@@ -895,13 +900,16 @@ bool idle_startup()
 		gViewerWindow->moveProgressViewToFront();
 
 		//reset the values that could have come in from a slurl
-		if (!gLoginHandler.getWebLoginKey().isNull())
+		// DEV-42215: Make sure they're not empty -- gFirstname and gLastname
+		// might already have been set from gSavedSettings, and it's too bad
+		// to overwrite valid values with empty strings.
+		if (! gLoginHandler.getFirstName().empty() && ! gLoginHandler.getLastName().empty())
 		{
 			gFirstname = gLoginHandler.getFirstName();
 			gLastname = gLoginHandler.getLastName();
-//			gWebLoginKey = gLoginHandler.getWebLoginKey();
+			LL_DEBUGS("LLStartup") << "STATE_LOGIN_CLEANUP: setting gFirstname, gLastname from gLoginHandler: '" << gFirstname << "' '" << gLastname << "'" << LL_ENDL;
 		}
-				
+
 		if (show_connect_box)
 		{
 			// TODO if not use viewer auth
@@ -1314,6 +1322,7 @@ bool idle_startup()
 			gViewerWindow->moveProgressViewToFront();
 
 			LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
+			
 			// set initial visibility of debug console
 			gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole"));
 		}
@@ -1677,7 +1686,7 @@ bool idle_startup()
 		gInventory.buildParentChildMap();
 
 		//all categories loaded. lets create "My Favorites" category
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE,true);
+		gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true);
 
 		// lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies
 		LLFriendCardsManager::instance().syncFriendsFolder();
@@ -2529,9 +2538,8 @@ void register_viewer_callbacks(LLMessageSystem* msg)
 
 	msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply);
 
-	msg->setHandlerFunc("MapLayerReply", LLWorldMap::processMapLayerReply);
-	msg->setHandlerFunc("MapBlockReply", LLWorldMap::processMapBlockReply);
-	msg->setHandlerFunc("MapItemReply", LLWorldMap::processMapItemReply);
+	msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply);
+	msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply);
 
 	msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
 	msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 5440b2c9adfe0c35c139ea9dd7928b3d2510443b..1d479bac8cabf4f7dea2dcb4bc66a149df9a2093 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -234,12 +234,7 @@ void LLSurface::createSTexture()
 {
 	if (!mSTexturep)
 	{
-		// Fill with dummy gray data.
-	
-		//mSTexturep =  LLViewerTextureManager::getLocalTexture(sTextureSize, sTextureSize, 3, FALSE);
-		//mSTexturep->dontDiscard();
-		//mSTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-		
+		// Fill with dummy gray data.	
 		// GL NOT ACTIVE HERE
 		LLPointer<LLImageRaw> raw = new LLImageRaw(sTextureSize, sTextureSize, 3);
 		U8 *default_texture = raw->getData();
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index c25541842967c8dc7007672666eaede8d8b5f74d..723ac0fc33a203ec58404d4ab9a37df0fdb445c4 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -66,6 +66,7 @@ BOOL LLSysWellWindow::postBuild()
 	// init connections to the list's update events
 	connectListUpdaterToSignal("notify");
 	connectListUpdaterToSignal("groupnotify");
+	connectListUpdaterToSignal("offer");
 
 	// get a corresponding channel
 	initChannel();
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 5d9046ac905c19af80d44ce21f2143d005218afe..5d682cad3c09b1f857a4fa49897b22357018931c 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -670,8 +670,6 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 	LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
 	gGL.setColorMask(true, true);
 
-	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
-
 	// clear buffer area to ensure we don't pick up UI elements
 	{
 		gGL.flush();
@@ -691,12 +689,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		if (layer->getRenderPass() == LLTexLayer::RP_COLOR)
 		{
 			gGL.flush();
-			success &= layer->render(x, y, width, height, render_morph);
+			success &= layer->render(x, y, width, height);
 			gGL.flush();
-			if (layer->isMorphValid())
-			{
-				mAvatar->setMorphMasksValid(TRUE, mBakedTexIndex);
-			}
 		}
 	}
 	
@@ -786,12 +780,10 @@ void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 width, S32 height)
 {
 	memset(data, 255, width * height);
 
-	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
-
 	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
 	{
 		LLTexLayerInterface* layer = *iter;
-		layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height, render_morph);
+		layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height);
 	}
 	
 	// Set alpha back to that of our alpha masks.
@@ -863,6 +855,31 @@ void LLTexLayerSet::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_
 	mAvatar->applyMorphMask(tex_data, width, height, num_components, mBakedTexIndex);
 }
 
+BOOL LLTexLayerSet::isMorphValid()
+{
+	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+		if (layer && !layer->isMorphValid())
+		{
+			return FALSE;
+		}
+	}
+	return TRUE;
+}
+
+void LLTexLayerSet::invalidateMorphMasks()
+{
+	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+		if (layer)
+		{
+			layer->invalidateMorphMasks();
+		}
+	}
+}
+
 
 //-----------------------------------------------------------------------------
 // LLTexLayerInfo
@@ -1282,7 +1299,7 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t &param_list, LL
 	}
 }
 
-BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
+BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height)
 {
 	LLGLEnable color_mat(GL_COLOR_MATERIAL);
 	gPipeline.disableLights();
@@ -1333,7 +1350,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 			}
 		}//*/
 
-		renderMorphMasks(x, y, width, height, net_color, render_morph);
+		renderMorphMasks(x, y, width, height, net_color);
 		alpha_mask_specified = TRUE;
 		gGL.flush();
 		gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
@@ -1371,7 +1388,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 
 					LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
 					
-					gGL.getTexUnit(0)->bind(tex);
+					gGL.getTexUnit(0)->bind(tex, TRUE);
 					gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
 					gl_rect_2d_simple_tex( width, height );
@@ -1393,7 +1410,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 			LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
 			if( tex )
 			{
-				gGL.getTexUnit(0)->bind(tex);
+				gGL.getTexUnit(0)->bind(tex, TRUE);
 				gl_rect_2d_simple_tex( width, height );
 				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			}
@@ -1506,7 +1523,7 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
 		if( tex )
 		{
 			LLGLSNoAlphaTest gls_no_alpha_test;
-			gGL.getTexUnit(0)->bind(tex);
+			gGL.getTexUnit(0)->bind(tex, TRUE);
 			gl_rect_2d_simple_tex( width, height );
 			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		}
@@ -1534,12 +1551,12 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
 	return success;
 }
 
-/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
-	addAlphaMask(data, originX, originY, width, height, render_morph);
+	addAlphaMask(data, originX, originY, width, height);
 }
 
-BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph)
+BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color)
 {
 	BOOL success = TRUE;
 
@@ -1578,46 +1595,38 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	// Accumulate the alpha component of the texture
 	if( getInfo()->mLocalTexture != -1 )
 	{
-			LLViewerTexture* tex = mLocalTextureObject->getImage();
-			if( tex && (tex->getComponents() == 4) )
-			{
-				LLGLSNoAlphaTest gls_no_alpha_test;
+		LLViewerTexture* tex = mLocalTextureObject->getImage();
+		if( tex && (tex->getComponents() == 4) )
+		{
+			LLGLSNoAlphaTest gls_no_alpha_test;
 
-				LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
-				
-				gGL.getTexUnit(0)->bind(tex);
-				gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
+			LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
+			
+			gGL.getTexUnit(0)->bind(tex, TRUE);
+			gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
-				gl_rect_2d_simple_tex( width, height );
+			gl_rect_2d_simple_tex( width, height );
 
-				gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-			}
-			else
-			{
-				success = FALSE;
-			}
+			gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
+			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		}
+	}
 
 	if( !getInfo()->mStaticImageFileName.empty() )
 	{
-			LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
-			if( tex )
-			{
-				if(	(tex->getComponents() == 4) ||
-					( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
-				{
-					LLGLSNoAlphaTest gls_no_alpha_test;
-					gGL.getTexUnit(0)->bind(tex);
-					gl_rect_2d_simple_tex( width, height );
-					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				}
-			}
-			else
+		LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
+		if( tex )
+		{
+			if(	(tex->getComponents() == 4) ||
+				( (tex->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
 			{
-				success = FALSE;
+				LLGLSNoAlphaTest gls_no_alpha_test;
+				gGL.getTexUnit(0)->bind(tex, TRUE);
+				gl_rect_2d_simple_tex( width, height );
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			}
 		}
+	}
 
 	// Draw a rectangle with the layer color to multiply the alpha by that color's alpha.
 	// Note: we're still using gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
@@ -1634,7 +1643,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 
 	gGL.setColorMask(true, true);
 	
-	if (render_morph && mHasMorph && success)
+	if (hasMorph() && success)
 	{
 		LLCRC alpha_mask_crc;
 		const LLUUID& uuid = getUUID();
@@ -1674,7 +1683,7 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	return success;
 }
 
-void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
 	S32 size = width * height;
 	U8* alphaData = getAlphaData();
@@ -1684,7 +1693,7 @@ void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32
 		findNetColor( &net_color );
 		// TODO: eliminate need for layer morph mask valid flag
 		invalidateMorphMasks();
-		renderMorphMasks(originX, originY, width, height, net_color, render_morph);
+		renderMorphMasks(originX, originY, width, height, net_color);
 		alphaData = getAlphaData();
 	}
 	if (alphaData)
@@ -1805,7 +1814,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 	return layer;
 }
 
-/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height)
 {
 	BOOL success = TRUE;
 	updateWearableCache();
@@ -1827,7 +1836,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 		{
 			wearable->writeToAvatar(FALSE, FALSE);
 			layer->setLTO(lto);
-			success &= layer->render(x,y,width,height,render_morph);
+			success &= layer->render(x,y,width,height);
 		}
 	}
 
@@ -1849,7 +1858,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 	return success;
 }
 
-/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height)
 {
 	U32 num_wearables = updateWearableCache();
 	for (U32 i = 0; i < num_wearables; i++)
@@ -1857,7 +1866,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
 		LLTexLayer *layer = getLayer(i);
 		if (layer)
 		{
-			layer->addAlphaMask(data, originX, originY, width, height, render_morph);
+			layer->addAlphaMask(data, originX, originY, width, height);
 		}
 	}
 }
@@ -2034,7 +2043,7 @@ LLViewerTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_n
 				// that once an image is a mask it's always a mask.
 				tex->setExplicitFormat( GL_ALPHA8, GL_ALPHA );
 			}
-			tex->createGLTexture(0, image_raw);
+			tex->createGLTexture(0, image_raw, 0, TRUE, LLViewerTexture::LOCAL);
 
 			gGL.getTexUnit(0)->bind(tex);
 			tex->setAddressMode(LLTexUnit::TAM_CLAMP);
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index e4a6e82ba5b03fffc80485c48f66b1a8df2467b7..cd8f27a96b4934eac8eaea9d2f9171ccd06176fc 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -81,13 +81,14 @@ class LLTexLayerInterface
 
 	const LLTexLayerInfo* 	getInfo() const { return mInfo; }
 	virtual BOOL			setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
-	virtual BOOL			render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) = 0;
+	virtual BOOL			render(S32 x, S32 y, S32 width, S32 height) = 0;
 	void					requestUpdate();
 	LLTexLayerSet*			const getTexLayerSet() const { return mTexLayerSet; }
 
 	virtual void			deleteCaches() = 0;
 	void					invalidateMorphMasks();
 	virtual void			setHasMorph(BOOL newval) { mHasMorph = newval; }
+	BOOL					hasMorph()				 { return mHasMorph; }
 	BOOL					isMorphValid()			 { return mMorphMasksValid; }
 
 	const std::string&		getName() const;
@@ -95,7 +96,7 @@ class LLTexLayerInterface
 	const std::string&		getGlobalColor() const;
 
 	virtual BOOL			blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) = 0;
-	virtual void			gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) = 0;
+	virtual void			gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height) = 0;
 	BOOL					hasAlphaParams() const { return !mParamAlphaList.empty(); }
 	BOOL					isVisibilityMask() const;
 
@@ -134,10 +135,10 @@ class LLTexLayerTemplate : public LLTexLayerInterface
 	LLTexLayerTemplate(const LLTexLayerTemplate &layer);
 	/*virtual*/ ~LLTexLayerTemplate();
 
-	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height);
 	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
 	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
-	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
 	/*virtual*/ void		setHasMorph(BOOL newval);
 	/*virtual*/ void		deleteCaches();
 private:
@@ -162,16 +163,16 @@ class LLTexLayer : public LLTexLayerInterface
 	/*virtual*/ ~LLTexLayer();
 
 	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
-	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height);
 
 	/*virtual*/ void		deleteCaches();
 	U8*						getAlphaData();
 
 	BOOL					findNetColor(LLColor4* color) const;
 	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
-	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
-	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph);
-	void					addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
+	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color);
+	void					addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height);
 
 	void					setLTO(LLLocalTextureObject *lto) { mLocalTextureObject = lto; }
 	LLLocalTextureObject* 	getLTO() { return mLocalTextureObject; }
@@ -261,6 +262,8 @@ class LLTexLayerSet
 	void					deleteCaches();
 	void					gatherMorphMaskAlpha(U8 *data, S32 width, S32 height);
 	void					applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components);
+	BOOL					isMorphValid();
+	void					invalidateMorphMasks();
 	LLTexLayerInterface*	findLayerByName(const std::string& name);
 	void					cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable);
 	
diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index 74e0fa077e397542cfbdb25148c4704ec1dd30ef..b744722f4cd5b72a5f16af772e32212f9d8d2793 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -183,7 +183,6 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)
 			}
 			mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user);
 			mTexLayer->invalidateMorphMasks();
-			mAvatar->updateMeshTextures();
 		}
 	}
 }
@@ -479,7 +478,6 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user)
 			if (mTexLayer)
 			{
 				mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user);
-				mAvatar->updateMeshTextures();
 			}
 		}
 
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 1b249d75d15320c454ffd63d50059100c5cb0ed1..69a2d1d7a6bd914264658c3bff764ccabb5216e5 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -43,11 +43,17 @@
 // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout
 #include "llappviewer.h" 
 
-#define USE_LFS_READ 0
-#define USE_LFS_WRITE 0
-
-// Note: first 4 bytes store file size, rest is j2c data
-const S32 TEXTURE_CACHE_ENTRY_SIZE = FIRST_PACKET_SIZE; //1024;
+// Cache organization:
+// cache/texture.entries
+//  Unordered array of Entry structs
+// cache/texture.cache
+//  First TEXTURE_CACHE_ENTRY_SIZE bytes of each texture in texture.entries in same order
+// cache/textures/[0-F]/UUID.texture
+//  Actual texture body files
+
+const S32 TEXTURE_CACHE_ENTRY_SIZE = 1024;
+const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by when it exceeds its limit
+const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate)
 
 class LLTextureCacheWorker : public LLWorkerClass
 {
@@ -309,94 +315,75 @@ void LLTextureCacheWorker::startWork(S32 param)
 {
 }
 
+// This is where a texture is read from the cache system (header and body)
+// Current assumption are:
+// - the whole data are in a raw form, will be stored at mReadData
+// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache)
+// - the code supports offset reading but this is actually never exercised in the viewer
 bool LLTextureCacheRemoteWorker::doRead()
 {
+	bool done = false;
+	S32 idx = -1;
+
 	S32 local_size = 0;
 	std::string local_filename;
 	
+	// First state / stage : find out if the file is local
 	if (mState == INIT)
 	{
 		std::string filename = mCache->getLocalFileName(mID);	
-		local_filename = filename + ".j2c";
-		local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
-		if (local_size == 0)
+		// Is it a JPEG2000 file? 
 		{
-			local_filename = filename + ".tga";
+			local_filename = filename + ".j2c";
 			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
 			if (local_size > 0)
 			{
-				mImageFormat = IMG_CODEC_TGA;
-				mDataSize = local_size; // Only a complete .tga file is valid
+				mImageFormat = IMG_CODEC_J2C;
 			}
 		}
-		if (local_size > 0)
-		{
-			mState = LOCAL;
-		}
-		else
-		{
-			mState = CACHE;
-		}
-	}
-
-	if (mState == LOCAL)
-	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
+		// If not, is it a jpeg file?
+		if (local_size == 0)
 		{
-			mImageLocal = TRUE;
-			mImageSize = local_size;
-			if (!mDataSize || mDataSize + mOffset > local_size)
+			local_filename = filename + ".jpg";
+			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+			if (local_size > 0)
 			{
-				mDataSize = local_size - mOffset;
+				mImageFormat = IMG_CODEC_JPEG;
+				mDataSize = local_size; // Only a complete .jpg file is valid
 			}
-			if (mDataSize <= 0)
-			{
-				// no more data to read
-				mDataSize = 0;
-				return true;
-			}
-			mReadData = new U8[mDataSize];
-			mBytesRead = -1;
-			mBytesToRead = mDataSize;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->read(local_filename, mReadData, mOffset, mDataSize,
-													new ReadResponder(mCache, mRequestHandle));
-			return false;
 		}
-		else
+		// Hmm... What about a targa file? (used for UI texture mostly)
+		if (local_size == 0)
 		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "Error reading file from local cache: " << local_filename
-// 							<< " Bytes: " << mDataSize << " Offset: " << mOffset
-// 							<< " / " << mDataSize << llendl;
-					mDataSize = 0; // failed
-					delete[] mReadData;
-					mReadData = NULL;
-				}
-				return true;
-			}
-			else
+			local_filename = filename + ".tga";
+			local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+			if (local_size > 0)
 			{
-				return false;
+				mImageFormat = IMG_CODEC_TGA;
+				mDataSize = local_size; // Only a complete .tga file is valid
 			}
 		}
-#else
+		// Determine the next stage: if we found a file, then LOCAL else CACHE
+		mState = (local_size > 0 ? LOCAL : CACHE);
+	}
+
+	// Second state / stage : if the file is local, load it and leave
+	if (!done && (mState == LOCAL))
+	{
+		llassert(local_size != 0);	// we're assuming there is a non empty local file here...
 		if (!mDataSize || mDataSize > local_size)
 		{
 			mDataSize = local_size;
 		}
+		// Allocate read buffer
 		mReadData = new U8[mDataSize];
 		S32 bytes_read = LLAPRFile::readEx(local_filename, 
 											 mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
 		if (bytes_read != mDataSize)
 		{
-// 			llwarns << "Error reading file from local cache: " << local_filename
-// 					<< " Bytes: " << mDataSize << " Offset: " << mOffset
-// 					<< " / " << mDataSize << llendl;
+ 			llwarns << "Error reading file from local cache: " << local_filename
+ 					<< " Bytes: " << mDataSize << " Offset: " << mOffset
+ 					<< " / " << mDataSize << llendl;
 			mDataSize = 0;
 			delete[] mReadData;
 			mReadData = NULL;
@@ -406,405 +393,275 @@ bool LLTextureCacheRemoteWorker::doRead()
 			mImageSize = local_size;
 			mImageLocal = TRUE;
 		}
-		return true;
-#endif
+		// We're done...
+		done = true;
 	}
 
-	S32 idx = -1;
-	
-	if (mState == CACHE)
+	// Second state / stage : identify the cache or not...
+	if (!done && (mState == CACHE))
 	{
-		llassert_always(mImageSize == 0);
-		idx = mCache->getHeaderCacheEntry(mID, false, &mImageSize);
-		if (idx >= 0 && mImageSize > mOffset)
+		idx = mCache->getHeaderCacheEntry(mID, mImageSize);
+		if (idx < 0)
 		{
-			llassert_always(mImageSize > 0);
-			if (!mDataSize || mDataSize > mImageSize)
-			{
-				mDataSize = mImageSize;
-			}
-			mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
+			// The texture is *not* cached. We're done here...
+			mDataSize = 0; // no data 
+			done = true;
 		}
 		else
 		{
-			mDataSize = 0; // no data
-			return true;
+			// If the read offset is bigger than the header cache, we read directly from the body
+			// Note that currently, we *never* read with offset from the cache, so the result is *always* HEADER
+			mState = mOffset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
 		}
 	}
 
-	if (mState == HEADER)
+	// Third state / stage : read data from the header cache (texture.entries) file
+	if (!done && (mState == HEADER))
 	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
-		{
-			llassert_always(idx >= 0);
-			llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-			S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-			S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			llassert_always(mReadData == NULL);
-			mReadData = new U8[size];
-			mBytesRead = -1;
-			mBytesToRead = size;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->read(mCache->mHeaderDataFileName,
-													mReadData, offset, mBytesToRead,
-													new ReadResponder(mCache, mRequestHandle));
-			return false;
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes read from header: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-					return true;
-				}
-				if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE)
-				{
-					return true; // done
-				}
-				else
-				{
-					mFileHandle = LLLFSThread::nullHandle();
-					mState = BODY;
-				}
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
-		llassert_always(idx >= 0);
+		llassert_always(idx >= 0);	// we need an entry here or reading the header makes no sense
 		llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
 		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
+		// Compute the size we need to read (in bytes)
 		S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
+		size = llmin(size, mDataSize);
+		// Allocate the read buffer
 		mReadData = new U8[size];
 		S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, 
 											 mReadData, offset, size, mCache->getLocalAPRFilePool());
 		if (bytes_read != size)
 		{
-// 			llwarns << "LLTextureCacheWorker: "  << mID
-// 					<< " incorrect number of bytes read from header: " << bytes_read
-// 					<< " / " << size << llendl;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " incorrect number of bytes read from header: " << bytes_read
+					<< " / " << size << llendl;
+			delete[] mReadData;
+			mReadData = NULL;
 			mDataSize = -1; // failed
-			return true;
+			done = true;
 		}
-		if (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE)
+		// If we already read all we expected, we're actually done
+		if (mDataSize <= bytes_read)
 		{
-			return true; // done
+			done = true;
 		}
 		else
 		{
 			mState = BODY;
 		}
-#endif
 	}
 
-	if (mState == BODY)
+	// Fourth state / stage : read the rest of the data from the UUID based cached file
+	if (!done && (mState == BODY))
 	{
-#if USE_LFS_READ
-		if (mFileHandle == LLLFSThread::nullHandle())
-		{
-			std::string filename = mCache->getTextureFileName(mID);
-			S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
-			if (filesize > mOffset)
-			{
-				S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize;
-				mDataSize = llmin(datasize, mDataSize);
-				S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-				data_offset = llmax(data_offset, 0);
-				S32 file_size = mDataSize - data_offset;
-				S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-				file_offset = llmax(file_offset, 0);
-
-				llassert_always(mDataSize > 0);
-				U8* data = new U8[mDataSize];
-				if (data_offset > 0)
-				{
-					llassert_always(mReadData);
-					llassert_always(data_offset <= mDataSize);
-					memcpy(data, mReadData, data_offset);
-					delete[] mReadData;
-					mReadData = NULL;
-				}
-				llassert_always(mReadData == NULL);
-				mReadData = data;
-
-				mBytesRead = -1;
-				mBytesToRead = file_size;
-				setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-				llassert_always(data_offset + mBytesToRead <= mDataSize);
-				mFileHandle = LLLFSThread::sLocal->read(filename,
-														mReadData + data_offset, file_offset, mBytesToRead,
-														new ReadResponder(mCache, mRequestHandle));
-				return false;
-			}
-			else
-			{
-				mDataSize = TEXTURE_CACHE_ENTRY_SIZE;
-				return true; // done
-			}
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes read from body: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-				}
-				return true;
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
 		std::string filename = mCache->getTextureFileName(mID);
 		S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
-		S32 bytes_read = 0;
-		if (filesize > mOffset)
+
+		if (filesize && (filesize + TEXTURE_CACHE_ENTRY_SIZE) > mOffset)
 		{
-			S32 datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize;
-			mDataSize = llmin(datasize, mDataSize);
-			S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			data_offset = llmax(data_offset, 0);
-			S32 file_size = mDataSize - data_offset;
-			S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-			file_offset = llmax(file_offset, 0);
+			S32 max_datasize = TEXTURE_CACHE_ENTRY_SIZE + filesize - mOffset;
+			mDataSize = llmin(max_datasize, mDataSize);
+
+			S32 data_offset, file_size, file_offset;
 			
+			// Reserve the whole data buffer first
 			U8* data = new U8[mDataSize];
-			if (data_offset > 0)
+
+			// Set the data file pointers taking the read offset into account. 2 cases:
+			if (mOffset < TEXTURE_CACHE_ENTRY_SIZE)
 			{
+				// Offset within the header record. That means we read something from the header cache.
+				// Note: most common case is (mOffset = 0), so this is the "normal" code path.
+				data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;	// i.e. TEXTURE_CACHE_ENTRY_SIZE if mOffset nul (common case)
+				file_offset = 0;
+				file_size = mDataSize - data_offset;
+				// Copy the raw data we've been holding from the header cache into the new sized buffer
 				llassert_always(mReadData);
 				memcpy(data, mReadData, data_offset);
 				delete[] mReadData;
+				mReadData = NULL;
+			}
+			else
+			{
+				// Offset bigger than the header record. That means we haven't read anything yet.
+				data_offset = 0;
+				file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
+				file_size = mDataSize;
+				// No data from header cache to copy in that case, we skipped it all
 			}
+
+			// Now use that buffer as the object read buffer
+			llassert_always(mReadData == NULL);
 			mReadData = data;
-			bytes_read = LLAPRFile::readEx(filename, 
+
+			// Read the data at last
+			S32 bytes_read = LLAPRFile::readEx(filename, 
 											 mReadData + data_offset,
 											 file_offset, file_size,
 											 mCache->getLocalAPRFilePool());
 			if (bytes_read != file_size)
 			{
-// 				llwarns << "LLTextureCacheWorker: "  << mID
-// 						<< " incorrect number of bytes read from body: " << bytes_read
-// 						<< " / " << file_size << llendl;
+				llwarns << "LLTextureCacheWorker: "  << mID
+						<< " incorrect number of bytes read from body: " << bytes_read
+						<< " / " << file_size << llendl;
+				delete[] mReadData;
+				mReadData = NULL;
 				mDataSize = -1; // failed
-				return true;
+				done = true;
 			}
 		}
 		else
 		{
-			mDataSize = TEXTURE_CACHE_ENTRY_SIZE;
-		}
-		
-		return true;
-#endif
+			// No body, we're done.
+			mDataSize = llmax(TEXTURE_CACHE_ENTRY_SIZE - mOffset, 0);
+			lldebugs << "No body file for: " << filename << llendl;
+		}	
+		// Nothing else to do at that point...
+		done = true;
 	}
-	
-	return false;
+
+	// Clean up and exit
+	return done;
 }
 
+// This is where *everything* about a texture is written down in the cache system (entry map, header and body)
+// Current assumption are:
+// - the whole data are in a raw form, starting at mWriteData
+// - the size of this raw data is mDataSize and can be smaller than TEXTURE_CACHE_ENTRY_SIZE (the size of a record in the header cache)
+// - the code *does not* support offset writing so there are no difference between buffer addresses and start of data
 bool LLTextureCacheRemoteWorker::doWrite()
 {
+	bool done = false;
 	S32 idx = -1;
 
-	// No LOCAL state for write()
-	
+	// First state / stage : check that what we're trying to cache is in an OK shape
 	if (mState == INIT)
 	{
+		llassert_always(mOffset == 0);	// We currently do not support write offsets
+		llassert_always(mDataSize > 0); // Things will go badly wrong if mDataSize is nul or negative...
+		mState = CACHE;
+	}
+	
+	// No LOCAL state for write(): because it doesn't make much sense to cache a local file...
+
+	// Second state / stage : set an entry in the headers entry (texture.entries) file
+	if (!done && (mState == CACHE))
+	{
+		bool alreadyCached = false;
 		S32 cur_imagesize = 0;
-		S32 offset = mOffset;
-		idx = mCache->getHeaderCacheEntry(mID, false, &cur_imagesize);
-		if (idx >= 0 && cur_imagesize > 0)
+		// Checks if this image is already in the entry list
+		idx = mCache->getHeaderCacheEntry(mID, cur_imagesize);
+		if (idx >= 0 && (cur_imagesize >= 0))
 		{
-			offset = TEXTURE_CACHE_ENTRY_SIZE; // don't re-write header
+			alreadyCached = true;	// already there and non empty
 		}
-		idx = mCache->getHeaderCacheEntry(mID, true, &mImageSize); // touch entry
-		if (idx >= 0)
+		idx = mCache->setHeaderCacheEntry(mID, mImageSize); // create or touch the entry
+		if (idx < 0)
 		{
-			if(cur_imagesize > 0 && mImageSize != cur_imagesize)
-			{
-// 				llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl;
-				offset = 0; // re-write header
-			}
-			mState = offset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " Unable to create header entry for writing!" << llendl;
+			mDataSize = -1; // failed
+			done = true;
 		}
 		else
 		{
-			mDataSize = -1; // failed
-			return true;
+			if (cur_imagesize > 0 && (mImageSize != cur_imagesize))
+			{
+				alreadyCached = false; // re-write the header if the size changed in all cases
+			}
+			if (alreadyCached && (mDataSize <= TEXTURE_CACHE_ENTRY_SIZE))
+			{
+				// Small texture already cached case: we're done with writing
+				done = true;
+			}
+			else
+			{
+				// If the texture has already been cached, we don't resave the header and go directly to the body part
+				mState = alreadyCached ? BODY : HEADER;
+			}
 		}
 	}
-	
-	if (mState == HEADER)
+
+	// Third stage / state : write the header record in the header file (texture.cache)
+	if (!done && (mState == HEADER))
 	{
-#if USE_LFS_WRITE
-		if (mFileHandle == LLLFSThread::nullHandle())
+		llassert_always(idx >= 0);	// we need an entry here or storing the header makes no sense
+		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE;	// skip to the correct spot in the header file
+		S32 size = TEXTURE_CACHE_ENTRY_SIZE;			// record size is fixed for the header
+		S32 bytes_written;
+
+		if (mDataSize < TEXTURE_CACHE_ENTRY_SIZE)
 		{
-			llassert_always(idx >= 0);
-			llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-			S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-			S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			mBytesRead = -1;
-			mBytesToRead = size;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-			mFileHandle = LLLFSThread::sLocal->write(mCache->mHeaderDataFileName,
-													 mWriteData, offset, mBytesToRead,
-													 new WriteResponder(mCache, mRequestHandle));
-			return false;
+			// We need to write a full record in the header cache so, if the amount of data is smaller
+			// than a record, we need to transfer the data to a buffer padded with 0 and write that
+			U8* padBuffer = new U8[TEXTURE_CACHE_ENTRY_SIZE];
+			memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE);		// Init with zeros
+			memcpy(padBuffer, mWriteData, mDataSize);			// Copy the write buffer
+			bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool());
+			delete [] padBuffer;
 		}
 		else
 		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes written to header: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-					return true;
-				}
-				if (mDataSize <=  mBytesToRead)
-				{
-					return true; // done
-				}
-				else
-				{
-					mFileHandle = LLLFSThread::nullHandle();
-					mState = BODY;
-				}
-			}
-			else
-			{
-				return false;
-			}
+			// Write the header record (== first TEXTURE_CACHE_ENTRY_SIZE bytes of the raw file) in the header file
+			bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());
 		}
-#else
-		llassert_always(idx >= 0);
-		llassert_always(mOffset < TEXTURE_CACHE_ENTRY_SIZE);
-		S32 offset = idx * TEXTURE_CACHE_ENTRY_SIZE + mOffset;
-		S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-		S32 bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());		
 
 		if (bytes_written <= 0)
 		{
-// 			llwarns << "LLTextureCacheWorker: missing entry: " << mID << llendl;
+			llwarns << "LLTextureCacheWorker: "  << mID
+					<< " Unable to write header entry!" << llendl;
 			mDataSize = -1; // failed
-			return true;
+			done = true;
 		}
 
-		if (mDataSize <= size)
+		// If we wrote everything (may be more with padding) in the header cache, 
+		// we're done so we don't have a body to store
+		if (mDataSize <= bytes_written)
 		{
-			return true; // done
+			done = true;
 		}
 		else
 		{
 			mState = BODY;
 		}
-#endif
 	}
 	
-	if (mState == BODY)
+	// Fourth stage / state : write the body file, i.e. the rest of the texture in a "UUID" file name
+	if (!done && (mState == BODY))
 	{
-#if USE_LFS_WRITE
-		if (mFileHandle == LLLFSThread::nullHandle())
+		llassert(mDataSize > TEXTURE_CACHE_ENTRY_SIZE);	// wouldn't make sense to be here otherwise...
+		S32 file_size = mDataSize - TEXTURE_CACHE_ENTRY_SIZE;
+		if ((file_size > 0) && mCache->updateTextureEntryList(mID, file_size))
 		{
-			S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-			data_offset = llmax(data_offset, 0);
-			S32 file_size = mDataSize - data_offset;
-			S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-			file_offset = llmax(file_offset, 0);
-			if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size))
-			{
-				std::string filename = mCache->getTextureFileName(mID);
-				mBytesRead = -1;
-				mBytesToRead = file_size;
-				setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
-				mFileHandle = LLLFSThread::sLocal->write(filename,
-														 mWriteData + data_offset, file_offset, mBytesToRead,
-														 new WriteResponder(mCache, mRequestHandle));
-				return false;
-			}
-			else
-			{
-				mDataSize = 0; // no data written
-				return true; // done
-			}
-		}
-		else
-		{
-			if (mBytesRead >= 0)
-			{
-				if (mBytesRead != mBytesToRead)
-				{
-// 					llwarns << "LLTextureCacheWorker: "  << mID
-// 							<< " incorrect number of bytes written to body: " << mBytesRead
-// 							<< " != " << mBytesToRead << llendl;
-					mDataSize = -1; // failed
-				}
-				return true;
-			}
-			else
-			{
-				return false;
-			}
-		}
-#else
-		S32 data_offset = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
-		data_offset = llmax(data_offset, 0);
-		S32 file_size = mDataSize - data_offset;
-		S32 file_offset = mOffset - TEXTURE_CACHE_ENTRY_SIZE;
-		file_offset = llmax(file_offset, 0);
-		S32 bytes_written = 0;
-		if (file_size > 0 && mCache->appendToTextureEntryList(mID, file_size))
-		{
-			std::string filename = mCache->getTextureFileName(mID);
-			
-			bytes_written = LLAPRFile::writeEx(filename, 
-												 mWriteData + data_offset,
-												 file_offset, file_size,
-												 mCache->getLocalAPRFilePool());
+			// build the cache file name from the UUID
+			std::string filename = mCache->getTextureFileName(mID);			
+// 			llinfos << "Writing Body: " << filename << " Bytes: " << file_offset+file_size << llendl;
+			S32 bytes_written = LLAPRFile::writeEx(	filename, 
+													mWriteData + TEXTURE_CACHE_ENTRY_SIZE,
+													0, file_size,
+													mCache->getLocalAPRFilePool());
 			if (bytes_written <= 0)
 			{
+				llwarns << "LLTextureCacheWorker: "  << mID
+						<< " incorrect number of bytes written to body: " << bytes_written
+						<< " / " << file_size << llendl;
 				mDataSize = -1; // failed
+				done = true;
 			}
 		}
 		else
 		{
 			mDataSize = 0; // no data written
 		}
-
-		return true;
-#endif
+		// Nothing else to do at that point...
+		done = true;
 	}
-	
-	return false;
+
+	// Clean up and exit
+	return done;
 }
 
 //virtual
 bool LLTextureCacheWorker::doWork(S32 param)
 {
-// *TODO reenable disabled apr_pool usage disabled due to maint-render-9 merge breakage -brad
-	//allocate a new local apr_pool
-//	LLAPRPool pool ;
-
-	//save the current mFileAPRPool to avoid breaking anything.
-//	apr_pool_t* old_pool = mCache->getFileAPRPool() ;
-	//make mFileAPRPool to point to the local one
-//	mCache->setFileAPRPool(pool.getAPRPool()) ;
-
 	bool res = false;
 	if (param == 0) // read
 	{
@@ -818,10 +675,6 @@ bool LLTextureCacheWorker::doWork(S32 param)
 	{
 		llassert_always(0);
 	}
-
-	//set mFileAPRPool back, the local one will be released automatically.
-//	mCache->setFileAPRPool(old_pool) ;
-
 	return res;
 }
 
@@ -887,6 +740,7 @@ LLTextureCache::LLTextureCache(bool threaded)
 	  mWorkersMutex(NULL),
 	  mHeaderMutex(NULL),
 	  mListMutex(NULL),
+	  mHeaderAPRFile(NULL),
 	  mReadOnly(FALSE),
 	  mTexturesSizeTotal(0),
 	  mDoPurge(FALSE)
@@ -926,6 +780,9 @@ S32 LLTextureCache::update(U32 max_time_ms)
 		}
 	}
 
+	unlockWorkers(); 
+	
+	// call 'completed' with workers list unlocked (may call readComplete() or writeComplete()
 	for (responder_list_t::iterator iter1 = completed_list.begin();
 		 iter1 != completed_list.end(); ++iter1)
 	{
@@ -934,8 +791,6 @@ S32 LLTextureCache::update(U32 max_time_ms)
 		responder->completed(success);
 	}
 	
-	unlockWorkers();
-	
 	return res;
 }
 
@@ -954,33 +809,48 @@ std::string LLTextureCache::getTextureFileName(const LLUUID& id)
 {
 	std::string idstr = id.asString();
 	std::string delem = gDirUtilp->getDirDelimiter();
-	std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr;
+	std::string filename = mTexturesDirName + delem + idstr[0] + delem + idstr + ".texture";
 	return filename;
 }
 
-bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize)
+bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize)
 {
 	bool res = false;
 	bool purge = false;
-	// Append UUID to end of texture entries
 	{
 		LLMutexLock lock(&mHeaderMutex);
-		size_map_t::iterator iter = mTexturesSizeMap.find(id);
-		if (iter == mTexturesSizeMap.end() || iter->second < bodysize)
+		size_map_t::iterator iter1 = mTexturesSizeMap.find(id);
+		if (iter1 == mTexturesSizeMap.end() || iter1->second < bodysize)
 		{
 			llassert_always(bodysize > 0);
-			Entry* entry = new Entry(id, bodysize, time(NULL));
 
-			LLAPRFile::writeEx(mTexturesDirEntriesFileName,
-								 (U8*)entry, -1, 1*sizeof(Entry),
-								 getLocalAPRFilePool());			
-			delete entry;
-			if (iter != mTexturesSizeMap.end())
+			S32 oldbodysize = 0;
+			if (iter1 != mTexturesSizeMap.end())
+			{
+				oldbodysize = iter1->second;
+			}
+						
+			Entry entry;
+			S32 idx = openAndReadEntry(id, entry, false);
+			if (idx < 0)
+			{
+				// TODO: change to llwarns
+				llerrs << "Failed to open entry: " << id << llendl;
+				removeFromCache(id);
+				return false;
+			}			
+			else if (oldbodysize != entry.mBodySize)
 			{
-				mTexturesSizeTotal -= iter->second;
+				// TODO: change to llwarns
+				llerrs << "Entry mismatch in mTextureSizeMap / mHeaderIDMap"
+					   << " idx=" << idx << " oldsize=" << oldbodysize << " entrysize=" << entry.mBodySize << llendl;
 			}
+			entry.mBodySize = bodysize;
+			writeEntryAndClose(idx, entry);
+			
+			mTexturesSizeTotal -= oldbodysize;
 			mTexturesSizeTotal += bodysize;
-			mTexturesSizeMap[id] = bodysize;
+			
 			if (mTexturesSizeTotal > sCacheMaxTexturesSize)
 			{
 				purge = true;
@@ -995,11 +865,59 @@ bool LLTextureCache::appendToTextureEntryList(const LLUUID& id, S32 bodysize)
 	return res;
 }
 
+//debug
+BOOL LLTextureCache::isInCache(const LLUUID& id) 
+{
+	LLMutexLock lock(&mHeaderMutex);
+	id_map_t::const_iterator iter = mHeaderIDMap.find(id);
+	
+	return (iter != mHeaderIDMap.end()) ;
+}
+
+//debug
+BOOL LLTextureCache::isInLocal(const LLUUID& id) 
+{
+	S32 local_size = 0;
+	std::string local_filename;
+	
+	std::string filename = getLocalFileName(id);	
+	// Is it a JPEG2000 file? 
+	{
+		local_filename = filename + ".j2c";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	// If not, is it a jpeg file?		
+	{
+		local_filename = filename + ".jpg";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	// Hmm... What about a targa file? (used for UI texture mostly)		
+	{
+		local_filename = filename + ".tga";
+		local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+		if (local_size > 0)
+		{
+			return TRUE ;
+		}
+	}
+		
+	return FALSE ;
+}
 //////////////////////////////////////////////////////////////////////////////
 
 //static
 const S32 MAX_REASONABLE_FILE_SIZE = 512*1024*1024; // 512 MB
-F32 LLTextureCache::sHeaderCacheVersion = 1.0f;
+F32 LLTextureCache::sHeaderCacheVersion = 1.3f;
 U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ENTRY_SIZE;
 S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit
 const char* entries_filename = "texture.entries";
@@ -1012,7 +930,6 @@ void LLTextureCache::setDirNames(ELLPath location)
 	mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, entries_filename);
 	mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, cache_filename);
 	mTexturesDirName = gDirUtilp->getExpandedFilename(location, textures_dirname);
-	mTexturesDirEntriesFileName = mTexturesDirName + delem + entries_filename;
 }
 
 void LLTextureCache::purgeCache(ELLPath location)
@@ -1020,7 +937,7 @@ void LLTextureCache::purgeCache(ELLPath location)
 	if (!mReadOnly)
 	{
 		setDirNames(location);
-	
+		llassert_always(mHeaderAPRFile == NULL);
 		LLAPRFile::remove(mHeaderEntriesFileName, getLocalAPRFilePool());
 		LLAPRFile::remove(mHeaderDataFileName, getLocalAPRFilePool());
 	}
@@ -1063,83 +980,317 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only)
 	return max_size; // unused cache space
 }
 
-struct lru_data
+//----------------------------------------------------------------------------
+// mHeaderMutex must be locked for the following functions!
+
+LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset)
+{
+	llassert_always(mHeaderAPRFile == NULL);
+	apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY;
+	mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool());
+	mHeaderAPRFile->seek(APR_SET, offset);
+	return mHeaderAPRFile;
+}
+
+void LLTextureCache::closeHeaderEntriesFile()
+{
+	llassert_always(mHeaderAPRFile != NULL);
+	delete mHeaderAPRFile;
+	mHeaderAPRFile = NULL;
+}
+
+void LLTextureCache::readEntriesHeader()
+{
+	// mHeaderEntriesInfo initializes to default values so safe not to read it
+		llassert_always(mHeaderAPRFile == NULL);
+	if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
+	{
+		LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
+						  getLocalAPRFilePool());
+	}
+}
+
+void LLTextureCache::writeEntriesHeader()
 {
-	lru_data(U32 t, S32 i, const LLUUID& id) { time=t; index=i; uuid=id; }
-	U32 time;
-	S32 index;
-	LLUUID uuid;
-	struct Compare
-	{
-		// lhs < rhs
-		typedef const lru_data* lru_data_ptr;
-		bool operator()(const lru_data_ptr& a, const lru_data_ptr& b) const
+	llassert_always(mHeaderAPRFile == NULL);
+	if (!mReadOnly)
+	{
+		LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
+						   getLocalAPRFilePool());
+	}
+}
+
+static S32 mHeaderEntriesMaxWriteIdx = 0;
+
+S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create)
+{
+	S32 idx = -1;
+	
+	id_map_t::iterator iter1 = mHeaderIDMap.find(id);
+	if (iter1 != mHeaderIDMap.end())
+	{
+		idx = iter1->second;
+	}
+
+	if (idx < 0)
+	{
+		if (create && !mReadOnly)
 		{
-			if(a->time == b->time)
-				return (a->index < b->index);
+			if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries)
+			{
+				// Add an entry to the end of the list
+				idx = mHeaderEntriesInfo.mEntries++;
+
+			}
+			else if (!mFreeList.empty())
+			{
+				idx = *(mFreeList.begin());
+				mFreeList.erase(mFreeList.begin());
+			}
 			else
-				return (a->time >= b->time);
+			{
+				// Look for a still valid entry in the LRU
+				for (std::set<LLUUID>::iterator iter2 = mLRU.begin(); iter2 != mLRU.end();)
+				{
+					std::set<LLUUID>::iterator curiter2 = iter2++;
+					LLUUID oldid = *curiter2;
+					// Erase entry from LRU regardless
+					mLRU.erase(curiter2);
+					// Look up entry and use it if it is valid
+					id_map_t::iterator iter3 = mHeaderIDMap.find(oldid);
+					if (iter3 != mHeaderIDMap.end() && iter3->second >= 0)
+					{
+						idx = iter3->second;
+						mHeaderIDMap.erase(oldid);
+						mTexturesSizeMap.erase(oldid);
+						break;
+					}
+				}
+				// if (idx < 0) at this point, we will rebuild the LRU 
+				//  and retry if called from setHeaderCacheEntry(),
+				//  otherwise this shouldn't happen and will trigger an error
+			}
+			if (idx >= 0)
+			{
+				// Set the header index
+				mHeaderIDMap[id] = idx;
+				llassert_always(mTexturesSizeMap.erase(id) == 0);
+				// Initialize the entry (will get written later)
+				entry.init(id, time(NULL));
+				// Update Header
+				writeEntriesHeader();
+				// Write Entry
+				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+				LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
+				S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
+				llassert_always(bytes_written == sizeof(Entry));
+				mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
+				closeHeaderEntriesFile();
+			}
 		}
-	};				
-};
+	}
+	else
+	{
+		// Remove this entry from the LRU if it exists
+		mLRU.erase(id);
+		// Read the entry
+		S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+		LLAPRFile* aprfile = openHeaderEntriesFile(true, offset);
+		S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry));
+		llassert_always(bytes_read == sizeof(Entry));
+		llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
+		closeHeaderEntriesFile();
+	}
+	return idx;
+}
+
+void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry)
+{
+	if (idx >= 0)
+	{
+		if (!mReadOnly)
+		{
+			entry.mTime = time(NULL);
+			llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
+			if (entry.mBodySize > 0)
+			{
+				mTexturesSizeMap[entry.mID] = entry.mBodySize;
+			}
+// 			llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl;
+			S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+			LLAPRFile* aprfile = openHeaderEntriesFile(false, offset);
+			S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry));
+			llassert_always(bytes_written == sizeof(Entry));
+			mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx);
+			closeHeaderEntriesFile();
+		}
+	}
+}
+
+U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries)
+{
+	U32 num_entries = mHeaderEntriesInfo.mEntries;
+
+	mHeaderIDMap.clear();
+	mTexturesSizeMap.clear();
+	mFreeList.clear();
+	mTexturesSizeTotal = 0;
+
+	LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
+	for (U32 idx=0; idx<num_entries; idx++)
+	{
+		Entry entry;
+		S32 bytes_read = aprfile->read((void*)(&entry), (S32)sizeof(Entry));
+		if (bytes_read < sizeof(Entry))
+		{
+			llwarns << "Corrupted header entries, failed at " << idx << " / " << num_entries << llendl;
+			closeHeaderEntriesFile();
+			purgeAllTextures(false);
+			return 0;
+		}
+		entries.push_back(entry);
+// 		llinfos << "ENTRY: " << entry.mTime << " TEX: " << entry.mID << " IDX: " << idx << " Size: " << entry.mImageSize << llendl;
+		if (entry.mImageSize < 0)
+		{
+			mFreeList.insert(idx);
+		}
+		else
+		{
+			mHeaderIDMap[entry.mID] = idx;
+			if (entry.mBodySize > 0)
+			{
+				mTexturesSizeMap[entry.mID] = entry.mBodySize;
+				mTexturesSizeTotal += entry.mBodySize;
+			}
+			llassert_always(entry.mImageSize == 0 || entry.mImageSize > entry.mBodySize);
+		}
+	}
+	closeHeaderEntriesFile();
+	return num_entries;
+}
+
+void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries)
+{
+	S32 num_entries = entries.size();
+	llassert_always(num_entries == mHeaderEntriesInfo.mEntries);
+	
+	if (!mReadOnly)
+	{
+		LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo));
+		for (S32 idx=0; idx<num_entries; idx++)
+		{
+			S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry));
+			llassert_always(bytes_written == sizeof(Entry));
+		}
+		mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, num_entries-1);
+		closeHeaderEntriesFile();
+	}
+}
+
+//----------------------------------------------------------------------------
 
 // Called from either the main thread or the worker thread
 void LLTextureCache::readHeaderCache()
 {
 	LLMutexLock lock(&mHeaderMutex);
-	mHeaderEntriesInfo.mVersion = 0.f;
-	mHeaderEntriesInfo.mEntries = 0;
-	if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
-	{
-		LLAPRFile::readEx(mHeaderEntriesFileName,
-							(U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-							getLocalAPRFilePool());
-	}
+
+	mLRU.clear(); // always clear the LRU
+
+	readEntriesHeader();
+	
 	if (mHeaderEntriesInfo.mVersion != sHeaderCacheVersion)
 	{
 		if (!mReadOnly)
 		{
-			// Info with 0 entries
-			mHeaderEntriesInfo.mVersion = sHeaderCacheVersion;
-
-			LLAPRFile::writeEx(mHeaderEntriesFileName, 
-								 (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-								 getLocalAPRFilePool());
+			purgeAllTextures(false);
 		}
 	}
 	else
 	{
-		S32 num_entries = mHeaderEntriesInfo.mEntries;
+		std::vector<Entry> entries;
+		U32 num_entries = openAndReadEntries(entries);
 		if (num_entries)
 		{
-			Entry* entries = new Entry[num_entries];
+			U32 empty_entries = 0;
+			typedef std::pair<U32, LLUUID> lru_data_t;
+			std::set<lru_data_t> lru;
+			std::vector<LLUUID> purge_list;
+			for (U32 i=0; i<num_entries; i++)
+			{
+				Entry& entry = entries[i];
+				const LLUUID& id = entry.mID;
+				if (entry.mImageSize < 0)
+				{
+					// This will be in the Free List, don't put it in the LRY
+					++empty_entries;
+				}
+				else
+				{
+					lru.insert(std::make_pair(entry.mTime, id));
+					if (entry.mBodySize > 0)
+					{
+						if (entry.mBodySize > entry.mImageSize)
+						{
+							// Shouldn't happen, failsafe only
+							llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl;
+							purge_list.push_back(id);
+						}
+					}
+				}
+			}
+			if (num_entries > sCacheMaxEntries)
+			{
+				// Special case: cache size was reduced, need to remove entries
+				// Note: After we prune entries, we will call this again and create the LRU
+				U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries;
+				if (entries_to_purge > 0)
+				{
+					for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+					{
+						purge_list.push_back(iter->second);
+						if (--entries_to_purge <= 0)
+							break;
+					}
+				}
+			}
+			else
 			{
-				LLAPRFile::readEx(mHeaderEntriesFileName, 
-								(U8*)entries, sizeof(EntriesInfo), num_entries*sizeof(Entry),
-								getLocalAPRFilePool());
+				S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE);
+				for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+				{
+					mLRU.insert(iter->second);
+// 					llinfos << "LRU: " << iter->first << " : " << iter->second << llendl;
+					if (--lru_entries <= 0)
+						break;
+				}
 			}
-			typedef std::set<lru_data*, lru_data::Compare> lru_set_t;
-			lru_set_t lru;
-			for (S32 i=0; i<num_entries; i++)
+			
+			if (purge_list.size() > 0)
 			{
-				if (entries[i].mSize >= 0) // -1 indicates erased entry, skip
+				for (std::vector<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
 				{
-					const LLUUID& id = entries[i].mID;
-					lru.insert(new lru_data(entries[i].mTime, i, id));
-					mHeaderIDMap[id] = i;
+					removeFromCache(*iter);
 				}
+				// If we removed any entries, we need to rebuild the entries list,
+				// write the header, and call this again
+				std::vector<Entry> new_entries;
+				for (U32 i=0; i<num_entries; i++)
+				{
+					const Entry& entry = entries[i];
+					if (entry.mImageSize >=0)
+					{
+						new_entries.push_back(entry);
+					}
+				}
+				llassert_always(new_entries.size() <= sCacheMaxEntries);
+				mHeaderEntriesInfo.mEntries = new_entries.size();
+				writeEntriesAndClose(new_entries);
+				readHeaderCache(); // repeat with new entries file
 			}
-			mLRU.clear();
-			S32 lru_entries = sCacheMaxEntries / 10;
-			for (lru_set_t::iterator iter = lru.begin(); iter != lru.end(); ++iter)
+			else
 			{
-				lru_data* data = *iter;
-				mLRU[data->index] = data->uuid;
-				if (--lru_entries <= 0)
-					break;
+				writeEntriesAndClose(entries);
 			}
-			for_each(lru.begin(), lru.end(), DeletePointer());
-			delete[] entries;
 		}
 	}
 }
@@ -1162,13 +1313,21 @@ void LLTextureCache::purgeAllTextures(bool purge_directories)
 				LLFile::rmdir(dirname);
 			}
 		}
-		LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool());
 		if (purge_directories)
 		{
 			LLFile::rmdir(mTexturesDirName);
 		}
 	}
+	mHeaderIDMap.clear();
 	mTexturesSizeMap.clear();
+	mTexturesSizeTotal = 0;
+	mFreeList.clear();
+	mTexturesSizeTotal = 0;
+
+	// Info with 0 entries
+	mHeaderEntriesInfo.mVersion = sHeaderCacheVersion;
+	mHeaderEntriesInfo.mEntries = 0;
+	writeEntriesHeader();
 }
 
 void LLTextureCache::purgeTextures(bool validate)
@@ -1182,51 +1341,37 @@ void LLTextureCache::purgeTextures(bool validate)
 	LLAppViewer::instance()->pauseMainloopTimeout();
 
 	LLMutexLock lock(&mHeaderMutex);
-	
-	S32 filesize = LLAPRFile::size(mTexturesDirEntriesFileName, getLocalAPRFilePool());
-	S32 num_entries = filesize / sizeof(Entry);
-	if (num_entries * (S32)sizeof(Entry) != filesize)
-	{
-		LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
-		purgeAllTextures(false);
-		return;
-	}
-	if (num_entries == 0)
+
+	llinfos << "TEXTURE CACHE: Purging." << llendl;
+
+	// Read the entries list
+	std::vector<Entry> entries;
+	U32 num_entries = openAndReadEntries(entries);
+	if (!num_entries)
 	{
-		return; // nothing to do
+		writeEntriesAndClose(entries);
+		return; // nothing to purge
 	}
 	
-	Entry* entries = new Entry[num_entries];
-	S32 bytes_read = LLAPRFile::readEx(mTexturesDirEntriesFileName, 
-										 (U8*)entries, 0, num_entries*sizeof(Entry),
-										 getLocalAPRFilePool());	
-	if (bytes_read != filesize)
-	{
-		LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
-		purgeAllTextures(false);
-		return;
-	}
-	
-	LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL;
-	
-	std::map<LLUUID, S32> entry_idx_map;
-	S64 total_size = 0;
-	for (S32 idx=0; idx<num_entries; idx++)
-	{
-		const LLUUID& id = entries[idx].mID;
- 		LL_DEBUGS("TextureCache") << "Entry: " << id << " Size: " << entries[idx].mSize << " Time: " << entries[idx].mTime << LL_ENDL;
-		std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id);
-		if (iter != entry_idx_map.end())
+	// Use mTexturesSizeMap to collect UUIDs of textures with bodies
+	typedef std::set<std::pair<U32,S32> > time_idx_set_t;
+	std::set<std::pair<U32,S32> > time_idx_set;
+	for (size_map_t::iterator iter1 = mTexturesSizeMap.begin();
+		 iter1 != mTexturesSizeMap.end(); ++iter1)
+	{
+		if (iter1->second > 0)
 		{
-			// Newer entry replacing older entry
-			S32 pidx = iter->second;
-			total_size -= entries[pidx].mSize;
-			entries[pidx].mSize = 0; // flag: skip older entry
+			id_map_t::iterator iter2 = mHeaderIDMap.find(iter1->first);
+			if (iter2 != mHeaderIDMap.end())
+			{
+				S32 idx = iter2->second;
+				time_idx_set.insert(std::make_pair(entries[idx].mTime, idx));
+// 				llinfos << "TIME: " << entries[idx].mTime << " TEX: " << entries[idx].mID << " IDX: " << idx << " Size: " << entries[idx].mImageSize << llendl;
+			}
 		}
-		entry_idx_map[id] = idx;
-		total_size += entries[idx].mSize;
 	}
-
+	
+	// Validate 1/256th of the files on startup
 	U32 validate_idx = 0;
 	if (validate)
 	{
@@ -1235,19 +1380,17 @@ void LLTextureCache::purgeTextures(bool validate)
 		gSavedSettings.setU32("CacheValidateCounter", next_idx);
 		LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL;
 	}
-	
-	S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10;
+
+	S64 cache_size = mTexturesSizeTotal;
+	S64 purged_cache_size = (sCacheMaxTexturesSize * (S64)((1.f-TEXTURE_CACHE_PURGE_AMOUNT)*100)) / 100;
 	S32 purge_count = 0;
-	S32 next_idx = 0;
-	for (S32 idx=0; idx<num_entries; idx++)
+	for (time_idx_set_t::iterator iter = time_idx_set.begin();
+		 iter != time_idx_set.end(); ++iter)
 	{
-		if (entries[idx].mSize == 0)
-		{
-			continue;
-		}
+		S32 idx = iter->second;
 		bool purge_entry = false;
 		std::string filename = getTextureFileName(entries[idx].mID);
-		if (total_size >= min_cache_size)
+		if (cache_size >= purged_cache_size)
 		{
 			purge_entry = true;
 		}
@@ -1257,60 +1400,44 @@ void LLTextureCache::purgeTextures(bool validate)
 			U32 uuididx = entries[idx].mID.mData[0];
 			if (uuididx == validate_idx)
 			{
- 				LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL;
+ 				LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mBodySize << LL_ENDL;
 				S32 bodysize = LLAPRFile::size(filename, getLocalAPRFilePool());
-				if (bodysize != entries[idx].mSize)
+				if (bodysize != entries[idx].mBodySize)
 				{
-					LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize
+					LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mBodySize
 							<< filename << LL_ENDL;
 					purge_entry = true;
 				}
 			}
 		}
+		else
+		{
+			break;
+		}
+		
 		if (purge_entry)
 		{
 			purge_count++;
 	 		LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
 			LLAPRFile::remove(filename, getLocalAPRFilePool());
-			total_size -= entries[idx].mSize;
-			entries[idx].mSize = 0;
-		}
-		else
-		{
-			if (next_idx != idx)
-			{
-				entries[next_idx] = entries[idx];
-			}
-			++next_idx;
+			cache_size -= entries[idx].mBodySize;
+			mTexturesSizeTotal -= entries[idx].mBodySize;
+			entries[idx].mBodySize = 0;
+			mTexturesSizeMap.erase(entries[idx].mID);
 		}
 	}
-	num_entries = next_idx;
 
 	LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL;
-	
-	LLAPRFile::remove(mTexturesDirEntriesFileName, getLocalAPRFilePool());
-	LLAPRFile::writeEx(mTexturesDirEntriesFileName, 
-						 (U8*)&entries[0], 0, num_entries*sizeof(Entry),
-						 getLocalAPRFilePool());
-	
-	mTexturesSizeTotal = 0;
-	mTexturesSizeMap.clear();
-	for (S32 idx=0; idx<num_entries; idx++)
-	{
-		mTexturesSizeMap[entries[idx].mID] = entries[idx].mSize;
-		mTexturesSizeTotal += entries[idx].mSize;
-	}
-	llassert(mTexturesSizeTotal == total_size);
-	
-	delete[] entries;
 
+	writeEntriesAndClose(entries);
+	
 	// *FIX:Mani - watchdog back on.
 	LLAppViewer::instance()->resumeMainloopTimeout();
 	
 	LL_INFOS("TextureCache") << "TEXTURE CACHE:"
 			<< " PURGED: " << purge_count
 			<< " ENTRIES: " << num_entries
-			<< " CACHE SIZE: " << total_size / 1024*1024 << " MB"
+			<< " CACHE SIZE: " << mTexturesSizeTotal / 1024*1024 << " MB"
 			<< llendl;
 }
 
@@ -1340,78 +1467,39 @@ LLTextureCacheWorker* LLTextureCache::getWriter(handle_t handle)
 }
 
 //////////////////////////////////////////////////////////////////////////////
-
 // Called from work thread
-S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize)
-{
-	bool retry = false;
-	S32 idx = -1;
 
+// Reads imagesize from the header, updates timestamp
+S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize)
+{
+	LLMutexLock lock(&mHeaderMutex);
+	Entry entry;
+	S32 idx = openAndReadEntry(id, entry, false);
+	if (idx >= 0)
 	{
-		LLMutexLock lock(&mHeaderMutex);
-		id_map_t::iterator iter = mHeaderIDMap.find(id);
-		if (iter != mHeaderIDMap.end())
-		{
-			idx = iter->second;
-		}
-		else if (touch && !mReadOnly)
-		{
-			if (mHeaderEntriesInfo.mEntries < sCacheMaxEntries)
-			{
-				// Add an entry
-				idx = mHeaderEntriesInfo.mEntries++;
-				mHeaderIDMap[id] = idx;
-				// Update Info
-				LLAPRFile::writeEx(mHeaderEntriesFileName, 
-									(U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
-									getLocalAPRFilePool());
-			}
-			else if (!mLRU.empty())
-			{
-				idx = mLRU.begin()->first; // will be erased below
-				const LLUUID& oldid = mLRU.begin()->second;
-				mHeaderIDMap.erase(oldid);
-				mTexturesSizeMap.erase(oldid);
-				mHeaderIDMap[id] = idx;
-			}
-			else
-			{
-				idx = -1;
-				retry = true;
-			}
-		}
-		if (idx >= 0)
-		{
-			if (touch && !mReadOnly)
-			{
-				// Update the lru entry
-				mLRU.erase(idx);
-				llassert_always(imagesize && *imagesize > 0);
-				Entry* entry = new Entry(id, *imagesize, time(NULL));
-				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
-				LLAPRFile::writeEx(mHeaderEntriesFileName, 
-									 (U8*)entry, offset, sizeof(Entry),
-									 getLocalAPRFilePool());
-				delete entry;
-			}
-			else if (imagesize)
-			{
-				// Get the image size
-				Entry entry;
-				S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
+		imagesize = entry.mImageSize;
+		writeEntryAndClose(idx, entry); // updates time
+	}
+	return idx;
+}
 
-				LLAPRFile::readEx(mHeaderEntriesFileName, 
-									(U8*)&entry, offset, sizeof(Entry),
-									getLocalAPRFilePool());
-				*imagesize = entry.mSize;
-			}
-		}
+// Writes imagesize to the header, updates timestamp
+S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize)
+{
+	LLMutexLock lock(&mHeaderMutex);
+	llassert_always(imagesize >= 0);
+	Entry entry;
+	S32 idx = openAndReadEntry(id, entry, true);
+	if (idx >= 0)
+	{
+		entry.mImageSize = imagesize;
+		writeEntryAndClose(idx, entry);
 	}
-	if (retry)
+	else // retry
 	{
-		readHeaderCache(); // updates the lru
+		readHeaderCache(); // We couldn't write an entry, so refresh the LRU
 		llassert_always(!mLRU.empty() || mHeaderEntriesInfo.mEntries < sCacheMaxEntries);
-		idx = getHeaderCacheEntry(id, touch, imagesize); // assert above ensures no inf. recursion
+		idx = setHeaderCacheEntry(id, imagesize); // assert above ensures no inf. recursion
 	}
 	return idx;
 }
@@ -1427,8 +1515,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const std::string& filena
 	//  so let the thread handle it
 	LLMutexLock lock(&mWorkersMutex);
 	LLTextureCacheWorker* worker = new LLTextureCacheLocalFileWorker(this, priority, filename, id,
-															NULL, size, offset, 0,
-															responder);
+																	 NULL, size, offset, 0,
+																	 responder);
 	handle_t handle = worker->read();
 	mReaders[handle] = worker;
 	return handle;
@@ -1441,8 +1529,8 @@ LLTextureCache::handle_t LLTextureCache::readFromCache(const LLUUID& id, U32 pri
 	//  so let the thread handle it
 	LLMutexLock lock(&mWorkersMutex);
 	LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
-															NULL, size, offset, 0,
-															responder);
+																  NULL, size, offset,
+																  0, responder);
 	handle_t handle = worker->read();
 	mReaders[handle] = worker;
 	return handle;
@@ -1453,7 +1541,7 @@ bool LLTextureCache::readComplete(handle_t handle, bool abort)
 {
 	lockWorkers();
 	handle_map_t::iterator iter = mReaders.find(handle);
-	llassert_always(iter != mReaders.end());
+	llassert_always(iter != mReaders.end() || abort);
 	LLTextureCacheWorker* worker = iter->second;
 	bool res = worker->complete();
 	if (res || abort)
@@ -1487,19 +1575,13 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
 		purgeTextures(false);
 		mDoPurge = FALSE;
 	}
-	if (datasize >= TEXTURE_CACHE_ENTRY_SIZE)
-	{
-		LLMutexLock lock(&mWorkersMutex);
-		llassert_always(imagesize > 0);
-		LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
-																data, datasize, 0,
-																imagesize, responder);
-		handle_t handle = worker->write();
-		mWriters[handle] = worker;
-		return handle;
-	}
-	delete responder;
-	return LLWorkerThread::nullHandle();
+	LLMutexLock lock(&mWorkersMutex);
+	LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
+																  data, datasize, 0,
+																  imagesize, responder);
+	handle_t handle = worker->write();
+	mWriters[handle] = worker;
+	return handle;
 }
 
 bool LLTextureCache::writeComplete(handle_t handle, bool abort)
@@ -1542,25 +1624,17 @@ void LLTextureCache::addCompleted(Responder* responder, bool success)
 
 bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id)
 {
-	if (mReadOnly)
-	{
-		return false;
-	}
-	LLMutexLock lock(&mHeaderMutex);
-	id_map_t::iterator iter = mHeaderIDMap.find(id);
-	if (iter != mHeaderIDMap.end())
+	if (!mReadOnly)
 	{
-		S32 idx = iter->second;
+		LLMutexLock lock(&mHeaderMutex);
+		Entry entry;
+		S32 idx = openAndReadEntry(id, entry, false);
 		if (idx >= 0)
 		{
-			Entry* entry = new Entry(id, -1, time(NULL));
-			S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry);
-
-			LLAPRFile::writeEx(mHeaderEntriesFileName,
-								 (U8*)entry, offset, sizeof(Entry),
-								 getLocalAPRFilePool());			
-			delete entry;
-			mLRU[idx] = id;
+			entry.mImageSize = -1;
+			entry.mBodySize = 0;
+			writeEntryAndClose(idx, entry);
+			mFreeList.insert(idx);
 			mHeaderIDMap.erase(id);
 			mTexturesSizeMap.erase(id);
 			return true;
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 68b1458e9a80e0443802543cd4babe37114aea81..bc9c988648baeca9bdfdabbf7bf2a86397f67b73 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -48,6 +48,27 @@ class LLTextureCache : public LLWorkerThread
 	friend class LLTextureCacheRemoteWorker;
 	friend class LLTextureCacheLocalFileWorker;
 
+private:
+	// Entries
+	struct EntriesInfo
+	{
+		EntriesInfo() : mVersion(0.f), mEntries(0) {}
+		F32 mVersion;
+		U32 mEntries;
+	};
+	struct Entry
+	{
+		Entry() {}
+		Entry(const LLUUID& id, S32 imagesize, S32 bodysize, U32 time) :
+			mID(id), mImageSize(imagesize), mBodySize(bodysize), mTime(time) {}
+		void init(const LLUUID& id, U32 time) { mID = id, mImageSize = 0; mBodySize = 0; mTime = time; }
+		LLUUID mID; // 16 bytes
+		S32 mImageSize; // total size of image if known
+		S32 mBodySize; // size of body file in body cache
+		U32 mTime; // seconds since 1/1/1970
+	};
+
+	
 public:
 
 	class Responder : public LLResponder
@@ -106,10 +127,16 @@ class LLTextureCache : public LLWorkerThread
 	// debug
 	S32 getNumReads() { return mReaders.size(); }
 	S32 getNumWrites() { return mWriters.size(); }
+	S64 getUsage() { return mTexturesSizeTotal; }
+	S64 getMaxUsage() { return sCacheMaxTexturesSize; }
+	U32 getEntries() { return mHeaderEntriesInfo.mEntries; }
+	U32 getMaxEntries() { return sCacheMaxEntries; };
+	BOOL isInCache(const LLUUID& id) ;
+	BOOL isInLocal(const LLUUID& id) ;
 
 protected:
 	// Accessed by LLTextureCacheWorker
-	bool appendToTextureEntryList(const LLUUID& id, S32 size);
+	bool updateTextureEntryList(const LLUUID& id, S32 size);
 	std::string getLocalFileName(const LLUUID& id);
 	std::string getTextureFileName(const LLUUID& id);
 	void addCompleted(Responder* responder, bool success);
@@ -122,7 +149,16 @@ class LLTextureCache : public LLWorkerThread
 	void readHeaderCache();
 	void purgeAllTextures(bool purge_directories);
 	void purgeTextures(bool validate);
-	S32 getHeaderCacheEntry(const LLUUID& id, bool touch, S32* imagesize = NULL);
+	LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset);
+	void closeHeaderEntriesFile();
+	void readEntriesHeader();
+	void writeEntriesHeader();
+	S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create);
+	void writeEntryAndClose(S32 idx, Entry& entry);
+	U32 openAndReadEntries(std::vector<Entry>& entries);
+	void writeEntriesAndClose(const std::vector<Entry>& entries);
+	S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize);
+	S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize);
 	bool removeHeaderCacheEntry(const LLUUID& id);
 	void lockHeaders() { mHeaderMutex.lock(); }
 	void unlockHeaders() { mHeaderMutex.unlock(); }
@@ -132,6 +168,7 @@ class LLTextureCache : public LLWorkerThread
 	LLMutex mWorkersMutex;
 	LLMutex mHeaderMutex;
 	LLMutex mListMutex;
+	LLAPRFile* mHeaderAPRFile;
 	
 	typedef std::map<handle_t, LLTextureCacheWorker*> handle_map_t;
 	handle_map_t mReaders;
@@ -145,42 +182,28 @@ class LLTextureCache : public LLWorkerThread
 	
 	BOOL mReadOnly;
 	
-	// Entries
-	struct EntriesInfo
-	{
-		F32 mVersion;
-		U32 mEntries;
-	};
-	struct Entry
-	{
-		Entry() {}
-		Entry(const LLUUID& id, S32 size, U32 time) : mID(id), mSize(size), mTime(time) {}
-		LLUUID mID; // 128 bits
-		S32 mSize; // total size of image if known (NOT size cached)
-		U32 mTime; // seconds since 1/1/1970
-	};
-
 	// HEADERS (Include first mip)
 	std::string mHeaderEntriesFileName;
 	std::string mHeaderDataFileName;
 	EntriesInfo mHeaderEntriesInfo;
-	typedef std::map<S32,LLUUID> index_map_t;
-	index_map_t mLRU; // index, id; stored as a map for fast removal
+	std::set<S32> mFreeList; // deleted entries
+	std::set<LLUUID> mLRU;
 	typedef std::map<LLUUID,S32> id_map_t;
 	id_map_t mHeaderIDMap;
 
 	// BODIES (TEXTURES minus headers)
 	std::string mTexturesDirName;
-	std::string mTexturesDirEntriesFileName;
 	typedef std::map<LLUUID,S32> size_map_t;
 	size_map_t mTexturesSizeMap;
 	S64 mTexturesSizeTotal;
 	LLAtomic32<BOOL> mDoPurge;
-	
+
 	// Statics
 	static F32 sHeaderCacheVersion;
 	static U32 sCacheMaxEntries;
 	static S64 sCacheMaxTexturesSize;
 };
 
+extern const S32 TEXTURE_CACHE_ENTRY_SIZE;
+
 #endif // LL_LLTEXTURECACHE_H
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 6391e5b8b2e96fec7f347b9f8d696885eed55b77..f8711cefb5ae317113a470873170f84a302ea8ce 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -47,7 +47,9 @@
 #include "llfolderview.h"
 #include "llfoldervieweventlistener.h"
 #include "llinventory.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "lllineeditor.h"
 #include "llui.h"
@@ -424,7 +426,7 @@ BOOL LLFloaterTexturePicker::postBuild()
 		mInventoryPanel->getRootFolder()->getFilter()->markDefault();
 
 		// Commented out to stop opening all folders with textures
-		// mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE);
+		// mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE);
 
 		// don't put keyboard focus on selected item, because the selection callback
 		// will assume that this was user input
@@ -527,7 +529,7 @@ void LLFloaterTexturePicker::draw()
 		mTexturep = NULL;
 		if(mImageAssetID.notNull())
 		{
-			mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
+			mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);
 			mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 		}
 		else if (!mFallbackImageName.empty())
@@ -1071,7 +1073,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
 	{
 		showPicker(FALSE);
 		//grab textures first...
-		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE));
+		gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE));
 		//...then start full inventory fetch.
 		gInventory.startBackgroundFetch();
 		handled = TRUE;
@@ -1190,7 +1192,7 @@ void LLTextureCtrl::draw()
 	}
 	else if (!mImageAssetID.isNull())
 	{
-		mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO);
+		mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);
 		mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 	}
 	else if (!mFallbackImageName.empty())
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 88fc7f98c01480b909f155eae7fadafdf6696059..c918f988952ae5cda09819a785abd3036df1bfb7 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -32,108 +32,35 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include <iostream>
+
 #include "llstl.h"
 
 #include "lltexturefetch.h"
 
 #include "llcurl.h"
+#include "lldir.h"
 #include "llhttpclient.h"
+#include "llhttpstatuscodes.h"
 #include "llimage.h"
 #include "llimageworker.h"
 #include "llworkerthread.h"
 
 #include "llagent.h"
 #include "lltexturecache.h"
+#include "llviewercontrol.h"
 #include "llviewertexturelist.h"
 #include "llviewertexture.h"
 #include "llviewerregion.h"
+#include "llworld.h"
 
 //////////////////////////////////////////////////////////////////////////////
-//static
 class LLTextureFetchWorker : public LLWorkerClass
 {
-friend class LLTextureFetch;
-
-private:
-#if 0
-	class URLResponder : public LLHTTPClient::Responder
-	{
-	public:
-		URLResponder(LLTextureFetch* fetcher, const LLUUID& id)
-			: mFetcher(fetcher), mID(id)
-		{
-		}
-		~URLResponder()
-		{
-		}
-		virtual void error(U32 status, const std::string& reason)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
-// 				llwarns << "LLTextureFetchWorker::URLResponder::error " << status << ": " << reason << llendl;
- 				worker->callbackURLReceived(LLSD(), false);
-			}
-			mFetcher->unlockQueue();
-		}
-		virtual void result(const LLSD& content)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
- 				worker->callbackURLReceived(content, true);
-			}
-			mFetcher->unlockQueue();
-		}
-	private:
-		LLTextureFetch* mFetcher;
-		LLUUID mID;
-	};
-
-	class HTTPGetResponder : public LLHTTPClient::Responder
-	{
-	public:
-		HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id)
-			: mFetcher(fetcher), mID(id)
-		{
-		}
-		~HTTPGetResponder()
-		{
-		}
-		virtual void completed(U32 status, const std::stringstream& content)
-		{
-			mFetcher->lockQueue();
-			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
-			if (worker)
-			{
-				const std::string& cstr = content.str();
-				if (200 <= status &&  status < 300)
-				{
-					if (203 == status) // partial information (i.e. last block)
-					{
-						worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), true);
-					}
-					else
-					{
-						worker->callbackHttpGet((U8*)cstr.c_str(), cstr.length(), false);
-					}
-				}
-				else
-				{
-// 					llinfos << "LLTextureFetchWorker::HTTPGetResponder::error " << status << ": " << cstr << llendl;
-					worker->callbackHttpGet(NULL, -1, true);
-				}
-			}
-			mFetcher->unlockQueue();
-		}
-	private:
-		LLTextureFetch* mFetcher;
-		LLUUID mID;
-	};
-#endif
+	friend class LLTextureFetch;
+	friend class HTTPGetResponder;
 	
+private:
 	class CacheReadResponder : public LLTextureCache::ReadResponder
 	{
 	public:
@@ -179,20 +106,20 @@ friend class LLTextureFetch;
 		LLUUID mID;
 	};
 	
-	class DecodeResponder : public LLResponder
+	class DecodeResponder : public LLImageDecodeThread::Responder
 	{
 	public:
 		DecodeResponder(LLTextureFetch* fetcher, const LLUUID& id, LLTextureFetchWorker* worker)
 			: mFetcher(fetcher), mID(id), mWorker(worker)
 		{
 		}
-		virtual void completed(bool success)
+		virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux)
 		{
 			mFetcher->lockQueue();
 			LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
 			if (worker)
 			{
- 				worker->callbackDecoded(success);
+ 				worker->callbackDecoded(success, raw, aux);
 			}
 			mFetcher->unlockQueue();
 		}
@@ -227,37 +154,45 @@ friend class LLTextureFetch;
 	~LLTextureFetchWorker();
 	void relese() { --mActiveCount; }
 
+	void callbackHttpGet(const LLChannelDescriptors& channels,
+						 const LLIOPipe::buffer_ptr_t& buffer,
+						 bool last_block, bool success);
+	void callbackCacheRead(bool success, LLImageFormatted* image,
+						   S32 imagesize, BOOL islocal);
+	void callbackCacheWrite(bool success);
+	void callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux);
+	
+	void setGetStatus(U32 status, const std::string& reason)
+	{
+		mGetStatus = status;
+		mGetReason = reason;
+	}
+
 protected:
 	LLTextureFetchWorker(LLTextureFetch* fetcher, const LLUUID& id, const LLHost& host,
 						 F32 priority, S32 discard, S32 size);
+	LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host,
+						 F32 priority, S32 discard, S32 size);
 
 private:
 	/*virtual*/ void startWork(S32 param); // called from addWork() (MAIN THREAD)
 	/*virtual*/ void endWork(S32 param, bool aborted); // called from doWork() (MAIN THREAD)
 
-	virtual std::string getName() { return LLStringUtil::null; }
 	void resetFormattedData();
 	
 	void setImagePriority(F32 priority);
 	void setDesiredDiscard(S32 discard, S32 size);
 	bool insertPacket(S32 index, U8* data, S32 size);
 	void clearPackets();
+	void setupPacketData();
 	U32 calcWorkPriority();
 	void removeFromCache();
 	bool processSimulatorPackets();
-	bool decodeImage();
 	bool writeToCacheComplete();
 	
-	void lockWorkData() { mWorkMutex.lock(); }
-	void unlockWorkData() { mWorkMutex.unlock(); }
+	void lockWorkMutex() { mWorkMutex.lock(); }
+	void unlockWorkMutex() { mWorkMutex.unlock(); }
 
-	void callbackURLReceived(const LLSD& data, bool success);
-	void callbackHttpGet(U8* data, S32 data_size, bool last_block);
-	void callbackCacheRead(bool success, LLImageFormatted* image,
-						   S32 imagesize, BOOL islocal);
-	void callbackCacheWrite(bool success);
-	void callbackDecoded(bool success);
-	
 private:
 	enum e_state // mState
 	{
@@ -268,8 +203,8 @@ friend class LLTextureFetch;
 		CACHE_POST,
 		LOAD_FROM_NETWORK,
 		LOAD_FROM_SIMULATOR,
-		LOAD_FROM_HTTP_GET_URL,
-		LOAD_FROM_HTTP_GET_DATA,
+		SEND_HTTP_REQ,
+		WAIT_HTTP_REQ,
 		DECODE_IMAGE,
 		DECODE_IMAGE_UPDATE,
 		WRITE_TO_CACHE,
@@ -280,19 +215,17 @@ friend class LLTextureFetch;
 	{
 		UNSENT = 0,
 		QUEUED = 1,
-		SENT_SIM = 2,
-		SENT_URL = 3,
-		SENT_HTTP = 4
+		SENT_SIM = 2
 	};
 	static const char* sStateDescs[];
 	e_state mState;
 	LLTextureFetch* mFetcher;
-	LLImageWorker* mImageWorker;
 	LLPointer<LLImageFormatted> mFormattedImage;
 	LLPointer<LLImageRaw> mRawImage;
 	LLPointer<LLImageRaw> mAuxImage;
 	LLUUID mID;
 	LLHost mHost;
+	std::string mUrl;
 	U8 mType;
 	F32 mImagePriority;
 	U32 mWorkPriority;
@@ -314,15 +247,18 @@ friend class LLTextureFetch;
 	S32 mCachedSize;
 	BOOL mLoaded;
 	e_request_state mSentRequest;
+	handle_t mDecodeHandle;
 	BOOL mDecoded;
 	BOOL mWritten;
 	BOOL mNeedsAux;
 	BOOL mHaveAllData;
 	BOOL mInLocalCache;
+	S32 mHTTPFailCount;
 	S32 mRetryAttempt;
-	std::string mURL;
 	S32 mActiveCount;
-
+	U32 mGetStatus;
+	std::string mGetReason;
+	
 	// Work Data
 	LLMutex mWorkMutex;
 	struct PacketData
@@ -340,25 +276,79 @@ friend class LLTextureFetch;
 	U8 mImageCodec;
 };
 
-class LLTextureFetchLocalFileWorker : public LLTextureFetchWorker
-{
-friend class LLTextureFetch;
-
-protected:
-	LLTextureFetchLocalFileWorker(LLTextureFetch* fetcher, const std::string& filename, const LLUUID& id, const LLHost& host,
-						 F32 priority, S32 discard, S32 size)
-		:	LLTextureFetchWorker(fetcher, id, host, priority, discard, size),
-			mFileName(filename)
-	{}
+//////////////////////////////////////////////////////////////////////////////
 
-private:
-	/*virtual*/ std::string getName() { return mFileName; }
+class HTTPGetResponder : public LLCurl::Responder
+{
+	LOG_CLASS(HTTPGetResponder);
+public:
+	HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset)
+		: mFetcher(fetcher), mID(id), mStartTime(startTime), mRequestedSize(requestedSize), mOffset(offset)
+	{
+	}
+	~HTTPGetResponder()
+	{
+	}
 
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+		{
+			mFetcher->mTextureInfo.setRequestStartTime(mID, mStartTime);
+			U64 timeNow = LLTimer::getTotalTime();
+			mFetcher->mTextureInfo.setRequestType(mID, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+			mFetcher->mTextureInfo.setRequestSize(mID, mRequestedSize);
+			mFetcher->mTextureInfo.setRequestOffset(mID, mOffset);
+			mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow);
+		}
 
+		lldebugs << "HTTP COMPLETE: " << mID << llendl;
+		mFetcher->lockQueue();
+		LLTextureFetchWorker* worker = mFetcher->getWorker(mID);
+		if (worker)
+		{
+			bool success = false;
+			bool partial = false;
+			if (200 <= status &&  status < 300)
+			{
+				success = true;
+				if (203 == status) // partial information (i.e. last block)
+				{
+					partial = true;
+				}
+			}
+			else
+			{
+				worker->setGetStatus(status, reason);
+// 				llwarns << status << ": " << reason << llendl;
+			}
+			if (!success)
+			{
+				worker->setGetStatus(status, reason);
+// 				llwarns << "CURL GET FAILED, status:" << status << " reason:" << reason << llendl;
+			}
+			mFetcher->removeFromHTTPQueue(mID);
+			worker->callbackHttpGet(channels, buffer, partial, success);
+		}
+		else
+		{
+			mFetcher->removeFromHTTPQueue(mID);
+ 			llwarns << "Worker not found: " << mID << llendl;
+		}
+		mFetcher->unlockQueue();
+	}
+	
 private:
-	std::string mFileName;
+	LLTextureFetch* mFetcher;
+	LLUUID mID;
+	U64 mStartTime;
+	S32 mRequestedSize;
+	U32 mOffset;
 };
 
+//////////////////////////////////////////////////////////////////////////////
 
 //static
 const char* LLTextureFetchWorker::sStateDescs[] = {
@@ -368,8 +358,8 @@ const char* LLTextureFetchWorker::sStateDescs[] = {
 	"CACHE_POST",
 	"LOAD_FROM_NETWORK",
 	"LOAD_FROM_SIMULATOR",
-	"LOAD_FROM_HTTP_URL",
-	"LOAD_FROM_HTTP_DATA",
+	"SEND_HTTP_REQ",
+	"WAIT_HTTP_REQ",
 	"DECODE_IMAGE",
 	"DECODE_IMAGE_UPDATE",
 	"WRITE_TO_CACHE",
@@ -380,6 +370,7 @@ const char* LLTextureFetchWorker::sStateDescs[] = {
 // called from MAIN THREAD
 
 LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
+										   const std::string& url, // Optional URL
 										   const LLUUID& id,	// Image UUID
 										   const LLHost& host,	// Simulator host
 										   F32 priority,		// Priority
@@ -388,9 +379,9 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	: LLWorkerClass(fetcher, "TextureFetch"),
 	  mState(INIT),
 	  mFetcher(fetcher),
-	  mImageWorker(NULL),
 	  mID(id),
 	  mHost(host),
+	  mUrl(url),
 	  mImagePriority(priority),
 	  mWorkPriority(0),
 	  mRequestedPriority(0.f),
@@ -404,18 +395,21 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
 	  mBuffer(NULL),
 	  mBufferSize(0),
 	  mRequestedSize(0),
-	  mDesiredSize(FIRST_PACKET_SIZE),
+	  mDesiredSize(TEXTURE_CACHE_ENTRY_SIZE),
 	  mFileSize(0),
 	  mCachedSize(0),
 	  mLoaded(FALSE),
 	  mSentRequest(UNSENT),
+	  mDecodeHandle(0),
 	  mDecoded(FALSE),
 	  mWritten(FALSE),
 	  mNeedsAux(FALSE),
 	  mHaveAllData(FALSE),
 	  mInLocalCache(FALSE),
+	  mHTTPFailCount(0),
 	  mRetryAttempt(0),
 	  mActiveCount(0),
+	  mGetStatus(0),
 	  mWorkMutex(NULL),
 	  mFirstPacket(0),
 	  mLastPacket(-1),
@@ -440,7 +434,7 @@ LLTextureFetchWorker::~LLTextureFetchWorker()
 // 			<< " Requested=" << mRequestedDiscard
 // 			<< " Desired=" << mDesiredDiscard << llendl;
 	llassert_always(!haveWork());
-	lockWorkData();
+	lockWorkMutex();
 	if (mCacheReadHandle != LLTextureCache::nullHandle())
 	{
 		mFetcher->mTextureCache->readComplete(mCacheReadHandle, true);
@@ -449,13 +443,9 @@ LLTextureFetchWorker::~LLTextureFetchWorker()
 	{
 		mFetcher->mTextureCache->writeComplete(mCacheWriteHandle, true);
 	}
-	if (mImageWorker)
-	{
-		mImageWorker->scheduleDelete();
-	}
 	mFormattedImage = NULL;
 	clearPackets();
-	unlockWorkData();
+	unlockWorkMutex();
 }
 
 void LLTextureFetchWorker::clearPackets()
@@ -467,6 +457,38 @@ void LLTextureFetchWorker::clearPackets()
 	mFirstPacket = 0;
 }
 
+void LLTextureFetchWorker::setupPacketData()
+{
+	S32 data_size = 0;
+	if (mFormattedImage.notNull())
+	{
+		data_size = mFormattedImage->getDataSize();
+	}
+	if (data_size > 0)
+	{
+		// Only used for simulator requests
+		mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
+		if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
+		{
+			llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl;
+			removeFromCache();
+			resetFormattedData();
+			clearPackets();
+		}
+		else if (mFileSize > 0)
+		{
+			mLastPacket = mFirstPacket-1;
+			mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1;
+		}
+		else
+		{
+			// This file was cached using HTTP so we have to refetch the first packet
+			resetFormattedData();
+			clearPackets();
+		}
+	}
+}
+
 U32 LLTextureFetchWorker::calcWorkPriority()
 {
 // 	llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerTexture::maxDecodePriority());
@@ -538,7 +560,6 @@ void LLTextureFetchWorker::resetFormattedData()
 // Called from MAIN thread
 void LLTextureFetchWorker::startWork(S32 param)
 {
-	llassert(mImageWorker == NULL);
 	llassert(mFormattedImage.isNull());
 }
 
@@ -549,6 +570,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
 {
 	LLMutexLock lock(&mWorkMutex);
 
+	if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
+	{
+		if (mState < WRITE_TO_CACHE)
+		{
+			return true; // abort
+		}
+	}
+	
 	if (mFetcher->mDebugPause)
 	{
 		return false; // debug: don't do any work
@@ -563,16 +592,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		mFetchTimer.reset();
 	}
 
-	if (mImagePriority <= 0.0f)
-	{
-		if (mState < WRITE_TO_CACHE)
-		{
-			return true; // cancel request
-		}
-	}
-	
 	if (mState == INIT)
 	{
+		mRawImage = NULL ;
 		mRequestedDiscard = -1;
 		mLoadedDiscard = -1;
 		mDecodedDiscard = -1;
@@ -590,8 +612,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		clearPackets(); // TODO: Shouldn't be necessary
 		mCacheReadHandle = LLTextureCache::nullHandle();
 		mCacheWriteHandle = LLTextureCache::nullHandle();
-		mURL.clear();
 		mState = LOAD_FROM_TEXTURE_CACHE;
+		LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
+							 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 		// fall through
 	}
 
@@ -612,16 +635,27 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
 
 			CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage);
-			if (getName().empty())
+			if (mUrl.compare(0, 7, "file://") == 0)
+			{
+				// read file from local disk
+				std::string filename = mUrl.substr(7, std::string::npos);
+				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(filename, mID, cache_priority,
+																		  offset, size, responder);
+			}
+			else if (mUrl.empty())
 			{
 				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority,
 																		  offset, size, responder);
 			}
 			else
 			{
-				// read file from local disk
-				mCacheReadHandle = mFetcher->mTextureCache->readFromCache(getName(), mID, cache_priority,
-																		  offset, size, responder);
+				if (!(mUrl.compare(0, 7, "http://") == 0))
+				{
+					// *TODO:?remove this warning
+					llwarns << "Unknown URL Type: " << mUrl << llendl;
+				}
+				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+				mState = SEND_HTTP_REQ;
 			}
 		}
 
@@ -647,75 +681,101 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 	if (mState == CACHE_POST)
 	{
-		mDesiredSize = llmax(mDesiredSize, FIRST_PACKET_SIZE);
+		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);
 		mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 		// Successfully loaded
 		if ((mCachedSize >= mDesiredSize) || mHaveAllData)
 		{
 			// we have enough data, decode it
 			llassert_always(mFormattedImage->getDataSize() > 0);
+			mLoadedDiscard = mDesiredDiscard;
 			mState = DECODE_IMAGE;
+			LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
+								 << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
+								 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 			// fall through
 		}
 		else
 		{
-			if (!getName().empty())
+			if (mUrl.compare(0, 7, "file://") == 0)
 			{
 				// failed to load local file, we're done.
 				return true;
 			}
 			// need more data
-			mState = LOAD_FROM_NETWORK;
+			else
+			{
+				LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
+				mState = LOAD_FROM_NETWORK;
+			}
 			// fall through
 		}
 	}
 
 	if (mState == LOAD_FROM_NETWORK)
 	{
-		if (mSentRequest == UNSENT)
+		bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP");
+		if (!mUrl.empty()) get_url = false;
+// 		if (mHost != LLHost::invalid) get_url = false;
+		if ( get_url )
 		{
-			if (mFormattedImage.isNull())
-			{
-				mFormattedImage = new LLImageJ2C;
-			}
-			// Add this to the network queue and sit here.
-			// LLTextureFetch::update() will send off a request which will change our state
-			S32 data_size = mFormattedImage->getDataSize();
-			if (data_size > 0)
+			LLViewerRegion* region = NULL;
+			if (mHost == LLHost::invalid)
+				region = gAgent.getRegion();
+			else
+				region = LLWorld::getInstance()->getRegion(mHost);
+
+			if (region)
 			{
-				// Only used for simulator requests
-				mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
-				if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
-				{
-// 					llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl;
-					removeFromCache();
-					resetFormattedData();
-					clearPackets();
-				}
-				else
+				std::string http_url = region->getCapability("GetTexture");
+				if (!http_url.empty())
 				{
-					mLastPacket = mFirstPacket-1;
-					mTotalPackets = (mFileSize - FIRST_PACKET_SIZE + MAX_IMG_PACKET_SIZE-1) / MAX_IMG_PACKET_SIZE + 1;
+					mUrl = http_url + "/?texture_id=" + mID.asString().c_str();
 				}
 			}
+			else
+			{
+				llwarns << "Region not found for host: " << mHost << llendl;
+			}
+		}
+		if (!mUrl.empty())
+		{
+			mState = LLTextureFetchWorker::SEND_HTTP_REQ;
+			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+			// don't return, fall through to next state
+		}
+		else if (mSentRequest == UNSENT)
+		{
+			// Add this to the network queue and sit here.
+			// LLTextureFetch::update() will send off a request which will change our state
 			mRequestedSize = mDesiredSize;
 			mRequestedDiscard = mDesiredDiscard;
 			mSentRequest = QUEUED;
-			mFetcher->lockQueue();
 			mFetcher->addToNetworkQueue(this);
-			mFetcher->unlockQueue();
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+			return false;
+		}
+		else
+		{
+			// Shouldn't need to do anything here
+			//llassert_always(mFetcher->mNetworkQueue.find(mID) != mFetcher->mNetworkQueue.end());
+			// Make certain this is in the network queue
+			//mFetcher->addToNetworkQueue(this);
+			//setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+			return false;
 		}
-		return false;
 	}
 	
 	if (mState == LOAD_FROM_SIMULATOR)
 	{
+		if (mFormattedImage.isNull())
+		{
+			mFormattedImage = new LLImageJ2C;
+		}
 		if (processSimulatorPackets())
 		{
-			mFetcher->lockQueue();
-			mFetcher->removeFromNetworkQueue(this);
-			mFetcher->unlockQueue();
+			LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
+			mFetcher->removeFromNetworkQueue(this, false);
 			if (mFormattedImage.isNull() || !mFormattedImage->getDataSize())
 			{
 				// processSimulatorPackets() failed
@@ -727,108 +787,99 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		}
 		else
 		{
+			mFetcher->addToNetworkQueue(this); // failsafe
 			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
 		}
 		return false;
 	}
 	
-#if 0
-	if (mState == LOAD_FROM_HTTP_GET_URL)
-	{
-		if (!mSentRequest)
-		{
-			mSentRequest = TRUE;
-			mLoaded = FALSE;
-			std::string url;
-			LLViewerRegion* region = gAgent.getRegion();
-			if (region)
+	if (mState == SEND_HTTP_REQ)
+	{
+		{
+			const S32 HTTP_QUEUE_MAX_SIZE = 32;
+			// *TODO: Integrate this with llviewerthrottle
+			// Note: LLViewerThrottle uses dynamic throttling which makes sense for UDP,
+			// but probably not for Textures.
+			// Set the throttle to the entire bandwidth, assuming UDP packets will get priority
+			// when they are needed
+			F32 max_bandwidth = mFetcher->mMaxBandwidth;
+			if ((mFetcher->getHTTPQueueSize() >= HTTP_QUEUE_MAX_SIZE) ||
+				(mFetcher->getTextureBandwidth() > max_bandwidth))
 			{
-				url = region->getCapability("RequestTextureDownload");
-			}
-			if (!url.empty())
-			{
-				LLSD sd;
-				sd = mID.asString();
-				setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-				LLHTTPClient::post(url, sd, new URLResponder(mFetcher, mID));
+				// Make normal priority and return (i.e. wait until there is room in the queue)
+				setPriority(LLWorkerThread::PRIORITY_NORMAL | mWorkPriority);
 				return false;
 			}
-			else
-			{
-// 				llwarns << mID << ": HTTP get url failed, requesting from simulator" << llendl;
-				mSentRequest = FALSE;
-				mState = LOAD_FROM_SIMULATOR;
-				return false;
-			}
-		}
-		else
-		{
-			if (mLoaded)
+			
+			mFetcher->removeFromNetworkQueue(this, false);
+			
+			S32 cur_size = 0;
+			if (mFormattedImage.notNull())
 			{
-				if (!mURL.empty())
-				{
-					mState = LOAD_FROM_HTTP_GET_DATA;
-					mSentRequest = FALSE; // reset
-					mLoaded = FALSE; // reset
-				}
-				else
-				{
-// 					llwarns << mID << ": HTTP get url is empty, requesting from simulator" << llendl;
-					mSentRequest = FALSE;
-					mState = LOAD_FROM_SIMULATOR;
-					return false;
-				}
+				cur_size = mFormattedImage->getDataSize(); // amount of data we already have
 			}
-		}
-		// fall through
-	}
-	
-	if (mState == LOAD_FROM_HTTP_GET_DATA)
-	{
-		if (!mSentRequest)
-		{
-			mSentRequest = TRUE;
-			S32 cur_size = mFormattedImage->getDataSize(); // amount of data we already have
 			mRequestedSize = mDesiredSize;
 			mRequestedDiscard = mDesiredDiscard;
-#if 1 // *TODO: LLCurl::getByteRange is broken (ignores range)
-			cur_size = 0;
-			mFormattedImage->deleteData();
-#endif
 			mRequestedSize -= cur_size;
-			// 			  F32 priority = mImagePriority / (F32)LLViewerTexture::maxDecodePriority(); // 0-1
 			S32 offset = cur_size;
 			mBufferSize = cur_size; // This will get modified by callbackHttpGet()
-			std::string url;
-			if (mURL.empty())
+			
+			bool res = false;
+			if (!mUrl.empty())
 			{
-				//url = "http://asset.agni/0000002f-38ae-0e17-8e72-712e58964e9c.texture";
-				std::stringstream urlstr;
-				urlstr << "http://asset.agni/" << mID.asString() << ".texture";
-				url = urlstr.str();
+				mLoaded = FALSE;
+				mGetStatus = 0;
+				mGetReason.clear();
+				lldebugs << "HTTP GET: " << mID << " Offset: " << offset
+						<< " Bytes: " << mRequestedSize
+						<< " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth
+						<< llendl;
+				setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+				mState = WAIT_HTTP_REQ;	
+
+				mFetcher->addToHTTPQueue(mID);
+				// Will call callbackHttpGet when curl request completes
+				std::vector<std::string> headers;
+				headers.push_back("Accept: image/x-j2c");
+				res = mFetcher->mCurlGetRequest->getByteRange(mUrl, headers, offset, mRequestedSize,
+															  new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, offset));
 			}
-			else
+			if (!res)
 			{
-				url = mURL;
+				llwarns << "HTTP GET request failed for " << mID << llendl;
+				resetFormattedData();
+				++mHTTPFailCount;
+				return true; // failed
 			}
-			mLoaded = FALSE;
-// 			llinfos << "HTTP GET: " << mID << " Offset: " << offset << " Bytes: " << mRequestedSize << llendl;
-			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-			LLCurl::getByteRange(url, offset, mRequestedSize,
-								 new HTTPGetResponder(mFetcher, mID)); // *TODO: use mWorkPriority
-			return false; // not done
+			// fall through
 		}
-
+	}
+	
+	if (mState == WAIT_HTTP_REQ)
+	{
 		if (mLoaded)
 		{
-			S32 cur_size = mFormattedImage->getDataSize();
+			S32 cur_size = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 			if (mRequestedSize < 0)
 			{
-// 				llwarns << "http get failed for: " << mID << llendl;
+				const S32 HTTP_MAX_RETRY_COUNT = 3;
+				S32 max_attempts = (mGetStatus == HTTP_NOT_FOUND) ? 1 : HTTP_MAX_RETRY_COUNT + 1;
+ 				llinfos << "HTTP GET failed for: " << mUrl
+						<< " Status: " << mGetStatus << " Reason: '" << mGetReason << "'"
+						<< " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl;
 				if (cur_size == 0)
 				{
-					resetFormattedData();
-					return true; // failed
+					++mHTTPFailCount;
+					if (mHTTPFailCount >= max_attempts)
+					{
+						resetFormattedData();
+						return true; // failed
+					}
+					else
+					{
+						mState = SEND_HTTP_REQ;
+						return false; // retry
+					}
 				}
 				else
 				{
@@ -836,6 +887,18 @@ bool LLTextureFetchWorker::doWork(S32 param)
 					return false; // use what we have
 				}
 			}
+			
+			if (mFormattedImage.isNull())
+			{
+				// For now, create formatted image based on extension
+				std::string extension = gDirUtilp->getExtension(mUrl);
+				mFormattedImage = LLImageFormatted::createFromType(LLImageBase::getCodecFromExtension(extension));
+				if (mFormattedImage.isNull())
+				{
+					mFormattedImage = new LLImageJ2C; // default
+				}
+			}
+			
 			llassert_always(mBufferSize == cur_size + mRequestedSize);
 			if (mHaveAllData)
 			{
@@ -854,43 +917,51 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			mBuffer = NULL;
 			mBufferSize = 0;
 			mLoadedDiscard = mRequestedDiscard;
-			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 			mState = DECODE_IMAGE;
+			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+			return false;
+		}
+		else
+		{
+			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
 			return false;
 		}
-
-		// NOTE: Priority gets updated when the http get completes (in callbackHTTPGet())
-		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
-		return false;
 	}
-#endif
 	
 	if (mState == DECODE_IMAGE)
 	{
-		llassert_always(mFormattedImage->getDataSize() > 0);
+		if (mFormattedImage->getDataSize() <= 0)
+		{
+			llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
+		}
 		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
 		mRawImage = NULL;
 		mAuxImage = NULL;
-		llassert_always(mImageWorker == NULL);
 		llassert_always(mFormattedImage.notNull());
+		llassert_always(mLoadedDiscard >= 0);
 		S32 discard = mHaveAllData ? 0 : mLoadedDiscard;
 		U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
 		mDecoded  = FALSE;
 		mState = DECODE_IMAGE_UPDATE;
-		mImageWorker = new LLImageWorker(mFormattedImage, image_priority, discard, new DecodeResponder(mFetcher, mID, this));
-		// fall though (need to call requestDecodedData() to start work)
+		LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
+				<< " All Data: " << mHaveAllData << LL_ENDL;
+		mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
+																  new DecodeResponder(mFetcher, mID, this));
+		// fall though
 	}
 	
 	if (mState == DECODE_IMAGE_UPDATE)
 	{
-		if (decodeImage())
+		if (mDecoded)
 		{
 			if (mDecodedDiscard < 0)
 			{
+				LL_DEBUGS("Texture") << mID << ": Failed to Decode." << LL_ENDL;
 				if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0)
 				{
 					// Cache file should be deleted, try again
 // 					llwarns << mID << ": Decode of cached file failed (removed), retrying" << llendl;
+					llassert_always(mDecodeHandle == 0);
 					mFormattedImage = NULL;
 					++mRetryAttempt;
 					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
@@ -905,6 +976,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			}
 			else
 			{
+				llassert_always(mRawImage.notNull());
+				LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
+						<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 				mState = WRITE_TO_CACHE;
 			}
@@ -918,9 +992,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 	if (mState == WRITE_TO_CACHE)
 	{
-		if (mInLocalCache || !mFileSize || mSentRequest == UNSENT)
+		if (mInLocalCache || mSentRequest == UNSENT || mFormattedImage.isNull())
 		{
-			// If we're in a local cache or we didn't actually receive any new data, skip
+			// If we're in a local cache or we didn't actually receive any new data,
+			// or we failed to load anything, skip
 			mState = DONE;
 			return false;
 		}
@@ -979,10 +1054,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 // Called from MAIN thread
 void LLTextureFetchWorker::endWork(S32 param, bool aborted)
 {
-	if (mImageWorker)
+	if (mDecodeHandle != 0)
 	{
-		mImageWorker->scheduleDelete();
-		mImageWorker = NULL;
+		mFetcher->mImageDecodeThread->abortRequest(mDecodeHandle, false);
+		mDecodeHandle = 0;
 	}
 	mFormattedImage = NULL;
 }
@@ -1035,7 +1110,7 @@ bool LLTextureFetchWorker::deleteOK()
 
 	if ((haveWork() &&
 		 // not ok to delete from these states
-		 ((mState >= LOAD_FROM_HTTP_GET_URL && mState <= LOAD_FROM_HTTP_GET_DATA) ||
+		 ((mState >= SEND_HTTP_REQ && mState <= WAIT_HTTP_REQ) ||
 		  (mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE))))
 	{
 		delete_ok = false;
@@ -1044,7 +1119,6 @@ bool LLTextureFetchWorker::deleteOK()
 	return delete_ok;
 }
 
-
 void LLTextureFetchWorker::removeFromCache()
 {
 	if (!mInLocalCache)
@@ -1061,6 +1135,7 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 	if (mFormattedImage.isNull() || mRequestedSize < 0)
 	{
 		// not sure how we got here, but not a valid state, abort!
+		llassert_always(mDecodeHandle == 0);
 		mFormattedImage = NULL;
 		return true;
 	}
@@ -1074,6 +1149,12 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 			buffer_size += mPackets[i]->mSize;
 		}
 		bool have_all_data = mLastPacket >= mTotalPackets-1;
+		if (mRequestedSize <= 0)
+		{
+			// We received a packed but haven't requested anything yet (edge case)
+			// Return true (we're "done") since we didn't request anything
+			return true;
+		}
 		if (buffer_size >= mRequestedSize || have_all_data)
 		{
 			/// We have enough (or all) data
@@ -1109,50 +1190,36 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 
 //////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackURLReceived(const LLSD& data, bool success)
+void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
+										   const LLIOPipe::buffer_ptr_t& buffer,
+										   bool last_block, bool success)
 {
-#if 0
 	LLMutexLock lock(&mWorkMutex);
-	if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_URL)
-	{
-		llwarns << "callbackURLReceived for unrequested fetch worker, req="
-				<< mSentRequest << " state= " << mState << llendl;
-		return;
-	}
-	if (success)
-	{
-		mURL = data.asString();
-	}
-	mLoaded = TRUE;
-	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_block)
-{
-#if 0
-	LLMutexLock lock(&mWorkMutex);
-	if (!mSentRequest || mState != LOAD_FROM_HTTP_GET_DATA)
+	if (mState != WAIT_HTTP_REQ)
 	{
-		llwarns << "callbackHttpGet for unrequested fetch worker, req="
-				<< mSentRequest << " state= " << mState << llendl;
+		llwarns << "callbackHttpGet for unrequested fetch worker: " << mID
+				<< " req=" << mSentRequest << " state= " << mState << llendl;
 		return;
 	}
-// 	llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl;
 	if (mLoaded)
 	{
 		llwarns << "Duplicate callback for " << mID.asString() << llendl;
 		return; // ignore duplicate callback
 	}
-	if (data_size >= 0)
+	if (success)
 	{
+		// get length of stream:
+		S32 data_size = buffer->countAfter(channels.in(), NULL);
+
+		gTextureList.sTextureBits += data_size * 8; // Approximate - does not include header bits
+	
+		//llinfos << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << llendl;
 		if (data_size > 0)
 		{
+			// *TODO: set the formatted image data here directly to avoid the copy
 			mBuffer = new U8[data_size];
-			// *TODO: set the formatted image data here
-			memcpy(mBuffer, data, data_size);
+			buffer->readAfter(channels.in(), NULL, mBuffer, data_size);
 			mBufferSize += data_size;
 			if (data_size < mRequestedSize || last_block == true)
 			{
@@ -1160,10 +1227,11 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl
 			}
 			else if (data_size > mRequestedSize)
 			{
-				// *TODO: This will happen until we fix LLCurl::getByteRange()
-// 				llinfos << "HUH?" << llendl;
+				// *TODO: This shouldn't be happening any more
+				llwarns << "data_size = " << data_size << " > requested: " << mRequestedSize << llendl;
 				mHaveAllData = TRUE;
-				mFormattedImage->deleteData();
+				llassert_always(mDecodeHandle == 0);
+				mFormattedImage = NULL; // discard any previous data we had
 				mBufferSize = data_size;
 			}
 		}
@@ -1181,7 +1249,6 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl
 	}
 	mLoaded = TRUE;
 	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-#endif
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1197,7 +1264,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima
 	}
 	if (success)
 	{
-		llassert_always(imagesize > 0);
+		llassert_always(imagesize >= 0);
 		mFileSize = imagesize;
 		mFormattedImage = image;
 		mImageCodec = image->getCodec();
@@ -1225,65 +1292,40 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success)
 
 //////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackDecoded(bool success)
+void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImageRaw* aux)
 {
+	LLMutexLock lock(&mWorkMutex);
+	if (mDecodeHandle == 0)
+	{
+		return; // aborted, ignore
+	}
 	if (mState != DECODE_IMAGE_UPDATE)
 	{
 // 		llwarns << "Decode callback for " << mID << " with state = " << mState << llendl;
+		mDecodeHandle = 0;
 		return;
 	}
-// 	llinfos << mID << " : DECODE COMPLETE " << llendl;
-	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-bool LLTextureFetchWorker::decodeImage()
-{
-	if(!mImageWorker)
-	{
-		//LLTextureFetchWorker is aborted, skip image decoding.
-		return true ;
-	}
-
-	bool res = true;
-	if (mRawImage.isNull())
-	{
-		res = false;
-		if (mImageWorker->requestDecodedData(mRawImage, -1))
-		{
-			res = true;
-// 			llinfos << mID << " : BASE DECODE FINISHED" << llendl;
-		}
-	}
-	if (res &&
-		(mRawImage.notNull() && mRawImage->getDataSize() > 0) &&
-		(mNeedsAux && mAuxImage.isNull()))
+	llassert_always(mFormattedImage.notNull());
+	
+	mDecodeHandle = 0;
+	if (success)
 	{
-		res = false;
-		if (mImageWorker->requestDecodedAuxData(mAuxImage, 4, -1))
-		{
-			res = true;
-// 			llinfos << mID << " : AUX DECODE FINISHED" << llendl;
-		}
+		llassert_always(raw);
+		mRawImage = raw;
+		mAuxImage = aux;
+		mDecodedDiscard = mFormattedImage->getDiscardLevel();
+ 		LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard
+							 << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
 	}
-	if (res)
+	else
 	{
-		if ((mRawImage.notNull() && mRawImage->getDataSize() > 0) &&
-			(!mNeedsAux || (mAuxImage.notNull() && mAuxImage->getDataSize() > 0)))
-		{
-			mDecodedDiscard = mFormattedImage->getDiscardLevel();
-// 			llinfos << mID << " : DECODE FINISHED. DISCARD: " << mDecodedDiscard << llendl;
-		}
-		else
-		{
-// 			llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl;
-			removeFromCache();
-		}
-		mImageWorker->scheduleDelete();
-		mImageWorker = NULL;
+		llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl;
+		removeFromCache();
+		mDecodedDiscard = -1; // Redundant, here for clarity and paranoia
 	}
-	return res;
+	mDecoded = TRUE;
+// 	llinfos << mID << " : DECODE COMPLETE " << llendl;
+	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1314,15 +1356,21 @@ bool LLTextureFetchWorker::writeToCacheComplete()
 //////////////////////////////////////////////////////////////////////////////
 // public
 
-LLTextureFetch::LLTextureFetch(LLTextureCache* cache, bool threaded)
+LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded)
 	: LLWorkerThread("TextureFetch", threaded),
 	  mDebugCount(0),
 	  mDebugPause(FALSE),
 	  mPacketCount(0),
 	  mBadPacketCount(0),
 	  mQueueMutex(getAPRPool()),
-	  mTextureCache(cache)
+	  mNetworkQueueMutex(getAPRPool()),
+	  mTextureCache(cache),
+	  mImageDecodeThread(imagedecodethread),
+	  mTextureBandwidth(0),
+	  mCurlGetRequest(NULL)
 {
+	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), gSavedSettings.getU32("TextureLoggingThreshold"));
 }
 
 LLTextureFetch::~LLTextureFetch()
@@ -1330,13 +1378,7 @@ LLTextureFetch::~LLTextureFetch()
 	// ~LLQueuedThread() called here
 }
 
-bool LLTextureFetch::createRequest(const LLUUID& id, const LLHost& host, F32 priority,
-									S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
-{
-	return createRequest(LLStringUtil::null, id, host, priority, w, h, c, desired_discard, needs_aux);
-}
-
-bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority,
+bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
 								   S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
 {
 	if (mDebugPause)
@@ -1361,7 +1403,14 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 
 	S32 desired_size;
-	if (desired_discard == 0)
+	std::string exten = gDirUtilp->getExtension(url);
+	if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
+	{
+		// Only do partial requests for J2C at the moment
+		//llinfos << "Merov : LLTextureFetch::createRequest(), blocking fetch on " << url << llendl; 
+		desired_size = MAX_IMAGE_DATA_SIZE;
+	}
+	else if (desired_discard == 0)
 	{
 		// if we want the entire image, and we know its size, then get it all
 		// (calcDataSizeJ2C() below makes assumptions about how the image
@@ -1378,7 +1427,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 	else
 	{
-		desired_size = FIRST_PACKET_SIZE;
+		desired_size = TEXTURE_CACHE_ENTRY_SIZE;
 		desired_discard = MAX_DISCARD_LEVEL;
 	}
 
@@ -1389,10 +1438,10 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 		{
 			return false; // need to wait for previous aborted request to complete
 		}
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		worker->setImagePriority(priority);
 		worker->setDesiredDiscard(desired_discard, desired_size);
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 		if (!worker->haveWork())
 		{
 			worker->mState = LLTextureFetchWorker::INIT;
@@ -1401,16 +1450,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 	else
 	{
-		if (filename.empty())
-		{
-			// do remote fetch
-			worker = new LLTextureFetchWorker(this, id, host, priority, desired_discard, desired_size);
-		}
-		else
-		{
-			// do local file fetch
-			worker = new LLTextureFetchLocalFileWorker(this, filename, id, host, priority, desired_discard, desired_size);
-		}
+		worker = new LLTextureFetchWorker(this, url, id, host, priority, desired_discard, desired_size);
 		mRequestMap[id] = worker;
 	}
 	worker->mActiveCount++;
@@ -1430,10 +1470,9 @@ void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel)
 }
 
 // protected
-
-// call lockQueue() first!
 void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker)
 {
+	LLMutexLock lock(&mNetworkQueueMutex);
 	if (mRequestMap.find(worker->mID) != mRequestMap.end())
 	{
 		// only add to the queue if in the request map
@@ -1447,10 +1486,27 @@ void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker)
 	}
 }
 
-// call lockQueue() first!
-void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker)
+void LLTextureFetch::removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel)
 {
-	mNetworkQueue.erase(worker->mID);
+	LLMutexLock lock(&mNetworkQueueMutex);
+	size_t erased = mNetworkQueue.erase(worker->mID);
+	if (cancel && erased > 0)
+	{
+		mCancelQueue[worker->mHost].insert(worker->mID);
+	}
+}
+
+// protected
+void LLTextureFetch::addToHTTPQueue(const LLUUID& id)
+{
+	LLMutexLock lock(&mNetworkQueueMutex);
+	mHTTPTextureQueue.insert(id);
+}
+
+void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id)
+{
+	LLMutexLock lock(&mNetworkQueueMutex);
+	mHTTPTextureQueue.erase(id);
 }
 
 // call lockQueue() first!
@@ -1458,11 +1514,7 @@ void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel)
 {
 	size_t erased_1 = mRequestMap.erase(worker->mID);
 	llassert_always(erased_1 > 0) ;
-	size_t erased = mNetworkQueue.erase(worker->mID);
-	if (cancel && erased > 0)
-	{
-		mCancelQueue[worker->mHost].insert(worker->mID);
-	}
+	removeFromNetworkQueue(worker, cancel);
 	llassert_always(!(worker->getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) ;
 
 	worker->scheduleDelete();	
@@ -1504,24 +1556,27 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
 		}
 		else if (worker->checkWork())
 		{
+			worker->lockWorkMutex();
 			discard_level = worker->mDecodedDiscard;
-			raw = worker->mRawImage; worker->mRawImage = NULL;
-			aux = worker->mAuxImage; worker->mAuxImage = NULL;
+			raw = worker->mRawImage;
+			aux = worker->mAuxImage;
 			res = true;
+			LL_DEBUGS("Texture") << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
+			worker->unlockWorkMutex();
 		}
 		else
 		{
-			worker->lockWorkData();
+			worker->lockWorkMutex();
 			if ((worker->mDecodedDiscard >= 0) &&
 				(worker->mDecodedDiscard < discard_level || discard_level < 0) &&
 				(worker->mState >= LLTextureFetchWorker::WAIT_ON_WRITE))
 			{
 				// Not finished, but data is ready
 				discard_level = worker->mDecodedDiscard;
-				if (worker->mRawImage) raw = worker->mRawImage;
-				if (worker->mAuxImage) aux = worker->mAuxImage;
+				raw = worker->mRawImage;
+				aux = worker->mAuxImage;
 			}
-			worker->unlockWorkData();
+			worker->unlockWorkMutex();
 		}
 	}
 	else
@@ -1538,9 +1593,9 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker)
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		worker->setImagePriority(priority);
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 		res = true;
 	}
 	return res;
@@ -1548,40 +1603,106 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 
 //////////////////////////////////////////////////////////////////////////////
 
+// MAIN THREAD
 //virtual
 S32 LLTextureFetch::update(U32 max_time_ms)
 {
 	S32 res;
+	
+	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	
 	res = LLWorkerThread::update(max_time_ms);
 	
-	const F32 REQUEST_TIME = 1.f;
-
-	// Periodically, gather the list of textures that need data from the network
-	// And send the requests out to the simulators
-	if (mNetworkTimer.getElapsedTimeF32() >= REQUEST_TIME)
+	if (!mDebugPause)
 	{
-		mNetworkTimer.reset();
 		sendRequestListToSimulators();
 	}
 	
 	return res;
 }
 
+// WORKER THREAD
+void LLTextureFetch::startThread()
+{
+	// Construct mCurlGetRequest from Worker Thread
+	mCurlGetRequest = new LLCurlRequest();
+}
+
+// WORKER THREAD
+void LLTextureFetch::endThread()
+{
+	// Destroy mCurlGetRequest from Worker Thread
+	delete mCurlGetRequest;
+	mCurlGetRequest = NULL;
+}
+
+// WORKER THREAD
+void LLTextureFetch::threadedUpdate()
+{
+	llassert_always(mCurlGetRequest);
+	
+	// Limit update frequency
+	const F32 PROCESS_TIME = 0.05f; 
+	static LLFrameTimer process_timer;
+	if (process_timer.getElapsedTimeF32() < PROCESS_TIME)
+	{
+		return;
+	}
+	process_timer.reset();
+	
+	// Update Curl on same thread as mCurlGetRequest was constructed
+	S32 processed = mCurlGetRequest->process();
+	if (processed > 0)
+	{
+		lldebugs << "processed: " << processed << " messages." << llendl;
+	}
+
+#if 0
+	const F32 INFO_TIME = 1.0f; 
+	static LLFrameTimer info_timer;
+	if (info_timer.getElapsedTimeF32() >= INFO_TIME)
+	{
+		S32 q = mCurlGetRequest->getQueued();
+		if (q > 0)
+		{
+			llinfos << "Queued gets: " << q << llendl;
+			info_timer.reset();
+		}
+	}
+#endif
+	
+}
+
 //////////////////////////////////////////////////////////////////////////////
 
 void LLTextureFetch::sendRequestListToSimulators()
 {
+	// All requests
+	const F32 REQUEST_DELTA_TIME = 0.10f; // 10 fps
+	
+	// Sim requests
 	const S32 IMAGES_PER_REQUEST = 50;
-	const F32 LAZY_FLUSH_TIMEOUT = 15.f; // 10.0f // temp
+	const F32 SIM_LAZY_FLUSH_TIMEOUT = 10.0f; // temp
 	const F32 MIN_REQUEST_TIME = 1.0f;
 	const F32 MIN_DELTA_PRIORITY = 1000.f;
 
-	LLMutexLock lock(&mQueueMutex);
+	// Periodically, gather the list of textures that need data from the network
+	// And send the requests out to the simulators
+	static LLFrameTimer timer;
+	if (timer.getElapsedTimeF32() < REQUEST_DELTA_TIME)
+	{
+		return;
+	}
+	timer.reset();
 	
+	LLMutexLock lock(&mQueueMutex);
+
 	// Send requests
 	typedef std::set<LLTextureFetchWorker*,LLTextureFetchWorker::Compare> request_list_t;
 	typedef std::map< LLHost, request_list_t > work_request_map_t;
 	work_request_map_t requests;
+	{
+	LLMutexLock lock2(&mNetworkQueueMutex);
 	for (queue_t::iterator iter = mNetworkQueue.begin(); iter != mNetworkQueue.end(); )
 	{
 		queue_t::iterator curiter = iter++;
@@ -1591,65 +1712,65 @@ void LLTextureFetch::sendRequestListToSimulators()
 			mNetworkQueue.erase(curiter);
 			continue; // paranoia
 		}
+		if ((req->mState != LLTextureFetchWorker::LOAD_FROM_NETWORK) &&
+			(req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR))
+		{
+			// We already received our URL, remove from the queue
+			llwarns << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << llendl;
+			mNetworkQueue.erase(curiter);
+			continue;
+		}
 		if (req->mID == mDebugID)
 		{
 			mDebugCount++; // for setting breakpoints
 		}
-		if (req->mTotalPackets > 0 && req->mLastPacket >= req->mTotalPackets-1)
+		if (req->mSentRequest == LLTextureFetchWorker::SENT_SIM &&
+			req->mTotalPackets > 0 &&
+			req->mLastPacket >= req->mTotalPackets-1)
 		{
 			// We have all the packets... make sure this is high priority
 // 			req->setPriority(LLWorkerThread::PRIORITY_HIGH | req->mWorkPriority);
 			continue;
 		}
 		F32 elapsed = req->mRequestedTimer.getElapsedTimeF32();
-		F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority);
-		if ((req->mSimRequestedDiscard != req->mDesiredDiscard) ||
-			(delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) ||
-			(elapsed >= LAZY_FLUSH_TIMEOUT))
 		{
-			requests[req->mHost].insert(req);
+			F32 delta_priority = llabs(req->mRequestedPriority - req->mImagePriority);
+			if ((req->mSimRequestedDiscard != req->mDesiredDiscard) ||
+				(delta_priority > MIN_DELTA_PRIORITY && elapsed >= MIN_REQUEST_TIME) ||
+				(elapsed >= SIM_LAZY_FLUSH_TIMEOUT))
+			{
+				requests[req->mHost].insert(req);
+			}
 		}
 	}
-
-	std::string http_url;
-#if 0
-	if (gSavedSettings.getBOOL("ImagePipelineUseHTTP"))
-	{
-		LLViewerRegion* region = gAgent.getRegion();
-		if (region)
-		{
-			http_url = region->getCapability("RequestTextureDownload");
-		}
 	}
-#endif
-	
+
 	for (work_request_map_t::iterator iter1 = requests.begin();
 		 iter1 != requests.end(); ++iter1)
 	{
-		bool use_http = http_url.empty() ? false : true;
 		LLHost host = iter1->first;
 		// invalid host = use agent host
 		if (host == LLHost::invalid)
 		{
 			host = gAgent.getRegionHost();
 		}
-		else
-		{
-			use_http = false;
-		}
 
-		if (use_http)
+		S32 sim_request_count = 0;
+		
+		for (request_list_t::iterator iter2 = iter1->second.begin();
+			 iter2 != iter1->second.end(); ++iter2)
 		{
-		}
-		else
-		{
-			S32 request_count = 0;
-			for (request_list_t::iterator iter2 = iter1->second.begin();
-				 iter2 != iter1->second.end(); ++iter2)
+			LLTextureFetchWorker* req = *iter2;
+			if (gMessageSystem)
 			{
-				LLTextureFetchWorker* req = *iter2;
-				req->mSentRequest = LLTextureFetchWorker::SENT_SIM;
-				if (0 == request_count)
+				if (req->mSentRequest != LLTextureFetchWorker::SENT_SIM)
+				{
+					// Initialize packet data based on data read from cache
+					req->lockWorkMutex();
+					req->setupPacketData();
+					req->unlockWorkMutex();
+				}
+				if (0 == sim_request_count)
 				{
 					gMessageSystem->newMessageFast(_PREHASH_RequestImage);
 					gMessageSystem->nextBlockFast(_PREHASH_AgentData);
@@ -1666,30 +1787,42 @@ void LLTextureFetch::sendRequestListToSimulators()
 // 				llinfos << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
 // 						<< " Packet: " << packet << " Priority: " << req->mImagePriority << llendl;
 
-				req->lockWorkData();
+				if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+				{
+					mTextureInfo.setRequestStartTime(req->mID, LLTimer::getTotalTime());
+					mTextureInfo.setRequestOffset(req->mID, 0);
+					mTextureInfo.setRequestSize(req->mID, 0);
+					mTextureInfo.setRequestType(req->mID, LLTextureInfoDetails::REQUEST_TYPE_UDP);
+				}
+
+				req->lockWorkMutex();
+				req->mSentRequest = LLTextureFetchWorker::SENT_SIM;
 				req->mSimRequestedDiscard = req->mDesiredDiscard;
 				req->mRequestedPriority = req->mImagePriority;
 				req->mRequestedTimer.reset();
-				req->unlockWorkData();
-				request_count++;
-				if (request_count >= IMAGES_PER_REQUEST)
+				req->unlockWorkMutex();
+				sim_request_count++;
+				if (sim_request_count >= IMAGES_PER_REQUEST)
 				{
-// 					llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+// 					llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+
 					gMessageSystem->sendSemiReliable(host, NULL, NULL);
-					request_count = 0;
+					sim_request_count = 0;
 				}
 			}
-			if (request_count > 0 && request_count < IMAGES_PER_REQUEST)
-			{
-// 				llinfos << "REQUESTING " << request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
-				gMessageSystem->sendSemiReliable(host, NULL, NULL);
-				request_count = 0;
-			}
+		}
+		if (gMessageSystem && sim_request_count > 0 && sim_request_count < IMAGES_PER_REQUEST)
+		{
+// 			llinfos << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << llendl;
+			gMessageSystem->sendSemiReliable(host, NULL, NULL);
+			sim_request_count = 0;
 		}
 	}
 	
 	// Send cancelations
-	if (!mCancelQueue.empty())
+	{
+	LLMutexLock lock2(&mNetworkQueueMutex);
+	if (gMessageSystem && !mCancelQueue.empty())
 	{
 		for (cancel_queue_t::iterator iter1 = mCancelQueue.begin();
 			 iter1 != mCancelQueue.end(); ++iter1)
@@ -1732,6 +1865,7 @@ void LLTextureFetch::sendRequestListToSimulators()
 		}
 		mCancelQueue.clear();
 	}
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1808,7 +1942,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 		return false;
 	}
 
-	worker->lockWorkData();
+	worker->lockWorkMutex();
 
 	//	Copy header data into image object
 	worker->mImageCodec = codec;
@@ -1819,7 +1953,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
 	res = worker->insertPacket(0, data, data_size);
 	worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
 	worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR;
-	worker->unlockWorkData();
+	worker->unlockWorkMutex();
 	return res;
 }
 
@@ -1853,7 +1987,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 		return false;
 	}
 
-	worker->lockWorkData();
+	worker->lockWorkMutex();
 	
 	res = worker->insertPacket(packet_num, data, data_size);
 	
@@ -1866,12 +2000,20 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
 	else
 	{
 // 		llwarns << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
-// 			<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl;
-		removeFromNetworkQueue(worker); // failsafe
-		mCancelQueue[host].insert(id);
+// 				<< " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << llendl;
+		removeFromNetworkQueue(worker, true); // failsafe
 	}
-	
-	worker->unlockWorkData();
+
+	if(packet_num >= (worker->mTotalPackets - 1))
+	{
+		if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator")))
+		{
+			U64 timeNow = LLTimer::getTotalTime();
+			mTextureInfo.setRequestSize(id, worker->mFileSize);
+			mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow);
+		}
+	}
+	worker->unlockWorkMutex();
 
 	return res;
 }
@@ -1885,9 +2027,9 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id)
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker)
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex() ;
 		from_cache = worker->mInLocalCache ;
-		worker->unlockWorkData();
+		worker->unlockWorkMutex() ;
 	}
 
 	return from_cache ;
@@ -1907,7 +2049,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 	LLTextureFetchWorker* worker = getWorker(id);
 	if (worker && worker->haveWork())
 	{
-		worker->lockWorkData();
+		worker->lockWorkMutex();
 		state = worker->mState;
 		fetch_dtime = worker->mFetchTimer.getElapsedTimeF32();
 		request_dtime = worker->mRequestedTimer.getElapsedTimeF32();
@@ -1924,7 +2066,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 				data_progress = (F32)worker->mFormattedImage->getDataSize() / (F32)worker->mFileSize;
 			}
 		}
-		if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::LOAD_FROM_HTTP_GET_DATA)
+		if (state >= LLTextureFetchWorker::LOAD_FROM_NETWORK && state <= LLTextureFetchWorker::WAIT_HTTP_REQ)
 		{
 			requested_priority = worker->mRequestedPriority;
 		}
@@ -1933,7 +2075,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
 			requested_priority = worker->mImagePriority;
 		}
 		fetch_priority = worker->getPriority();
-		worker->unlockWorkData();
+		worker->unlockWorkMutex();
 	}
 	data_progress_p = data_progress;
 	requested_priority_p = requested_priority;
@@ -1959,5 +2101,3 @@ void LLTextureFetch::dump()
 	}
 }
 
-
-//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 97719a9468e7d1ddc727f190cb3a3dfc90ed28c7..373e38a83cbd399326d7ccf881d6dcba06f33b8d 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -37,26 +37,29 @@
 #include "llimage.h"
 #include "lluuid.h"
 #include "llworkerthread.h"
+#include "llcurl.h"
+#include "lltextureinfo.h"
 
 class LLViewerTexture;
 class LLTextureFetchWorker;
+class HTTPGetResponder;
 class LLTextureCache;
+class LLImageDecodeThread;
 class LLHost;
 
 // Interface class
 class LLTextureFetch : public LLWorkerThread
 {
 	friend class LLTextureFetchWorker;
+	friend class HTTPGetResponder;
 	
 public:
-	LLTextureFetch(LLTextureCache* cache, bool threaded);
+	LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded);
 	~LLTextureFetch();
 
 	/*virtual*/ S32 update(U32 max_time_ms);	
 
-	bool createRequest(const LLUUID& id, const LLHost& host, F32 priority,
-					   S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
-	bool createRequest(const std::string& filename, const LLUUID& id, const LLHost& host, F32 priority,
+	bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
 					   S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
 	void deleteRequest(const LLUUID& id, bool cancel);
 	bool getRequestFinished(const LLUUID& id, S32& discard_level,
@@ -66,25 +69,39 @@ class LLTextureFetch : public LLWorkerThread
 	bool receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes, U16 data_size, U8* data);
 	bool receiveImagePacket(const LLHost& host, const LLUUID& id, U16 packet_num, U16 data_size, U8* data);
 
+	void setTextureBandwidth(F32 bandwidth) { mTextureBandwidth = bandwidth; }
+	F32 getTextureBandwidth() { return mTextureBandwidth; }
+	
 	// Debug
 	BOOL isFromLocalCache(const LLUUID& id);
 	S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p,
 					  U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p);
 	void dump();
 	S32 getNumRequests() { return mRequestMap.size(); }
+	S32 getNumHTTPRequests() { return mHTTPTextureQueue.size(); }
 	
 	// Public for access by callbacks
 	void lockQueue() { mQueueMutex.lock(); }
 	void unlockQueue() { mQueueMutex.unlock(); }
 	LLTextureFetchWorker* getWorker(const LLUUID& id);
+
+	LLTextureInfo* getTextureInfo() { return &mTextureInfo; }
 	
 protected:
 	void addToNetworkQueue(LLTextureFetchWorker* worker);
-	void removeFromNetworkQueue(LLTextureFetchWorker* worker);
+	void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel);
+	void addToHTTPQueue(const LLUUID& id);
+	void removeFromHTTPQueue(const LLUUID& id);
+	S32 getHTTPQueueSize() { return (S32)mHTTPTextureQueue.size(); }
 	void removeRequest(LLTextureFetchWorker* worker, bool cancel);
+	// Called from worker thread (during doWork)
+	void processCurlRequests();	
 
 private:
 	void sendRequestListToSimulators();
+	/*virtual*/ void startThread(void);
+	/*virtual*/ void endThread(void);
+	/*virtual*/ void threadedUpdate(void);
 
 public:
 	LLUUID mDebugID;
@@ -95,8 +112,11 @@ class LLTextureFetch : public LLWorkerThread
 	
 private:
 	LLMutex mQueueMutex;
+	LLMutex mNetworkQueueMutex;
 
 	LLTextureCache* mTextureCache;
+	LLImageDecodeThread* mImageDecodeThread;
+	LLCurlRequest* mCurlGetRequest;
 	
 	// Map of all requests by UUID
 	typedef std::map<LLUUID,LLTextureFetchWorker*> map_t;
@@ -105,10 +125,13 @@ class LLTextureFetch : public LLWorkerThread
 	// Set of requests that require network data
 	typedef std::set<LLUUID> queue_t;
 	queue_t mNetworkQueue;
+	queue_t mHTTPTextureQueue;
 	typedef std::map<LLHost,std::set<LLUUID> > cancel_queue_t;
 	cancel_queue_t mCancelQueue;
-
-	LLFrameTimer mNetworkTimer;
+	F32 mTextureBandwidth;
+	F32 mMaxBandwidth;
+	LLTextureInfo mTextureInfo;
 };
 
 #endif // LL_LLTEXTUREFETCH_H
+
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..672a36a8bd76f0dc5b98687f317d94e940d8d388
--- /dev/null
+++ b/indra/newview/lltextureinfo.cpp
@@ -0,0 +1,290 @@
+/** 
+ * @file lltextureinfo.cpp
+ * @brief Object which handles local texture info
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltextureinfo.h"
+#include "lltexturestats.h"
+#include "llviewercontrol.h"
+
+LLTextureInfo::LLTextureInfo() : 
+	mLogTextureDownloadsToViewerLog(false),
+	mLogTextureDownloadsToSimulator(false),
+	mTotalBytes(0),
+	mTotalMilliseconds(0),
+	mTextureDownloadsStarted(0),
+	mTextureDownloadsCompleted(0),
+	mTextureDownloadProtocol("NONE"),
+	mTextureLogThreshold(100 * 1024),
+	mCurrentStatsBundleStartTime(0)
+{
+	mTextures.clear();
+}
+
+void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold)
+{
+	mLogTextureDownloadsToViewerLog = writeToViewerLog;
+	mLogTextureDownloadsToSimulator = sendToSim;
+	mTextureLogThreshold = textureLogThreshold;
+}
+
+LLTextureInfo::~LLTextureInfo()
+{
+	std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator;
+	for (iterator = mTextures.begin(); iterator != mTextures.end(); iterator++)
+	{
+		LLTextureInfoDetails *info = (*iterator).second;
+		delete info;
+	}
+
+	mTextures.clear();
+}
+
+void LLTextureInfo::addRequest(const LLUUID& id)
+{
+	LLTextureInfoDetails *info = new LLTextureInfoDetails();
+	mTextures[id] = info;
+}
+
+U32 LLTextureInfo::getTextureInfoMapSize()
+{
+	return mTextures.size();
+}
+
+bool LLTextureInfo::has(const LLUUID& id)
+{
+	std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+	if (iterator == mTextures.end())
+	{
+		return false;
+	}
+	else
+	{
+		return true;
+	}
+}
+
+void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mStartTime = startTime;
+	mTextureDownloadsStarted++;
+}
+
+void LLTextureInfo::setRequestSize(const LLUUID& id, U32 size)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mSize = size;
+}
+
+void LLTextureInfo::setRequestOffset(const LLUUID& id, U32 offset)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mOffset = offset;
+}
+
+void LLTextureInfo::setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mType = type;
+}
+
+void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime)
+{
+	if (!has(id))
+	{
+		addRequest(id);
+	}
+	mTextures[id]->mCompleteTime = completeTime;
+
+	std::string protocol = "NONE";
+	switch(mTextures[id]->mType)
+	{
+	case LLTextureInfoDetails::REQUEST_TYPE_HTTP:
+		protocol = "HTTP";
+		break;
+
+	case LLTextureInfoDetails::REQUEST_TYPE_UDP:
+		protocol = "UDP";
+		break;
+
+	case LLTextureInfoDetails::REQUEST_TYPE_NONE:
+	default:
+		break;
+	}
+
+	if (mLogTextureDownloadsToViewerLog)
+	{
+		llinfos << "texture=" << id 
+			<< " start=" << mTextures[id]->mStartTime 
+			<< " end=" << mTextures[id]->mCompleteTime
+			<< " size=" << mTextures[id]->mSize
+			<< " offset=" << mTextures[id]->mOffset
+			<< " length_in_ms=" << (mTextures[id]->mCompleteTime - mTextures[id]->mStartTime) / 1000
+			<< " protocol=" << protocol
+			<< llendl;
+	}
+
+	if(mLogTextureDownloadsToSimulator)
+	{
+		S32 texture_stats_upload_threshold = mTextureLogThreshold;
+		mTotalBytes += mTextures[id]->mSize;
+		mTotalMilliseconds += mTextures[id]->mCompleteTime - mTextures[id]->mStartTime;
+		mTextureDownloadsCompleted++;
+		mTextureDownloadProtocol = protocol;
+		if (mTotalBytes >= texture_stats_upload_threshold)
+		{
+			LLSD texture_data;
+			std::stringstream startTime;
+			startTime << mCurrentStatsBundleStartTime;
+			texture_data["start_time"] = startTime.str();
+			std::stringstream endTime;
+			endTime << completeTime;
+			texture_data["end_time"] = endTime.str();
+			texture_data["averages"] = getAverages();
+			send_texture_stats_to_sim(texture_data);
+			resetTextureStatistics();
+		}
+	}
+
+	mTextures.erase(id);
+}
+
+LLSD LLTextureInfo::getAverages()
+{
+	LLSD averagedTextureData;
+	S32 averageDownloadRate;
+	if(mTotalMilliseconds == 0)
+	{
+		averageDownloadRate = 0;
+	}
+	else
+	{
+		averageDownloadRate = (mTotalBytes * 8) / mTotalMilliseconds;
+	}
+
+	averagedTextureData["bits_per_second"] = averageDownloadRate;
+	averagedTextureData["bytes_downloaded"] = mTotalBytes;
+	averagedTextureData["texture_downloads_started"] = mTextureDownloadsStarted;
+	averagedTextureData["texture_downloads_completed"] = mTextureDownloadsCompleted;
+	averagedTextureData["transport"] = mTextureDownloadProtocol;
+
+	return averagedTextureData;
+}
+
+void LLTextureInfo::resetTextureStatistics()
+{
+	mTotalMilliseconds = 0;
+	mTotalBytes = 0;
+	mTextureDownloadsStarted = 0;
+	mTextureDownloadsCompleted = 0;
+	mTextureDownloadProtocol = "NONE";
+	mCurrentStatsBundleStartTime = LLTimer::getTotalTime();
+}
+
+U32 LLTextureInfo::getRequestStartTime(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mStartTime;
+	}
+}
+
+U32 LLTextureInfo::getRequestSize(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mSize;
+	}
+}
+
+U32 LLTextureInfo::getRequestOffset(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mOffset;
+	}
+}
+
+LLTextureInfoDetails::LLRequestType LLTextureInfo::getRequestType(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return LLTextureInfoDetails::REQUEST_TYPE_NONE;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mType;
+	}
+}
+
+U32 LLTextureInfo::getRequestCompleteTime(const LLUUID& id)
+{
+	if (!has(id))
+	{
+		return 0;
+	}
+	else
+	{
+		std::map<LLUUID, LLTextureInfoDetails *>::iterator iterator = mTextures.find(id);
+		return (*iterator).second->mCompleteTime;
+	}
+}
+
diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..71b0ea431fdddf1a00a8b35f6082d0c1ce14431e
--- /dev/null
+++ b/indra/newview/lltextureinfo.h
@@ -0,0 +1,80 @@
+/** 
+ * @file lltextureinfo.h
+ * @brief Object for managing texture information.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTUREINFO_H
+#define LL_LLTEXTUREINFO_H
+
+#include "lluuid.h"
+#include "lltextureinfodetails.h"
+#include <map>
+
+class LLTextureInfo
+{
+public:
+	LLTextureInfo();
+	~LLTextureInfo();
+
+	void setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold);
+	bool has(const LLUUID& id);
+	void setRequestStartTime(const LLUUID& id, U64 startTime);
+	void setRequestSize(const LLUUID& id, U32 size);
+	void setRequestOffset(const LLUUID& id, U32 offset);
+	void setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type);
+	void setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime);
+	U32 getRequestStartTime(const LLUUID& id);
+	U32 getRequestSize(const LLUUID& id);
+	U32 getRequestOffset(const LLUUID& id);
+	LLTextureInfoDetails::LLRequestType getRequestType(const LLUUID& id);
+	U32 getRequestCompleteTime(const LLUUID& id);
+	void resetTextureStatistics();
+	U32 getTextureInfoMapSize();
+	LLSD getAverages();
+
+private:
+	void addRequest(const LLUUID& id);
+
+	std::map<LLUUID, LLTextureInfoDetails *> mTextures;
+
+	LLSD mAverages;
+
+	bool mLogTextureDownloadsToViewerLog;
+	bool mLogTextureDownloadsToSimulator;
+	S32 mTotalBytes;
+	S32 mTotalMilliseconds;
+	S32 mTextureDownloadsStarted;
+	S32 mTextureDownloadsCompleted;
+	std::string mTextureDownloadProtocol;
+	U32 mTextureLogThreshold; // in bytes
+	U64 mCurrentStatsBundleStartTime;
+};
+
+#endif // LL_LLTEXTUREINFO_H
diff --git a/indra/newview/lltextureinfodetails.cpp b/indra/newview/lltextureinfodetails.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f6ef47a2ee5460bcece0336bd54c44cbe2110705
--- /dev/null
+++ b/indra/newview/lltextureinfodetails.cpp
@@ -0,0 +1,40 @@
+/** 
+ * @file lltextureinfodetails.cpp
+ * @brief Object which handles details of any individual texture
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltextureinfodetails.h"
+
+LLTextureInfoDetails::LLTextureInfoDetails() : mStartTime(0), mCompleteTime(0), mSize(0), mType(REQUEST_TYPE_NONE), mOffset(0)
+{
+}
+
diff --git a/indra/newview/lltextureinfodetails.h b/indra/newview/lltextureinfodetails.h
new file mode 100644
index 0000000000000000000000000000000000000000..091fa01a3d7fe1829168b62ecaf4097bab654e78
--- /dev/null
+++ b/indra/newview/lltextureinfodetails.h
@@ -0,0 +1,58 @@
+/** 
+ * @file lltextureinfo.h
+ * @brief Object for managing texture information.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTUREINFODETAILS_H
+#define LL_LLTEXTUREINFODETAILS_H
+
+#include "lluuid.h"
+
+class LLTextureInfoDetails
+{
+public:
+	enum LLRequestType
+	{
+		REQUEST_TYPE_NONE,
+		REQUEST_TYPE_HTTP,
+		REQUEST_TYPE_UDP
+	};
+
+	U32 mStartTime;
+	U32 mCompleteTime;
+	U32 mOffset;
+	U32 mSize;
+	LLRequestType mType;
+
+	LLTextureInfoDetails();
+};
+
+#endif // LL_LLTEXTUREINFODETAILS_H
+
diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c91bfd4df2a8c50bc059b2b29e3d21b417ba006c
--- /dev/null
+++ b/indra/newview/lltexturestats.cpp
@@ -0,0 +1,61 @@
+/** 
+ * @file lltexturerstats.cpp
+ * @brief texture stats helper methods
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "pipeline.h" 
+#include "llagent.h"
+#include "lltexturefetch.h" 
+#include "lltexturestats.h"
+#include "lltexturestatsuploader.h"
+#include "llviewerregion.h"
+
+void send_texture_stats_to_sim(const LLSD &texture_stats)
+{
+	LLSD texture_stats_report;
+	// Only send stats if the agent is connected to a region.
+	if (!gAgent.getRegion() || gNoRender)
+	{
+		return;
+	}
+
+	LLUUID agent_id = gAgent.getID();
+	texture_stats_report["agent_id"] = agent_id;
+	texture_stats_report["region_id"] = gAgent.getRegion()->getRegionID();
+	texture_stats_report["stats_data"] = texture_stats;
+
+	std::string texture_cap_url = gAgent.getRegion()->getCapability("TextureStats");
+	LLTextureStatsUploader tsu;
+	llinfos << "uploading texture stats data to simulator" << llendl;
+	tsu.uploadStatsToSimulator(texture_cap_url, texture_stats);
+}
+
diff --git a/indra/newview/lltexturestats.h b/indra/newview/lltexturestats.h
new file mode 100644
index 0000000000000000000000000000000000000000..2deb377dfdd13c809d1ccb014bffca437d9eb29b
--- /dev/null
+++ b/indra/newview/lltexturestats.h
@@ -0,0 +1,41 @@
+/** 
+ * @file lltexturestats.h
+ * @brief texture stats utilities
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTURESTATS_H
+#define LL_LLTEXTURESTATS_H
+
+#include "llappviewer.h"
+
+// utility functions to capture data on texture download speeds and send to simulator periodically
+void send_texture_stats_to_sim(const LLSD &texture_stats);
+
+#endif // LL_LLTEXTURESTATS_H
diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e0358e1fcafbdff4d942df50d8534df18871f457
--- /dev/null
+++ b/indra/newview/lltexturestatsuploader.cpp
@@ -0,0 +1,59 @@
+/** 
+ * @file lltexturerstats.cpp
+ * @brief texture stats upload class
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltexturestatsuploader.h"
+
+LLTextureStatsUploader::LLTextureStatsUploader()
+{
+}
+
+LLTextureStatsUploader::~LLTextureStatsUploader()
+{
+}
+
+void LLTextureStatsUploader::uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats)
+{
+	if ( texture_cap_url != "" )
+	{
+		LLHTTPClient::post(texture_cap_url, texture_stats, NULL);
+	}
+	else
+	{
+		llinfos << "Not sending texture stats: " 
+				<< texture_stats 
+				<< " as there is no cap url." 
+				<< llendl;
+	}
+}
+
diff --git a/indra/newview/lltexturestatsuploader.h b/indra/newview/lltexturestatsuploader.h
new file mode 100644
index 0000000000000000000000000000000000000000..f6cc8be8fe9aec874694a543023bc4bbbe74746f
--- /dev/null
+++ b/indra/newview/lltexturestatsuploader.h
@@ -0,0 +1,48 @@
+/** 
+ * @file lltexturestatsuploader.h
+ * @brief Class to send the texture stats to the simulatore
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTEXTURESTATSUPLOADER_H
+#define LL_LLTEXTURESTATSUPLOADER_H
+
+#include "llappviewer.h"
+
+// utility functions to capture data on texture download speeds and send to simulator periodically
+
+class LLTextureStatsUploader
+{
+public:
+	LLTextureStatsUploader();
+	~LLTextureStatsUploader();
+	void uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats);
+};
+
+#endif // LL_LLTEXTURESTATSUPLOADER_H
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index ea675c5a6e48646fa51113f7a1f277b3fc04e46f..b6e20608eb4d55d4e6545c6d142f555918dc7730 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -44,19 +44,21 @@
 #include "llrender.h"
 
 #include "lltooltip.h"
+#include "llappviewer.h"
 #include "llselectmgr.h"
 #include "lltexlayer.h"
 #include "lltexturecache.h"
 #include "lltexturefetch.h"
+#include "llviewercontrol.h"
 #include "llviewerobject.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
-#include "llappviewer.h"
-
+#include "llvovolume.h"
 extern F32 texmem_lower_bound_scale;
 
 LLTextureView *gTextureView = NULL;
 LLTextureSizeView *gTextureSizeView = NULL;
+LLTextureSizeView *gTextureCategoryView = NULL;
 
 //static
 std::set<LLViewerFetchedTexture*> LLTextureView::sDebugImages;
@@ -168,7 +170,7 @@ void LLTextureBar::draw()
 	{
 		color = LLColor4::green4;
 	}
-	else if (mImagep->getBoostLevel())
+	else if (mImagep->getBoostLevel() > LLViewerTexture::BOOST_NONE)
 	{
 		color = LLColor4::magenta;
 	}
@@ -230,10 +232,10 @@ void LLTextureBar::draw()
 		{ "DSK", LLColor4::blue },	// CACHE_POST
 		{ "NET", LLColor4::green },	// LOAD_FROM_NETWORK
 		{ "SIM", LLColor4::green },	// LOAD_FROM_SIMULATOR
-		{ "URL", LLColor4::green2 },// LOAD_FROM_HTTP_GET_URL
-		{ "HTP", LLColor4::green },	// LOAD_FROM_HTTP_GET_DATA
+		{ "REQ", LLColor4::yellow },// SEND_HTTP_REQ
+		{ "HTP", LLColor4::green },	// WAIT_HTTP_REQ
 		{ "DEC", LLColor4::yellow },// DECODE_IMAGE
-		{ "DEC", LLColor4::yellow },// DECODE_IMAGE_UPDATE
+		{ "DEC", LLColor4::green }, // DECODE_IMAGE_UPDATE
 		{ "WRT", LLColor4::purple },// WRITE_TO_CACHE
 		{ "WRT", LLColor4::orange },// WAIT_ON_WRITE
 		{ "END", LLColor4::red },   // DONE
@@ -261,7 +263,7 @@ void LLTextureBar::draw()
 
 	// Draw the progress bar.
 	S32 bar_width = 100;
-	S32 bar_left = 280;
+	S32 bar_left = 260;
 	left = bar_left;
 	right = left + bar_width;
 
@@ -286,30 +288,31 @@ void LLTextureBar::draw()
 	S32 pip_x = title_x3 + pip_space/2;
 	
 	// Draw the packet pip
+	const F32 pip_max_time = 5.f;
 	F32 last_event = mImagep->mLastPacketTimer.getElapsedTimeF32();
-	if (last_event < 1.f)
+	if (last_event < pip_max_time)
 	{
 		clr = LLColor4::white; 
 	}
 	else
 	{
 		last_event = mImagep->mRequestDeltaTime;
-		if (last_event < 1.f)
+		if (last_event < pip_max_time)
 		{
 			clr = LLColor4::green;
 		}
 		else
 		{
 			last_event = mImagep->mFetchDeltaTime;
-			if (last_event < 1.f)
+			if (last_event < pip_max_time)
 			{
 				clr = LLColor4::yellow;
 			}
 		}
 	}
-	if (last_event < 1.f)
+	if (last_event < pip_max_time)
 	{
-		clr.setAlpha(1.f - last_event);
+		clr.setAlpha(1.f - last_event/pip_max_time);
 		gGL.color4fv(clr.mV);
 		gl_rect_2d(pip_x, top, pip_x + pip_width, bottom);
 	}
@@ -406,89 +409,113 @@ void LLGLTexMemBar::draw()
 	S32 total_mem = BYTES_TO_MEGA_BYTES(LLViewerTexture::sTotalTextureMemoryInBytes);
 	S32 max_total_mem = LLViewerTexture::sMaxTotalTextureMemInMegaBytes;
 	F32 discard_bias = LLViewerTexture::sDesiredDiscardBias;
+	F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;
+	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;
 	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
 	S32 h_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f);
 	//----------------------------------------------------------------------------
 	LLGLSUIDefault gls_ui;
-	F32 text_color[] = {1.f, 1.f, 1.f, 0.75f};
+	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
+	LLColor4 color;
 	
 	std::string text;
-	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Discard Bias: %.2f",
+	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB",
 					total_mem,
 					max_total_mem,
 					bound_mem,
 					max_bound_mem,
-					discard_bias);
+					LLImageRaw::sGlobalRawMemory >> 20,					discard_bias,
+					cache_usage, cache_max_usage);
+	//, cache_entries, cache_max_entries
 
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*3,
-									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
 
 	//----------------------------------------------------------------------------
-	S32 bar_left = 380;
+#if 0
+	S32 bar_left = 400;
 	S32 bar_width = 200;
 	S32 top = line_height*3 - 2 + h_offset;
 	S32 bottom = top - 6;
 	S32 left = bar_left;
 	S32 right = left + bar_width;
-
-	F32 bar_scale = (F32)bar_width / (max_bound_mem * 1.5f);
+	F32 bar_scale;
 	
 	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	
-	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f);
-	gl_rect_2d(left, top, right, bottom);
 
-	
+	// GL Mem Bar
+		
 	left = bar_left;
-	right = left + llfloor(bound_mem * bar_scale);
-	if (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale))
-	{
-		gGL.color4f(0.f, 1.f, 0.f, 0.75f);
-	}
-	else if (bound_mem < max_bound_mem)
-	{
-		gGL.color4f(1.f, 1.f, 0.f, 0.75f);
-	}
-	else
-	{
-		gGL.color4f(1.f, 0.f, 0.f, 0.75f);
-	}
+	text = "GL";
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3,
+											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	
+	left = bar_left+20;
+	right = left + bar_width;
+	
+	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f); // grey
 	gl_rect_2d(left, top, right, bottom);
 
 	bar_scale = (F32)bar_width / (max_total_mem * 1.5f);
+	right = left + llfloor(total_mem * bar_scale);
+	right = llclamp(right, bar_left, bar_left + bar_width);
 	
-	top = bottom - 2;
-	bottom = top - 6;
+	color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green :
+		  	(total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red;
+	color[VALPHA] = .75f;
+	glColor4fv(color.mV);
+	
+	gl_rect_2d(left, top, right, bottom); // red/yellow/green
+
+	//
+	bar_left += bar_width + bar_space;
+	//top = bottom - 2; bottom = top - 6;
+	
+	// Bound Mem Bar
+
 	left = bar_left;
-	right = left + llfloor(total_mem * bar_scale);
-	if (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale))
-	{
-		gGL.color4f(0.f, 1.f, 0.f, 0.75f);
-	}
-	else if (total_mem < max_total_mem)
-	{
-		gGL.color4f(1.f, 1.f, 0.f, 0.75f);
-	}
-	else
-	{
-		gGL.color4f(1.f, 0.f, 0.f, 0.75f);
-	}
+	text = "GL";
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*3,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	left = bar_left + 20;
+	right = left + bar_width;
+	
+	gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f);
 	gl_rect_2d(left, top, right, bottom);
 
+	color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green :
+		  	(bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red;
+	color[VALPHA] = .75f;
+	glColor4fv(color.mV);
+
+	gl_rect_2d(left, top, right, bottom);
+#else
+	S32 left = 0 ;
+#endif
 	//----------------------------------------------------------------------------
 
-	text = llformat("Textures: Count: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d(%d) RAW:%d mRaw:%d mAux:%d CB:%d",
+	text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d IW:%d RAW:%d HTP:%d",
 					gTextureList.getNumImages(),
 					LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(),
 					LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount, 
 					LLAppViewer::getTextureCache()->getNumReads(), LLAppViewer::getTextureCache()->getNumWrites(),
 					LLLFSThread::sLocal->getPending(),
-					LLImageWorker::sCount, LLImageWorker::getWorkerThread()->getNumDeletes(),
-					LLImageRaw::sRawImageCount, LLViewerFetchedTexture::sRawCount, LLViewerFetchedTexture::sAuxCount,
-					gTextureList.mCallbackList.size());
+					LLAppViewer::getImageDecodeThread()->getPending(), 
+					LLImageRaw::sRawImageCount,
+					LLAppViewer::getTextureFetch()->getNumHTTPRequests());
 
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, h_offset + line_height*2,
 									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+
+	left = 550;
+	F32 bandwidth = LLAppViewer::getTextureFetch()->getTextureBandwidth();
+	F32 max_bandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
+	color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
+	color[VALPHA] = text_color[VALPHA];
+	text = llformat("BW:%.0f/%.0f",bandwidth, max_bandwidth);
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*2,
+											 color, LLFontGL::LEFT, LLFontGL::TOP);
 	
 	S32 dx1 = 0;
 	if (LLAppViewer::getTextureFetch()->mDebugPause)
@@ -555,7 +582,7 @@ class LLGLTexSizeBar
 	void setTop(S32 loaded, S32 bound, F32 scale) {mTopLoaded = loaded ; mTopBound = bound; mScale = scale ;}
 
 	void draw();	
-	BOOL handleHover(S32 x, S32 y, MASK mask) ;
+	BOOL handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) ;
 	
 private:
 	S32 mIndex ;
@@ -568,19 +595,16 @@ class LLGLTexSizeBar
 	F32 mScale ;
 };
 
-BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask) 
+BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask, BOOL set_pick_size) 
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
 	if(y > mBottom && (y < mBottom + (S32)(mTopLoaded * mScale) || y < mBottom + (S32)(mTopBound * mScale)))
 	{
-		LLImageGL::setCurTexSizebar(mIndex);
+		LLImageGL::setCurTexSizebar(mIndex, set_pick_size);
 	}
-#endif
 	return TRUE ;
 }
 void LLGLTexSizeBar::draw()
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
 	LLGLSUIDefault gls_ui;
 
 	if(LLImageGL::sCurTexSizeBar == mIndex)
@@ -601,7 +625,6 @@ void LLGLTexSizeBar::draw()
 	F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f};
 	gl_rect_2d(mLeft, mBottom + (S32)(mTopLoaded * mScale), (mLeft + mRight) / 2, mBottom, loaded_color) ;
 	gl_rect_2d((mLeft + mRight) / 2, mBottom + (S32)(mTopBound * mScale), mRight, mBottom, bound_color) ;
-#endif
 }
 ////////////////////////////////////////////////////////////////////////////
 
@@ -675,7 +698,13 @@ void LLTextureView::draw()
 						<< "\t" << cur_discard
 						<< llendl;
 			}
-		
+
+			if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID)
+			{
+				static S32 debug_count = 0;
+				++debug_count; // for breakpoints
+			}
+			
 #if 0
 			if (imagep->getDontDiscard())
 			{
@@ -889,8 +918,7 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent)
 }
 
 //-----------------------------------------------------------------
-LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p)
-	: LLView(p)
+LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p) : LLContainerView(p)
 {
 	setVisible(FALSE) ;
 
@@ -910,7 +938,31 @@ LLTextureSizeView::~LLTextureSizeView()
 }
 void LLTextureSizeView::draw()
 {
-#if !LL_RELEASE_FOR_DOWNLOAD
+	if(mType == TEXTURE_MEM_OVER_SIZE)
+	{
+		drawTextureSizeGraph();
+	}
+	else
+	{
+		drawTextureCategoryGraph() ;
+	}
+	
+	LLView::draw();
+}
+
+BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) 
+{
+	if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight)
+	{
+		mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask, (mType == TEXTURE_MEM_OVER_SIZE)) ;
+	}
+
+	return TRUE ;
+}
+
+//draw real-time texture mem bar over size
+void LLTextureSizeView::drawTextureSizeGraph()
+{
 	if(mTextureSizeBar.size() == 0)
 	{
 		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
@@ -931,29 +983,16 @@ void LLTextureSizeView::draw()
 		mTextureSizeBar[i]->draw() ;
 	}		
 	LLImageGL::resetCurTexSizebar();
-
-	LLView::draw();
-#endif
-}
-
-BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) 
-{
-	if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight)
-	{
-		mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask) ;
-	}
-
-	return TRUE ;
 }
 
 //draw background of texture size bar graph
 F32 LLTextureSizeView::drawTextureSizeDistributionGraph()
 {	
+	//scale
 	F32 scale = 1.0f ;
-#if !LL_RELEASE_FOR_DOWNLOAD
+	
 	LLGLSUIDefault gls_ui;
 
-	//scale	
 	{
 		S32 count = 0 ;
 		for(U32 i = 0 ; i < LLImageGL::sTextureLoadedCounter.size() ; i++)
@@ -1043,8 +1082,137 @@ F32 LLTextureSizeView::drawTextureSizeDistributionGraph()
 	text = llformat("Texture Size Distribution") ;
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3,
 									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
-
-#endif	
 	return scale ;
 }
 
+//draw real-time texture mem bar over category
+void LLTextureSizeView::drawTextureCategoryGraph()
+{
+	if(mTextureSizeBar.size() == 0)
+	{
+		S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+		mTextureSizeBar.resize(LLViewerTexture::getTotalNumOfCategories()) ;
+		mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ;
+		
+		for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++)
+		{				
+			mTextureSizeBar[i] = new LLGLTexSizeBar(i, mTextureSizeBarRect.mLeft + i * mTextureSizeBarWidth , 
+				line_height * 2, mTextureSizeBarRect.mLeft + (i + 1) * mTextureSizeBarWidth, line_height) ;				
+		}			
+	}
+
+	F32 size_bar_scale = drawTextureCategoryDistributionGraph() ;		
+	for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++)
+	{
+		U32 k = LLViewerTexture::getIndexFromCategory(i) ;
+		mTextureSizeBar[i]->setTop(LLImageGL::sTextureMemByCategory[k] >> 20, LLImageGL::sTextureMemByCategoryBound[k] >> 20, size_bar_scale) ;
+		mTextureSizeBar[i]->draw() ;
+	}		
+	LLImageGL::resetCurTexSizebar();
+}
+
+//draw background for TEXTURE_MEM_OVER_CATEGORY
+F32 LLTextureSizeView::drawTextureCategoryDistributionGraph() 
+{
+	//scale
+	F32 scale = 4.0f ;
+	
+	LLGLSUIDefault gls_ui;
+
+	{
+		S32 count = 0 ;
+		for(U32 i = 0 ; i < LLImageGL::sTextureMemByCategory.size() ; i++)
+		{
+			S32 tmp = LLImageGL::sTextureMemByCategory[i] >> 20 ;
+			if(tmp > count)
+			{
+				count = tmp ;
+			}
+		}
+		if(count > mTextureSizeBarRect.getHeight() * 0.25f)
+		{
+			scale = (F32)mTextureSizeBarRect.getHeight() * 0.25f / count ;
+		}
+	}
+
+	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
+	S32 left = mTextureSizeBarRect.mLeft ;
+	S32 bottom = mTextureSizeBarRect.mBottom ;
+	S32 right = mTextureSizeBarRect.mRight ;
+	S32 top = mTextureSizeBarRect.mTop ;
+
+	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	
+	//background rect
+	gl_rect_2d(left - 25, top + 30, right + 100, bottom - 25, LLColor4(0.0f, 0.0f, 0.0f, 0.25f)) ;
+
+	//--------------------------------------------------
+	gGL.color4f(1.0f, 0.5f, 0.5f, 0.75f);
+	gl_line_2d(left, bottom, right, bottom) ; //x axis
+	gl_line_2d(left, bottom, left, top) ; //y axis
+
+	//ruler
+	//--------------------------------------------------
+	gGL.color4f(1.0f, 0.5f, 0.5f, 0.5f);
+	for(S32 i = bottom + 50 ; i <= top ; i += 50)
+	{
+		gl_line_2d(left, i, right, i) ;
+	}
+
+	//texts
+	//--------------------------------------------------
+	F32 text_color[] = {1.f, 1.f, 1.f, 0.75f};	
+	std::string text;
+	
+	//-------
+	//x axis: size label			
+	static char category[LLViewerTexture::MAX_GL_IMAGE_CATEGORY][4] = 
+	{"Non", "Bak", "Av", "Cld", "Scp", "Hi", "Trn", "Slt", "Hud", "Bsf", "UI", "Pvw", "Map", "Mvs", "Slf", "Loc", "Scr", "Dyn", "Mdi", "ALT", "Oth" } ;
+
+	text = llformat("%s", category[0]) ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 12, bottom - line_height / 2,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	for(U32 i = 1 ; i < mTextureSizeBar.size() ; i++)
+	{
+		text = llformat("%s", category[i]) ;
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + i * mTextureSizeBarWidth + 12, bottom - line_height / 2,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	}
+	//-------
+
+	//y axis: number label
+	for(S32 i = bottom + 50 ; i <= top ; i += 50)
+	{
+		text = llformat("%d", (S32)((i - bottom) / scale)) ;
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, i + line_height / 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+		LLFontGL::getFontMonospace()->renderUTF8(text, 0, right + 5, i + line_height / 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	}
+
+	text = llformat("MB") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, top + line_height * 2 ,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+	//--------------------------------------------------
+	F32 loaded_color[] = {1.0f, 0.0f, 0.0f, 0.75f};
+	gl_rect_2d(left + 70, top + line_height * 2, left + 90, top + line_height, loaded_color) ;
+	text = llformat("Loaded") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 100, top + line_height * 2,
+									 loaded_color, 
+									 LLFontGL::LEFT, LLFontGL::TOP);
+
+	F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f};
+	gl_rect_2d(left + 170, top + line_height * 2, left + 190, top + line_height, bound_color) ;
+	text = llformat("Bound") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 200, top + line_height * 2,
+									 bound_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+	//--------------------------------------------------
+
+	//title
+	text = llformat("Texture Category Distribution") ;
+	LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3,
+									 text_color, LLFontGL::LEFT, LLFontGL::TOP);
+
+	return scale ;
+}
diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h
index e917c0235e7aff3e0282b530a1208d99fa01e0d5..435a55df8357a35dfa21fe95952fcc7224cfae45 100644
--- a/indra/newview/lltextureview.h
+++ b/indra/newview/lltextureview.h
@@ -79,24 +79,41 @@ class LLTextureView : public LLContainerView
 };
 
 class LLGLTexSizeBar;
-
-class LLTextureSizeView : public LLView
+class LLTextureSizeView : public LLContainerView
 {
-public:
+protected:
 	LLTextureSizeView(const Params&);
+	friend class LLUICtrlFactory;
+public:	
 	~LLTextureSizeView();
 
 	/*virtual*/ void draw();
 	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) ;
 	
+	void setType(S32 type) {mType = type ;}
+	enum
+	{
+		TEXTURE_MEM_OVER_SIZE,
+		TEXTURE_MEM_OVER_CATEGORY
+	};
 private:
+	//draw background for TEXTURE_MEM_OVER_SIZE
 	F32 drawTextureSizeDistributionGraph() ;
-	
+	//draw real-time texture mem bar over size
+	void drawTextureSizeGraph();
+
+	//draw background for TEXTURE_MEM_OVER_CATEGORY
+	F32 drawTextureCategoryDistributionGraph() ;
+	//draw real-time texture mem bar over category
+	void drawTextureCategoryGraph();
+
 private:
 	std::vector<LLGLTexSizeBar*> mTextureSizeBar ;
 	LLRect mTextureSizeBarRect ;
-	S32    mTextureSizeBarWidth ;
+	S32    mTextureSizeBarWidth ;	
+	S32    mType ;
 };
 extern LLTextureView *gTextureView;
 extern LLTextureSizeView *gTextureSizeView;
+extern LLTextureSizeView *gTextureCategoryView;
 #endif // LL_TEXTURE_VIEW_H
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index e4a3f8603b856f4f4ac8c3bbc8e04bcde02a45bc..beb31bc83342f9b6f62ea94d052cbf5560c0cba4 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -30,6 +30,9 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
@@ -56,7 +59,7 @@ const F32 DEFAULT_BUTTON_DELAY = 0.5f;
 const S32 MSG_PAD = 8;
 
 /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;
-/*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader;
+/*static*/ LLAlertURLLoader* LLToastAlertPanel::sURLLoader;
 
 //-----------------------------------------------------------------------------
 // Private methods
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
index af0c9a9ddd9525ce631848c999b5732bad3f787c..840143a2a933e388e3f92463adc151710fa434ce 100644
--- a/indra/newview/lltoastalertpanel.h
+++ b/indra/newview/lltoastalertpanel.h
@@ -30,6 +30,10 @@
  * $/LicenseInfo$
  */
 
+// *NOTE: this module is a copy-paste of llui/llalertdialog.h
+// Can we re-implement this as a subclass of LLAlertDialog and
+// avoid all this code duplication? It already caused EXT-2232.
+
 #ifndef LL_TOASTALERTPANEL_H
 #define LL_TOASTALERTPANEL_H
 
@@ -37,6 +41,7 @@
 #include "llfloater.h"
 #include "llui.h"
 #include "llnotifications.h"
+#include "llalertdialog.h"
 
 class LLButton;
 class LLCheckBoxCtrl;
@@ -57,14 +62,7 @@ class LLToastAlertPanel
 public:
 	typedef bool (*display_callback_t)(S32 modal);
 
-	class URLLoader
-	{
-	public:
-		virtual void load(const std::string& url,  bool force_open_externally = 0 ) = 0;
-		virtual ~URLLoader() {}
-	};
-	
-	static void setURLLoader(URLLoader* loader)
+	static void setURLLoader(LLAlertURLLoader* loader)
 	{
 		sURLLoader = loader;
 	}
@@ -97,7 +95,7 @@ class LLToastAlertPanel
 	BOOL hasTitleBar() const;
 
 private:
-	static URLLoader* sURLLoader;
+	static LLAlertURLLoader* sURLLoader;
 	static LLControlGroup* sSettings;
 
 	struct ButtonData
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index e26a0776ff44ddb07931b5708a05a815352714ee..f82573f46cd4400af4af66b1acfab7b5a98e0a05 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -38,6 +38,7 @@
 
 #include "llbutton.h"
 #include "lliconctrl.h"
+#include "llinventoryfunctions.h"
 #include "llnotify.h"
 #include "lltextbox.h"
 
@@ -219,7 +220,6 @@ bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type)
 	switch(type)
 	{
 	case LLAssetType::AT_LANDMARK:
-	case LLAssetType::AT_FAVORITE:
 	case LLAssetType::AT_NOTECARD:
 	case LLAssetType::AT_IMAGE_JPEG:
 	case LLAssetType::AT_IMAGE_TGA:
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 643a81be1f668a1ffe4174ba4d5d0e84805e9d4e..ec21710d526450065e9189b41f52ebdad064356a 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -92,7 +92,7 @@ class LLNoPreferredType : public LLInventoryCollectFunctor
 	virtual bool operator()(LLInventoryCategory* cat,
 							LLInventoryItem* item)
 	{
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -109,7 +109,7 @@ class LLNoPreferredTypeOrItem : public LLInventoryCollectFunctor
 							LLInventoryItem* item)
 	{
 		if(item) return true;
-		if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE))
+		if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE))
 		{
 			return true;
 		}
@@ -1327,8 +1327,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
 
 	// Check if it's in the trash.
 	bool is_in_trash = false;
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		is_in_trash = true;
@@ -2099,7 +2098,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(
 	if(!item || !item->isComplete()) return ACCEPT_NO;
 
 	// must not be in the trash
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 	{
 		return ACCEPT_NO;
@@ -2181,8 +2180,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2260,8 +2258,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(
 	}
 
 	// Check if it's in the trash.
-	LLUUID trash_id;
-	trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 	{
 		accept = ACCEPT_YES_SINGLE;
@@ -2399,7 +2396,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2454,7 +2451,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
 	if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY)
 	{
 		// it's in the agent inventory
-		LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
@@ -2513,7 +2510,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
 
 	if(mSource == SOURCE_AGENT)
 	{
-		LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) )
 		{
 			return ACCEPT_NO;
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 304f1dffaf009f7a248b2f771cd4e6b9a13bb4b2..93da32b115f2f38e851b0e5bc167588dd2f9cf8f 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -494,6 +494,8 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 	}
 	else if (handleMediaHover(mHoverPick))
 	{
+		// *NOTE: If you think the hover glow conflicts with the media outline, you
+		// could disable it here.
 		show_highlight = true;
 		// cursor set by media object
 		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
@@ -598,6 +600,9 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
 
 static bool needs_tooltip(LLSelectNode* nodep)
 {
+	if (!nodep) 
+		return false;
+
 	LLViewerObject* object = nodep->getObject();
 	LLViewerObject *parent = (LLViewerObject *)object->getParent();
 	if (object->flagHandleTouch()
@@ -758,14 +763,14 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 								{
 									is_time_based_media = true;
 									is_web_based_media = false;
-									args["[CurrentURL]"] =  media_impl->getMediaURL();
+									//args["[CurrentURL]"] =  media_impl->getMediaURL();
 									is_media_playing = media_impl->isMediaPlaying();
 								}
 								else
 								{
 									is_time_based_media = false;
 									is_web_based_media = true;
-									args["[CurrentURL]"] =  media_plugin->getLocation();
+									//args["[CurrentURL]"] =  media_plugin->getLocation();
 								}
 								//tooltip_msg.append(LLTrans::getString("CurrentURL", args));
 							}
@@ -773,7 +778,10 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
 					}
 				}
 				
-				bool needs_tip = needs_tooltip(nodep);
+				// also check the primary node since sometimes it can have an action even though
+				// the root node doesn't
+				bool needs_tip = needs_tooltip(nodep) || 
+					             needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode());
 
 				if (show_all_object_tips || needs_tip)
 				{
@@ -1033,31 +1041,28 @@ void LLToolPie::playCurrentMedia(const LLPickInfo& info)
 	if(!mep)
 		return;
 	
+	//TODO: Can you Use it? 
+
 	LLPluginClassMedia* media_plugin = NULL;
 	
-//	if (gSavedSettings.getBOOL("MediaOnAPrimUI"))
-//	{		
-		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
 		
-		if(media_impl.notNull() && media_impl->hasMedia())
+	if(media_impl.notNull() && media_impl->hasMedia())
+	{
+		media_plugin = media_impl->getMediaPlugin();
+		if (media_plugin && media_plugin->pluginSupportsMediaTime())
 		{
-			media_plugin = media_impl->getMediaPlugin();
-			
-			if (media_plugin && media_plugin->pluginSupportsMediaTime())
+			if(media_impl->isMediaPlaying())
 			{
-				if(media_impl->isMediaPlaying())
-				{
-					media_impl->pause();
-				}
-				else //if(media_impl->isMediaPaused())
-				{
-					media_impl->play();
-				}
-				
+				media_impl->pause();
+			}
+			else 
+			{
+				media_impl->play();
 			}
-					
 		}
-//	 }
+	}
+
 
 }
 
@@ -1088,6 +1093,8 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info)
 	if(!mep)
 		return;
 	
+	//TODO: Can you Use it? 
+	
 	LLPluginClassMedia* media_plugin = NULL;
 	
 	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 5929ecd928a5a358683ffb85203b2847f137c507..1a6171765880bb5b7e90f34df9b8f7acc80f4837 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -416,10 +416,10 @@ F32 pulse_func(F32 t, F32 z)
 		return 0.f;
 	}
 	
-	t *= 3.14159f;
+	t *= F_PI;
 	z -= t*64.f - 256.f;
 	
-	F32 a = cosf(z*3.14159/512.f)*10.0f;
+	F32 a = cosf(z*F_PI/512.f)*10.0f;
 	a = llmax(a, 9.9f);
 	a -= 9.9f;
 	a *= 10.f;
@@ -433,7 +433,7 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color)
 		return;
 	}
 	
-	t *= 0.6284f/3.14159f;
+	t *= 0.6284f/F_PI;
 	
 	t -= (F32) (S32) t;	
 
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 841902f6833dd733a36cd7a31488dad340d1de10..a3daca6fa42947c000fd80095cb4775373a5efe3 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -46,7 +46,7 @@
 #include "llstartup.h"			// gStartupState
 #include "llurlsimstring.h"
 #include "llweb.h"
-#include "llworldmap.h"
+#include "llworldmapmessage.h"
 
 // library includes
 #include "llsd.h"
@@ -201,7 +201,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const std::string& url, bool right_mous
 	//if(url_displayp) url_displayp->setName(region_name);
 
 	// Request a region handle by name
-	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
+	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
 									  LLURLDispatcherImpl::regionNameCallback,
 									  url,
 									  false);	// don't teleport
@@ -240,7 +240,7 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin
 		LLVector3d global_pos = from_region_handle(region_handle) + LLVector3d(local_pos);
 
 		U64 new_region_handle = to_region_handle(global_pos);
-		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle,
+		LLWorldMapMessage::getInstance()->sendHandleRegionRequest(new_region_handle,
 										   LLURLDispatcherImpl::regionHandleCallback,
 										   url, teleport);
 	}
@@ -335,7 +335,7 @@ class LLTeleportHandler : public LLCommandHandler
 		{
 			url += tokens[i].asString() + "/";
 		}
-		LLWorldMap::getInstance()->sendNamedRegionRequest(region_name,
+		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
 			LLURLDispatcherImpl::regionHandleCallback,
 			url,
 			true);	// teleport
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a74ae827e2206b7aefc780f7be14f142d0f02957
--- /dev/null
+++ b/indra/newview/llviewerassettype.cpp
@@ -0,0 +1,116 @@
+/** 
+ * @file llassettype.cpp
+ * @brief Implementatino of LLViewerAssetType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerassettype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+
+static const std::string empty_string;
+
+struct ViewerAssetEntry : public LLDictionaryEntry
+{
+	ViewerAssetEntry(EDragAndDropType dad_type // drag and drop type
+		)
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed for now, so just leave this blank
+		mDadType(dad_type)
+	{
+	}
+	EDragAndDropType mDadType;
+};
+
+class LLViewerAssetDictionary : public LLSingleton<LLViewerAssetDictionary>,
+						  public LLDictionary<LLViewerAssetType::EType, ViewerAssetEntry>
+{
+public:
+	LLViewerAssetDictionary();
+};
+
+LLViewerAssetDictionary::LLViewerAssetDictionary()
+{
+	//       												      	   	   	 DRAG&DROP TYPE		    
+	//   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	   	|--------------------|
+	addEntry(LLViewerAssetType::AT_TEXTURE, 			new ViewerAssetEntry(DAD_TEXTURE));
+	addEntry(LLViewerAssetType::AT_SOUND, 				new ViewerAssetEntry(DAD_SOUND));
+	addEntry(LLViewerAssetType::AT_CALLINGCARD, 		new ViewerAssetEntry(DAD_CALLINGCARD));
+	addEntry(LLViewerAssetType::AT_LANDMARK, 			new ViewerAssetEntry(DAD_LANDMARK));
+	addEntry(LLViewerAssetType::AT_SCRIPT, 				new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_CLOTHING, 			new ViewerAssetEntry(DAD_CLOTHING));
+	addEntry(LLViewerAssetType::AT_OBJECT, 				new ViewerAssetEntry(DAD_OBJECT));
+	addEntry(LLViewerAssetType::AT_NOTECARD, 			new ViewerAssetEntry(DAD_NOTECARD));
+	addEntry(LLViewerAssetType::AT_CATEGORY, 			new ViewerAssetEntry(DAD_CATEGORY));
+	addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, 		new ViewerAssetEntry(DAD_ROOT_CATEGORY));
+	addEntry(LLViewerAssetType::AT_LSL_TEXT, 			new ViewerAssetEntry(DAD_SCRIPT));
+	addEntry(LLViewerAssetType::AT_LSL_BYTECODE, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_TEXTURE_TGA, 		new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_BODYPART, 			new ViewerAssetEntry(DAD_BODYPART));
+	addEntry(LLViewerAssetType::AT_SOUND_WAV, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_TGA, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_IMAGE_JPEG, 			new ViewerAssetEntry(DAD_NONE));
+	addEntry(LLViewerAssetType::AT_ANIMATION, 			new ViewerAssetEntry(DAD_ANIMATION));
+	addEntry(LLViewerAssetType::AT_GESTURE, 			new ViewerAssetEntry(DAD_GESTURE));
+	addEntry(LLViewerAssetType::AT_SIMSTATE, 			new ViewerAssetEntry(DAD_NONE));
+
+	addEntry(LLViewerAssetType::AT_LINK, 				new ViewerAssetEntry(DAD_LINK));
+	addEntry(LLViewerAssetType::AT_LINK_FOLDER, 		new ViewerAssetEntry(DAD_LINK));
+
+	addEntry(LLViewerAssetType::AT_MESH, 				new ViewerAssetEntry(DAD_MESH));
+
+	addEntry(LLViewerAssetType::AT_NONE, 				new ViewerAssetEntry(DAD_NONE));
+};
+
+EDragAndDropType LLViewerAssetType::lookupDragAndDropType(EType asset_type)
+{
+	const LLViewerAssetDictionary *dict = LLViewerAssetDictionary::getInstance();
+	const ViewerAssetEntry *entry = dict->lookup(asset_type);
+	if (entry)
+		return entry->mDadType;
+	else
+		return DAD_NONE;
+}
+
+// Generate a good default description
+void LLViewerAssetType::generateDescriptionFor(LLViewerAssetType::EType asset_type,
+											   std::string& description)
+{
+	const S32 BUF_SIZE = 30;
+	char time_str[BUF_SIZE];	/* Flawfinder: ignore */
+	time_t now;
+	time(&now);
+	memset(time_str, '\0', BUF_SIZE);
+	strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now));
+	description.assign(time_str);
+	description.append(LLAssetType::lookupHumanReadable(asset_type));
+}
diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h
new file mode 100644
index 0000000000000000000000000000000000000000..01158885cecc5345a189db8130fc6576bf6c6546
--- /dev/null
+++ b/indra/newview/llviewerassettype.h
@@ -0,0 +1,54 @@
+/** 
+ * @file llviewerassettype.h
+ * @brief Declaration of LLViewerViewerAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERASSETTYPE_H
+#define LL_LLVIEWERASSETTYPE_H
+
+#include <string>
+#include "llassettype.h"
+
+// This class is similar to llassettype, but contains methods
+// only used by the viewer.
+class LLViewerAssetType : public LLAssetType
+{
+public:
+	// Generate a good default description. You may want to add a verb
+	// or agent name after this depending on your application.
+	static void 				generateDescriptionFor(LLViewerAssetType::EType asset_type,
+													   std::string& description);
+	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
+protected:
+	LLViewerAssetType() {}
+	~LLViewerAssetType() {}
+};
+
+#endif // LL_LLVIEWERASSETTYPE_H
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index f65baea6ca0a95d1ee5dfc71d108509a8260c30f..b5709fa10214720a68131ad5bedd65c9e8be5609 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -109,10 +109,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera()
 {
 	calcProjection(getFar());
 	mCameraFOVDefault = DEFAULT_FIELD_OF_VIEW;
+	mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f);
 	mPixelMeterRatio = 0.f;
 	mScreenPixelArea = 0;
 	mZoomFactor = 1.f;
 	mZoomSubregion = 1;
+	mAverageSpeed = 0.f;
+	mAverageAngularSpeed = 0.f;
 	gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
 }
 
@@ -151,15 +154,22 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
 
 	setOriginAndLookAt(origin, up_direction, point_of_interest);
 
-	F32 dpos = (center - last_position).magVec();
+	mVelocityDir = center - last_position ; 
+	F32 dpos = mVelocityDir.normVec() ;
 	LLQuaternion rotation;
 	rotation.shortestArc(last_axis, getAtAxis());
 
 	F32 x, y, z;
 	F32 drot;
 	rotation.getAngleAxis(&drot, &x, &y, &z);
+
 	mVelocityStat.addValue(dpos);
 	mAngularVelocityStat.addValue(drot);
+	
+	mAverageSpeed = mVelocityStat.getMeanPerSec() ;
+	mAverageAngularSpeed = mAngularVelocityStat.getMeanPerSec() ;
+	mCosHalfCameraFOV = cosf(0.5f * getView() * llmax(1.0f, getAspect()));
+
 	// update pixel meter ratio using default fov, not modified one
 	mPixelMeterRatio = getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5));
 	// update screen pixel area
@@ -818,10 +828,12 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts)
 	LLCamera::setView(vertical_fov_rads); // call base implementation
 }
 
-void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) {
+void LLViewerCamera::setDefaultFOV(F32 vertical_fov_rads) 
+{
 	vertical_fov_rads = llclamp(vertical_fov_rads, getMinView(), getMaxView());
 	setView(vertical_fov_rads);
 	mCameraFOVDefault = vertical_fov_rads; 
+	mCosHalfCameraFOV = cosf(mCameraFOVDefault * 0.5f);
 }
 
 
diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h
index 90b77f771f3ec3d1cd3b31eeabc87a4b9ce4af1f..2b8a0892bf62f5731faa03ddbba2c02a2d2f9450 100644
--- a/indra/newview/llviewercamera.h
+++ b/indra/newview/llviewercamera.h
@@ -91,17 +91,20 @@ class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
 	BOOL projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoordGL &out_point, const BOOL clamp = TRUE) const;
 	BOOL projectPosAgentToScreenEdge(const LLVector3 &pos_agent, LLCoordGL &out_point) const;
 
-
+	const LLVector3* getVelocityDir() const {return &mVelocityDir;}
 	LLStat *getVelocityStat() { return &mVelocityStat; }
 	LLStat *getAngularVelocityStat() { return &mAngularVelocityStat; }
+	F32     getCosHalfFov() {return mCosHalfCameraFOV;}
+	F32     getAverageSpeed() {return mAverageSpeed ;}
+	F32     getAverageAngularSpeed() {return mAverageAngularSpeed;}
 
 	void getPixelVectors(const LLVector3 &pos_agent, LLVector3 &up, LLVector3 &right);
 	LLVector3 roundToPixel(const LLVector3 &pos_agent);
 
 	// Sets the current matrix
 	/* virtual */ void setView(F32 vertical_fov_rads);
-	// Sets the current matrix AND remembers result as default view
-	void setDefaultFOV(F32 vertical_fov_rads);
+
+	void setDefaultFOV(F32 fov) ;
 	F32 getDefaultFOV() { return mCameraFOVDefault; }
 
 	BOOL cameraUnderWater() const;
@@ -120,9 +123,14 @@ class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera>
 
 	LLStat mVelocityStat;
 	LLStat mAngularVelocityStat;
+	LLVector3 mVelocityDir ;
+	F32       mAverageSpeed ;
+	F32       mAverageAngularSpeed ;
+
 	mutable LLMatrix4	mProjectionMatrix;	// Cache of perspective matrix
 	mutable LLMatrix4	mModelviewMatrix;
 	F32					mCameraFOVDefault;
+	F32					mCosHalfCameraFOV;
 	LLVector3			mLastPointOfInterest;
 	F32					mPixelMeterRatio; // Divide by distance from camera to get pixels per meter at that distance.
 	S32					mScreenPixelArea; // Pixel area of entire window
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 35226a1632078d02db1f06fc4e78045096585e31..5e23a7e1140b478fe1e20fec200d8287b04c4c7a 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -90,7 +90,7 @@ std::string gCurrentVersion;
 
 extern BOOL gResizeScreenTexture;
 extern BOOL gDebugGL;
-
+extern BOOL gAuditTexture;
 ////////////////////////////////////////////////////////////////////////////
 // Listeners
 
@@ -378,6 +378,12 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
 	return true;
 }
 
+static bool handleAuditTextureChanged(const LLSD& newvalue)
+{
+	gAuditTexture = newvalue.asBoolean();
+	return true;
+}
+
 static bool handleRenderDebugGLChanged(const LLSD& newvalue)
 {
 	gDebugGL = newvalue.asBoolean() || gDebugSession;
@@ -587,6 +593,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDeferredShadow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderDeferredGI")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2));
+	gSavedSettings.getControl("AuditTexture")->getSignal()->connect(boost::bind(&handleAuditTextureChanged, _2));
 	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _2));
 	gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _2));
 	gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _2));
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 3b727e28611a02a845bb46111e0f125723250f11..5e3680779960d6cb777eb642b5d9bcc74a733676 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -712,7 +712,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 			gBumpImageList.updateImages();  // must be called before gTextureList version so that it's textures are thrown out first.
 
-			const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame)
+			F32 max_image_decode_time = 0.050f*gFrameIntervalSeconds; // 50 ms/second decode time
+			max_image_decode_time = llclamp(max_image_decode_time, 0.001f, 0.005f ); // min 1ms/frame, max 5ms/frame)
 			gTextureList.updateImages(max_image_decode_time);
 
 			//remove dead textures from GL
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index f3bf6b70a364dd7bae5049dbd364cfc8f3b6537b..f184b8814515c0065556931fc14d1a90b15ac2c6 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -174,6 +174,7 @@ void LLViewerFloaterReg::registerFloaters()
 
 	LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>);
 	LLFloaterReg::add("import_collada", "floater_import_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImportCollada>);
+	LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
 	LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>);
 	LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>);
 	LLInspectAvatarUtil::registerFloater();
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..384538364f04707df336d605fb570748855835e2
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -0,0 +1,263 @@
+/** 
+ * @file llfoldertype.cpp
+ * @brief Implementation of LLViewerFolderType functionality.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerfoldertype.h"
+#include "lldictionary.h"
+#include "llmemory.h"
+#include "llvisualparam.h"
+
+static const std::string empty_string;
+
+struct ViewerFolderEntry : public LLDictionaryEntry
+{
+	// Constructor for non-ensembles
+	ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name 			// name of the folder icon
+		) 
+		:
+		LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		mAllowedNames.clear();
+	}
+
+	// Constructor for ensembles
+	ViewerFolderEntry(const std::string &xui_name, 			// name of the xui menu item
+					  const std::string &new_category_name, // default name when creating a new category of this type
+					  const std::string &icon_name, 		// name of the folder icon
+					  const std::string allowed_names 		// allowed item typenames for this folder type
+		) 
+		:
+		LLDictionaryEntry(xui_name),
+		mIconName(icon_name),
+		mNewCategoryName(new_category_name)
+	{
+		const std::string delims (",");
+		LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims);
+	}
+
+	bool getIsAllowedName(const std::string &name) const
+	{
+		if (mAllowedNames.empty())
+			return false;
+		for (name_vec_t::const_iterator iter = mAllowedNames.begin();
+			 iter != mAllowedNames.end();
+			 iter++)
+		{
+			if (name == (*iter))
+				return true;
+		}
+		return false;
+	}
+	const std::string mIconName;
+	const std::string mNewCategoryName;
+	typedef std::vector<std::string> name_vec_t;
+	name_vec_t mAllowedNames;
+};
+
+class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>,
+								 public LLDictionary<LLFolderType::EType, ViewerFolderEntry>
+{
+public:
+	LLViewerFolderDictionary();
+protected:
+	bool initEnsemblesFromFile(); // Reads in ensemble information from foldertypes.xml
+};
+
+LLViewerFolderDictionary::LLViewerFolderDictionary()
+{
+	initEnsemblesFromFile();
+
+	//       													    	  NEW CATEGORY NAME         FOLDER ICON NAME
+	//      												  		     |-------------------------|---------------------------|
+	addEntry(LLFolderType::FT_TEXTURE, 				new ViewerFolderEntry("Textures",				"inv_folder_texture.tga"));
+	addEntry(LLFolderType::FT_SOUND, 				new ViewerFolderEntry("Sounds",					"inv_folder_sound.tga"));
+	addEntry(LLFolderType::FT_CALLINGCARD, 			new ViewerFolderEntry("Calling Cards",			"inv_folder_callingcard.tga"));
+	addEntry(LLFolderType::FT_LANDMARK, 			new ViewerFolderEntry("Landmarks",				"inv_folder_landmark.tga"));
+	addEntry(LLFolderType::FT_CLOTHING, 			new ViewerFolderEntry("Clothing",				"inv_folder_clothing.tga"));
+	addEntry(LLFolderType::FT_OBJECT, 				new ViewerFolderEntry("Objects",				"inv_folder_object.tga"));
+	addEntry(LLFolderType::FT_NOTECARD, 			new ViewerFolderEntry("Notecards",				"inv_folder_notecard.tga"));
+	addEntry(LLFolderType::FT_CATEGORY, 			new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new ViewerFolderEntry("Inventory",				""));
+	addEntry(LLFolderType::FT_LSL_TEXT, 			new ViewerFolderEntry("Scripts",				"inv_folder_script.tga"));
+	addEntry(LLFolderType::FT_BODYPART, 			new ViewerFolderEntry("Body Parts",				"inv_folder_bodypart.tga"));
+	addEntry(LLFolderType::FT_TRASH, 				new ViewerFolderEntry("Trash",					"inv_folder_trash.tga"));
+	addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, 	new ViewerFolderEntry("Photo Album",			"inv_folder_snapshot.tga"));
+	addEntry(LLFolderType::FT_LOST_AND_FOUND, 		new ViewerFolderEntry("Lost And Found",	   		"inv_folder_lostandfound.tga"));
+	addEntry(LLFolderType::FT_ANIMATION, 			new ViewerFolderEntry("Animations",				"inv_folder_animation.tga"));
+	addEntry(LLFolderType::FT_GESTURE, 				new ViewerFolderEntry("Gestures",				"inv_folder_gesture.tga"));
+	addEntry(LLFolderType::FT_FAVORITE, 			new ViewerFolderEntry("Favorite",				"inv_folder_plain_closed.tga"));
+
+	addEntry(LLFolderType::FT_CURRENT_OUTFIT, 		new ViewerFolderEntry("Current Outfit",			"inv_folder_current_outfit.tga"));
+	addEntry(LLFolderType::FT_OUTFIT, 				new ViewerFolderEntry("New Outfit",				"inv_folder_outfit.tga"));
+	addEntry(LLFolderType::FT_MY_OUTFITS, 			new ViewerFolderEntry("My Outfits",				"inv_folder_my_outfits.tga"));
+	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"inv_folder_inbox.tga"));
+		 
+	addEntry(LLFolderType::FT_NONE, 				new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
+}
+
+bool LLViewerFolderDictionary::initEnsemblesFromFile()
+{
+	std::string xml_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"foldertypes.xml");
+	LLXmlTree folder_def;
+	if (!folder_def.parseFile(xml_filename))
+	{
+		llerrs << "Failed to parse folders file " << xml_filename << llendl;
+		return false;
+	}
+
+	LLXmlTreeNode* rootp = folder_def.getRoot();
+	for (LLXmlTreeNode* ensemble = rootp->getFirstChild();
+		 ensemble;
+		 ensemble = rootp->getNextChild())
+	{
+		if (!ensemble->hasName("ensemble"))
+		{
+			llwarns << "Invalid ensemble definition node " << ensemble->getName() << llendl;
+			continue;
+		}
+
+		S32 ensemble_type;
+		static LLStdStringHandle ensemble_num_string = LLXmlTree::addAttributeString("foldertype_num");
+		if (!ensemble->getFastAttributeS32(ensemble_num_string, ensemble_type))
+		{
+			llwarns << "No ensemble type defined" << llendl;
+			continue;
+		}
+
+
+		if (ensemble_type < S32(LLFolderType::FT_ENSEMBLE_START) || ensemble_type > S32(LLFolderType::FT_ENSEMBLE_END))
+		{
+			llwarns << "Exceeded maximum ensemble index" << LLFolderType::FT_ENSEMBLE_END << llendl;
+			break;
+		}
+
+		std::string xui_name;
+		static LLStdStringHandle xui_name_string = LLXmlTree::addAttributeString("xui_name");
+		if (!ensemble->getFastAttributeString(xui_name_string, xui_name))
+		{
+			llwarns << "No xui name defined" << llendl;
+			continue;
+		}
+
+		std::string icon_name;
+		static LLStdStringHandle icon_name_string = LLXmlTree::addAttributeString("icon_name");
+		if (!ensemble->getFastAttributeString(icon_name_string, icon_name))
+		{
+			llwarns << "No ensemble icon name defined" << llendl;
+			continue;
+		}
+
+		std::string allowed_names;
+		static LLStdStringHandle allowed_names_string = LLXmlTree::addAttributeString("allowed");
+		if (!ensemble->getFastAttributeString(allowed_names_string, allowed_names))
+		{
+		}
+
+		// Add the entry and increment the asset number.
+		const static std::string new_ensemble_name = "New Ensemble";
+		addEntry(LLFolderType::EType(ensemble_type), new ViewerFolderEntry(xui_name, new_ensemble_name, icon_name, allowed_names));
+	}
+
+	return true;
+}
+
+
+const std::string &LLViewerFolderType::lookupXUIName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromXUIName(const std::string &name)
+{
+	return LLViewerFolderDictionary::getInstance()->lookup(name);
+}
+
+const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mIconName;
+	}
+	return badLookup();
+}
+
+const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type)
+{
+	const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type);
+	if (entry)
+	{
+		return entry->mNewCategoryName;
+	}
+	return badLookup();
+}
+
+LLFolderType::EType LLViewerFolderType::lookupTypeFromNewCategoryName(const std::string& name)
+{
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->mNewCategoryName == name)
+		{
+			return iter->first;
+		}
+	}
+	return FT_NONE;
+}
+
+
+U64 LLViewerFolderType::lookupValidFolderTypes(const std::string& item_name)
+{
+	U64 matching_folders = 0;
+	for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin();
+		 iter != LLViewerFolderDictionary::getInstance()->end();
+		 iter++)
+	{
+		const ViewerFolderEntry *entry = iter->second;
+		if (entry->getIsAllowedName(item_name))
+		{
+			matching_folders |= 1LL << iter->first;
+		}
+	}
+	return matching_folders;
+}
diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h
new file mode 100644
index 0000000000000000000000000000000000000000..a6aea62b2a33096559a70b24e30cfe8f85b59ad1
--- /dev/null
+++ b/indra/newview/llviewerfoldertype.h
@@ -0,0 +1,57 @@
+/** 
+ * @file llviewerfoldertype.h
+ * @brief Declaration of LLAssetType.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERFOLDERTYPE_H
+#define LL_LLVIEWERFOLDERTYPE_H
+
+#include <string>
+#include "llfoldertype.h"
+
+// This class is similar to llfoldertype, but contains methods
+// only used by the viewer.  This also handles ensembles.
+class LLViewerFolderType : public LLFolderType
+{
+public:
+	static const std::string&   lookupXUIName(EType folder_type); // name used by the UI
+	static LLFolderType::EType 	lookupTypeFromXUIName(const std::string& name);
+
+	static const std::string&   lookupIconName(EType asset_type); // folder icon name
+	static const std::string&	lookupNewCategoryName(EType folder_type); // default name when creating new category
+	static LLFolderType::EType	lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category
+
+	static U64					lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type?
+protected:
+	LLViewerFolderType() {}
+	~LLViewerFolderType() {}
+};
+
+#endif // LL_LLVIEWERFOLDERTYPE_H
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 366e5602bd8696ab0b2e19134aca2193e08db8f9..1d62ead843729c6f052b28aa94d02c66399aea51 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -37,7 +37,8 @@
 #include "indra_constants.h"
 
 #include "llagent.h"
-#include "llfoldertype.h"
+#include "llviewerfoldertype.h"
+#include "llfolderview.h"
 #include "llviewercontrol.h"
 #include "llconsole.h"
 #include "llinventorymodel.h"
@@ -47,6 +48,7 @@
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
 
+#include "llviewerassettype.h"
 #include "llviewerregion.h"
 #include "llviewerobjectlist.h"
 #include "llpreviewgesture.h"
@@ -358,7 +360,7 @@ void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const
 
 LLViewerInventoryCategory::LLViewerInventoryCategory(const LLUUID& uuid,
 													 const LLUUID& parent_uuid,
-													 LLAssetType::EType pref,
+													 LLFolderType::EType pref,
 													 const std::string& name,
 													 const LLUUID& owner_id) :
 	LLInventoryCategory(uuid, parent_uuid, pref, name),
@@ -415,7 +417,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
 {
 	// communicate that change with the server.
 
-	if (LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if (LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotModifyProtectedCategories");
 		return;
@@ -439,7 +441,7 @@ void LLViewerInventoryCategory::removeFromServer( void )
 	llinfos << "Removing inventory category " << mUUID << " from server."
 			<< llendl;
 	// communicate that change with the server.
-	if(LLAssetType::lookupIsProtectedCategoryType(mPreferredType))
+	if(LLFolderType::lookupIsProtectedType(mPreferredType))
 	{
 		LLNotifications::instance().add("CannotRemoveProtectedCategories");
 		return;
@@ -542,7 +544,7 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
 		}
 		else if(0 == strcmp("pref_type", keyword))
 		{
-			mPreferredType = LLAssetType::lookup(valuestr);
+			mPreferredType = LLFolderType::lookup(valuestr);
 		}
 		else if(0 == strcmp("name", keyword))
 		{
@@ -580,7 +582,7 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 	mParentUUID.toString(uuid_str);
 	fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str());
 	fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType));
-	fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType));
+	fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str());
 	fprintf(fp, "\t\tname\t%s|\n", mName.c_str());
 	mOwnerID.toString(uuid_str);
 	fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str());
@@ -591,8 +593,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
 
 void LLViewerInventoryCategory::determineFolderType()
 {
-	LLAssetType::EType original_type = getPreferredType();
-	if (LLAssetType::lookupIsProtectedCategoryType(original_type))
+	LLFolderType::EType original_type = getPreferredType();
+	if (LLFolderType::lookupIsProtectedType(original_type))
 		return;
 
 	U64 folder_valid = 0;
@@ -615,28 +617,28 @@ void LLViewerInventoryCategory::determineFolderType()
 			{
 				const EWearableType wearable_type = item->getWearableType();
 				const std::string& wearable_name = LLWearableDictionary::getTypeName(wearable_type);
-				U64 valid_folder_types = LLFolderType::lookupValidFolderTypes(wearable_name);
+				U64 valid_folder_types = LLViewerFolderType::lookupValidFolderTypes(wearable_name);
 				folder_valid |= valid_folder_types;
 				folder_invalid |= ~valid_folder_types;
 			}
 		}
-		for (U8 i = LLAssetType::AT_FOLDER_ENSEMBLE_START; i <= LLAssetType::AT_FOLDER_ENSEMBLE_END; i++)
+		for (U8 i = LLFolderType::FT_ENSEMBLE_START; i <= LLFolderType::FT_ENSEMBLE_END; i++)
 		{
 			if ((folder_valid & (1LL << i)) &&
 				!(folder_invalid & (1LL << i)))
 			{
-				changeType((LLAssetType::EType)i);
+				changeType((LLFolderType::EType)i);
 				return;
 			}
 		}
 	}
-	if (LLAssetType::lookupIsEnsembleCategoryType(original_type))
+	if (LLFolderType::lookupIsEnsembleType(original_type))
 	{
-		changeType(LLAssetType::AT_NONE);
+		changeType(LLFolderType::FT_NONE);
 	}
 }
 
-void LLViewerInventoryCategory::changeType(LLAssetType::EType new_folder_type)
+void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
 {
 	const LLUUID &folder_id = getUUID();
 	const LLUUID &parent_id = getParentUUID();
@@ -947,7 +949,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar
     body["notecard-id"] = notecard_inv_id;
     body["object-id"] = object_id;
     body["item-id"] = src->getUUID();
-    body["folder-id"] = gInventory.findCategoryUUIDForType(src->getType());
+	body["folder-id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(src->getType()));
     body["callback-id"] = (LLSD::Integer)callback_id;
 
     request["message"] = "CopyInventoryFromNotecard";
@@ -963,7 +965,7 @@ void create_new_item(const std::string& name,
 				   U32 next_owner_perm)
 {
 	std::string desc;
-	LLAssetType::generateDescriptionFor(asset_type, desc);
+	LLViewerAssetType::generateDescriptionFor(asset_type, desc);
 	next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER;
 
 	
@@ -988,19 +990,14 @@ const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not
 const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
 const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
 
+// ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements...
 void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)
 {
-	std::string type = userdata.asString();
+	std::string type_name = userdata.asString();
 	
-	if (("category" == type) || ("current" == type) || ("outfit" == type) || ("my_otfts" == type) )
+	if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
 	{
-		LLAssetType::EType a_type = LLAssetType::AT_NONE;
-		if ("current" == type)
-			a_type = LLAssetType::AT_CURRENT_OUTFIT;
-		if ("outfit" == type)
-			a_type = LLAssetType::AT_OUTFIT;
-		if ("my_otfts" == type)
-			a_type = LLAssetType::AT_MY_OUTFITS;
+		LLFolderType::EType preferred_type = LLFolderType::lookup(type_name);
 
 		LLUUID parent_id;
 		if (bridge)
@@ -1016,100 +1013,100 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co
 			parent_id = gInventory.getRootFolderID();
 		}
 
-		LLUUID category = gInventory.createNewCategory(parent_id, a_type, LLStringUtil::null);
+		LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);
 		gInventory.notifyObservers();
 		folder->setSelectionByID(category, TRUE);
 	}
-	else if ("lsl" == type)
+	else if ("lsl" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_LSL_TEXT);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT);
 		create_new_item(NEW_LSL_NAME,
 					  parent_id,
 					  LLAssetType::AT_LSL_TEXT,
 					  LLInventoryType::IT_LSL,
 					  PERM_MOVE | PERM_TRANSFER);
 	}
-	else if ("notecard" == type)
+	else if ("notecard" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_NOTECARD);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_NOTECARD);
 		create_new_item(NEW_NOTECARD_NAME,
 					  parent_id,
 					  LLAssetType::AT_NOTECARD,
 					  LLInventoryType::IT_NOTECARD,
 					  PERM_ALL);
 	}
-	else if ("gesture" == type)
+	else if ("gesture" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE);
 		create_new_item(NEW_GESTURE_NAME,
 					  parent_id,
 					  LLAssetType::AT_GESTURE,
 					  LLInventoryType::IT_GESTURE,
 					  PERM_ALL);
 	}
-	else if ("shirt" == type)
+	else if ("shirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHIRT);
 	}
-	else if ("pants" == type)
+	else if ("pants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_PANTS);
 	}
-	else if ("shoes" == type)
+	else if ("shoes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SHOES);
 	}
-	else if ("socks" == type)
+	else if ("socks" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SOCKS);
 	}
-	else if ("jacket" == type)
+	else if ("jacket" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_JACKET);
 	}
-	else if ("skirt" == type)
+	else if ("skirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_SKIRT);
 	}
-	else if ("gloves" == type)
+	else if ("gloves" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_GLOVES);
 	}
-	else if ("undershirt" == type)
+	else if ("undershirt" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERSHIRT);
 	}
-	else if ("underpants" == type)
+	else if ("underpants" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
 		LLFolderBridge::createWearable(parent_id, WT_UNDERPANTS);
 	}
-	else if ("shape" == type)
+	else if ("shape" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SHAPE);
 	}
-	else if ("skin" == type)
+	else if ("skin" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_SKIN);
 	}
-	else if ("hair" == type)
+	else if ("hair" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_HAIR);
 	}
-	else if ("eyes" == type)
+	else if ("eyes" == type_name)
 	{
-		LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
+		const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART);
 		LLFolderBridge::createWearable(parent_id, WT_EYES);
 	}
 	
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index d523bf2859413eee54869d2f023a9270693d2053..529425aa258800f09140cb71d7fc074acf62e65b 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -185,7 +185,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	
 public:
 	LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid,
-							  LLAssetType::EType preferred_type,
+							  LLFolderType::EType preferred_type,
 							  const std::string& name,
 							  const LLUUID& owner_id);
 	LLViewerInventoryCategory(const LLUUID& owner_id);
@@ -221,7 +221,7 @@ class LLViewerInventoryCategory  : public LLInventoryCategory
 	bool exportFileLocal(LLFILE* fp) const;
 	bool importFileLocal(LLFILE* fp);
 	void determineFolderType();
-	void changeType(LLAssetType::EType new_folder_type);
+	void changeType(LLFolderType::EType new_folder_type);
 protected:
 	LLUUID mOwnerID;
 	S32 mVersion;
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index cd60a8d560630f68b49fa4298167765fb0e4fb7f..5b8902dec48be1f1803caba1cd6c37f200df472c 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -582,7 +582,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
 	}
 	else
 	{
-		gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR));
+		gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));
 	}
 	
 	if (gRenderForSelect)
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 55e4f28e75f5c97c9af1d8a3be1842f5bb0ee238..69650425cb437228f7dab228986e2114a56cf36a 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -261,9 +261,18 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
 			media_impl->mMediaSource->setSize(media_entry->getWidthPixels(), media_entry->getHeightPixels());
 		}
 		
-		if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self)
+		if(media_entry->getCurrentURL().empty())
 		{
-			if(!media_entry->getCurrentURL().empty())
+			// The current media URL is now empty.  Unload the media source.
+			media_impl->unload();
+		}
+		else
+		{
+			// The current media URL is not empty.
+			// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
+			// do a navigate.
+			
+			if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self)
 			{
 				needs_navigate = (media_entry->getCurrentURL() != previous_url);
 			}
@@ -450,12 +459,12 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
 // This is the predicate function used to sort sViewerMediaImplList by priority.
 bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
 {
-	if(i1->isForcedUnloaded())
+	if(i1->isForcedUnloaded() && !i2->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return false;
 	}
-	else if(i2->isForcedUnloaded())
+	else if(i2->isForcedUnloaded() && !i1->isForcedUnloaded())
 	{
 		// Muted or failed items always go to the end of the list, period.
 		return true;
@@ -480,6 +489,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 		// i2 is a UI element, i1 is not.  This makes i2 "less than" i1, so it sorts earlier in our list.
 		return false;
 	}
+	else if(i1->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return true;
+	}
+	else if(i2->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return false;
+	}
 	else
 	{
 		// The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here.
@@ -658,6 +677,8 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mMediaAutoScale(media_auto_scale),
 	mMediaLoop(media_loop),
 	mNeedsNewTexture(true),
+	mTextureUsedWidth(0),
+	mTextureUsedHeight(0),
 	mSuspendUpdates(false),
 	mVisible(true),
 	mLastSetCursor( UI_CURSOR_ARROW ),
@@ -675,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mPreviousMediaState(MEDIA_NONE),
 	mPreviousMediaTime(0.0f),
 	mIsDisabled(false),
+	mIsParcelMedia(false),
 	mProximity(-1),
 	mIsUpdated(false)
 { 
@@ -1258,6 +1280,17 @@ void LLViewerMediaImpl::navigateHome()
 	navigateTo(mHomeURL, "", true, false);
 }
 
+//////////////////////////////////////////////////////////////////////////////////////////
+void LLViewerMediaImpl::unload()
+{
+	// Unload the media impl and clear its state.
+	destroyMediaSource();
+	resetPreviousMediaState();
+	mMediaURL.clear();
+	mMimeType.clear();
+	mCurrentMediaURL.clear();
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::navigateTo(const std::string& url, const std::string& mime_type,  bool rediscover_type, bool server_request)
 {
@@ -1568,8 +1601,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
 	
 	if (mNeedsNewTexture 
 		|| placeholder_image->getUseMipMaps()
-		|| placeholder_image->getWidth() != mMediaSource->getTextureWidth()
-		|| placeholder_image->getHeight() != mMediaSource->getTextureHeight())
+		|| (placeholder_image->getWidth() != mMediaSource->getTextureWidth())
+		|| (placeholder_image->getHeight() != mMediaSource->getTextureHeight())
+		|| (mTextureUsedWidth > mMediaSource->getWidth())
+		|| (mTextureUsedHeight > mMediaSource->getHeight())
+		)
 	{
 		LL_DEBUGS("Media") << "initializing media placeholder" << LL_ENDL;
 		LL_DEBUGS("Media") << "movie image id " << mTextureId << LL_ENDL;
@@ -1601,6 +1637,11 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
 		// FIXME
 //		placeholder_image->mIsMediaTexture = true;
 		mNeedsNewTexture = false;
+				
+		// If the amount of the texture being drawn by the media goes down in either width or height, 
+		// recreate the texture to avoid leaving parts of the old image behind.
+		mTextureUsedWidth = mMediaSource->getWidth();
+		mTextureUsedHeight = mMediaSource->getHeight();
 	}
 	
 	return placeholder_image;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 517a76ce3dd6aa4c9b06677a19c25ce48d4bba6c..3f5f3ca746c1a0979f2a961f66c775237505ab97 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -165,6 +165,7 @@ class LLViewerMediaImpl
 	void navigateForward();
 	void navigateReload();
 	void navigateHome();
+	void unload();
 	void navigateTo(const std::string& url, const std::string& mime_type = "", bool rediscover_type = false, bool server_request = false);
 	void navigateInternal();
 	void navigateStop();
@@ -190,14 +191,17 @@ class LLViewerMediaImpl
 	bool isMediaPlaying();
 	bool isMediaPaused();
 	bool hasMedia();
-	bool isMediaFailed() { return mMediaSourceFailed; };
+	bool isMediaFailed() const { return mMediaSourceFailed; };
 	void resetPreviousMediaState();
 	
 	void setDisabled(bool disabled) { mIsDisabled = disabled; };
-	bool isMediaDisabled() { return mIsDisabled; };
+	bool isMediaDisabled() const { return mIsDisabled; };
 
 	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
 	bool isForcedUnloaded() const;
+	
+	void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; };
+	bool isParcelMedia() const { return mIsParcelMedia; };
 
 	ECursorType getLastSetCursor() { return mLastSetCursor; };
 	
@@ -258,7 +262,7 @@ class LLViewerMediaImpl
 	void calculateInterest();
 	F64 getInterest() const { return mInterest; };
 	F64 getApproximateTextureInterest();
-	S32 getProximity() { return mProximity; };
+	S32 getProximity() const { return mProximity; };
 	
 	// Mark this object as being used in a UI panel instead of on a prim
 	// This will be used as part of the interest sorting algorithm.
@@ -306,6 +310,8 @@ class LLViewerMediaImpl
 	bool mMediaAutoScale;
 	bool mMediaLoop;
 	bool mNeedsNewTexture;
+	S32 mTextureUsedWidth;
+	S32 mTextureUsedHeight;
 	bool mSuspendUpdates;
 	bool mVisible;
 	ECursorType mLastSetCursor;
@@ -323,6 +329,7 @@ class LLViewerMediaImpl
 	int mPreviousMediaState;
 	F64 mPreviousMediaTime;
 	bool mIsDisabled;
+	bool mIsParcelMedia;
 	S32 mProximity;
 
 private:
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 2f7040aaa30b19ccb054c2e70e3019cf2c7299aa..70a7d835a36da1b256496b40a771f60a7a78cf32 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -77,6 +77,10 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 	{
 		old_media_impl->focus(false);
 	}
+	
+	// Always clear the current selection.  If we're setting focus on a face, we'll reselect the correct object below.
+	LLSelectMgr::getInstance()->deselectAll();
+	mSelection = NULL;
 
 	if (media_impl.notNull() && objectp.notNull())
 	{
@@ -86,6 +90,12 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 		mFocusedObjectID = objectp->getID();
 		mFocusedObjectFace = face;
 		mFocusedObjectNormal = pick_normal;
+		
+		// Set the selection in the selection manager so we can draw the focus ring.
+		mSelection = LLSelectMgr::getInstance()->selectObjectOnly(objectp, face);
+
+		// Focusing on a media face clears its disable flag.
+		media_impl->setDisabled(false);
 
 		LLTextureEntry* tep = objectp->getTE(face);
 		if(tep->hasMedia())
@@ -489,8 +499,14 @@ void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)
 			S32 face = obj->getFaceIndexWithMediaImpl(impl, -1);
 			
 			// We don't have a proper pick normal here, and finding a face's real normal is... complicated.
-			// For now, use +z to look at the top of the object.
-			LLVector3 normal(0.0f, 0.0f, 1.0f);
+			LLVector3 normal = obj->getApproximateFaceNormal(face);
+			if(normal.isNull())
+			{
+				// If that didn't work, use the inverse of the camera "look at" axis, which should keep the camera pointed in the same direction.
+//				llinfos << "approximate face normal invalid, using camera direction." << llendl;
+				normal = LLViewerCamera::getInstance()->getAtAxis();
+				normal *= (F32)-1.0f;
+			}
 			
 			// Attempt to focus/zoom on that face.
 			setFocusFace(obj, face, impl, normal);
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index e5f36d341c482f9b00250ea2e82d7498ed56c6fa..89ee0ae283176a110d97b3b47bee4c773e821d81 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -76,6 +76,7 @@ class LLViewerMediaFocus :
 	LLViewerMediaImpl* getFocusedMediaImpl();
 	LLViewerObject* getFocusedObject();
 	S32 getFocusedFace() { return mFocusedObjectFace; }
+	LLUUID getFocusedObjectID() { return mFocusedObjectID; }
 	
 	// These look up (by uuid) and return the values that were set with setHoverFace.  They will return null if the objects have been destroyed.
 	LLViewerMediaImpl* getHoverMediaImpl();
@@ -95,6 +96,7 @@ class LLViewerMediaFocus :
 private:
 	
 	LLHandle<LLPanelPrimMediaControls> mMediaControls;
+	LLObjectSelectionHandle mSelection;
 	
 	LLUUID mFocusedObjectID;
 	S32 mFocusedObjectFace;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ef4569c08e70ae6ddd17e4be5e412e41d8425a63..456891977071ba885ffdbfb8aa15a431d7bc0ae2 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -50,6 +50,7 @@
 #include "llfocusmgr.h"
 #include "llfontgl.h"
 #include "llinstantmessage.h"
+#include "llinventorypanel.h"
 #include "llpermissionsflags.h"
 #include "llrect.h"
 #include "llsecondlifeurls.h"
@@ -145,7 +146,6 @@
 #include "llmenucommands.h"
 #include "llmenugl.h"
 #include "llmimetypes.h"
-#include "llmorphview.h"
 #include "llmoveview.h"
 #include "llmutelist.h"
 #include "llnotify.h"
@@ -210,6 +210,7 @@
 
 #include "lltexlayer.h"
 #include "llappearancemgr.h"
+#include "llimfloater.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -466,16 +467,6 @@ void set_underclothes_menu_options()
 void init_menus()
 {
 	S32 top = gViewerWindow->getRootView()->getRect().getHeight();
-	S32 width = gViewerWindow->getRootView()->getRect().getWidth();
-
-	//
-	// Main menu bar
-	//
-	gMenuHolder = new LLViewerMenuHolderGL();
-	gMenuHolder->setRect(LLRect(0, top, width, 0));
-	gMenuHolder->setFollowsAll();
-
-	LLMenuGL::sMenuContainer = gMenuHolder;
 
 	// Initialize actions
 	initialize_menus();
@@ -609,6 +600,14 @@ class LLAdvancedToggleConsole : public view_listener_t
 		{
 			toggle_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) );
 		}
+		else if (gTextureSizeView && "texture size" == console_type)
+		{
+			toggle_visibility( (void*)gTextureSizeView );
+		}
+		else if (gTextureCategoryView && "texture category" == console_type)
+		{
+			toggle_visibility( (void*)gTextureCategoryView );
+		}
 		else if ("fast timers" == console_type)
 		{
 			toggle_visibility( (void*)gDebugView->mFastTimerView );
@@ -636,6 +635,14 @@ class LLAdvancedCheckConsole : public view_listener_t
 		{
 			new_value = get_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) );
 		}
+		else if (gTextureSizeView && "texture size" == console_type)
+		{
+			new_value = get_visibility( (void*)gTextureSizeView );
+		}
+		else if (gTextureCategoryView && "texture category" == console_type)
+		{
+			new_value = get_visibility( (void*)gTextureCategoryView );
+		}
 		else if ("fast timers" == console_type)
 		{
 			new_value = get_visibility( (void*)gDebugView->mFastTimerView );
@@ -1159,28 +1166,6 @@ class LLAdvancedCheckWireframe : public view_listener_t
 	}
 };
 	
-//////////////////////
-// DISABLE TEXTURES //
-//////////////////////
-
-class LLAdvancedToggleDisableTextures : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLViewerTexture::sDontLoadVolumeTextures = !LLViewerTexture::sDontLoadVolumeTextures;
-		return true;
-	}
-};
-
-class LLAdvancedCheckDisableTextures : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		bool new_value = LLViewerTexture::sDontLoadVolumeTextures; // <-- make this using LLCacheControl
-		return new_value;
-	}
-};
-
 //////////////////////
 // TEXTURE ATLAS //
 //////////////////////
@@ -1884,7 +1869,7 @@ class LLAdvancedRebakeTextures : public view_listener_t
 };
 	
 	
-#ifndef LL_RELEASE_FOR_DOWNLOAD
+#if 1 //ndef LL_RELEASE_FOR_DOWNLOAD
 ///////////////////////////
 // DEBUG AVATAR TEXTURES //
 ///////////////////////////
@@ -2522,24 +2507,12 @@ class LLObjectEnableTouch : public view_listener_t
 //		label.assign("Touch");
 //	}
 //}
-/*
-bool handle_object_open()
-{
-	LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
-	if(!obj) return true;
 
-	LLFloaterOpenObject::show();
-	return true;
+void handle_object_open()
+{
+	LLFloaterReg::showInstance("openobject");
 }
 
-class LLObjectOpen : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		return handle_object_open();
-	}
-};
-*/
 bool enable_object_open()
 {
 	// Look for contents in root object, which is all the LLFloaterOpenObject
@@ -2647,8 +2620,25 @@ void handle_object_edit()
 	// Could be first use
 	LLFirstUse::useBuild();
 	return;
-	
 }
+
+void handle_object_inspect()
+{
+	// Disable sidepanel inspector
+	/*
+	LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
+	LLViewerObject* selected_objectp = selection->getFirstRootObject();
+	if (selected_objectp)
+	{
+		LLSD key;
+		key["task"] = "task";
+		LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+	}
+	*/
+
+	LLFloaterReg::showInstance("inspect", LLSD());
+}
+
 //---------------------------------------------------------------------------
 // Land pie menu
 //---------------------------------------------------------------------------
@@ -2963,11 +2953,20 @@ bool callback_freeze(const LLSD& notification, const LLSD& response)
 }
 
 
-class LLAvatarFreeze : public view_listener_t
+void handle_avatar_freeze(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		// Use avatar_id if available, otherwise default to right-click avatar
+		LLVOAvatar* avatar = NULL;
+		if (avatar_id.asUUID().notNull())
+		{
+			avatar = find_avatar_from_object(avatar_id.asUUID());
+		}
+		else
+		{
+			avatar = find_avatar_from_object(
+				LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+		}
+
 		if( avatar )
 		{
 			std::string fullname = avatar->getFullname();
@@ -2991,9 +2990,7 @@ class LLAvatarFreeze : public view_listener_t
 							callback_freeze);
 			}
 		}
-		return true;
-	}
-};
+}
 
 class LLAvatarVisibleDebug : public view_listener_t
 {
@@ -3003,14 +3000,6 @@ class LLAvatarVisibleDebug : public view_listener_t
 	}
 };
 
-class LLAvatarEnableDebug : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		return gAgent.isGodlike();
-	}
-};
-
 class LLAvatarDebug : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -3087,11 +3076,20 @@ bool callback_eject(const LLSD& notification, const LLSD& response)
 	return false;
 }
 
-class LLAvatarEject : public view_listener_t
+void handle_avatar_eject(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		// Use avatar_id if available, otherwise default to right-click avatar
+		LLVOAvatar* avatar = NULL;
+		if (avatar_id.asUUID().notNull())
+		{
+			avatar = find_avatar_from_object(avatar_id.asUUID());
+		}
+		else
+		{
+			avatar = find_avatar_from_object(
+				LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+		}
+
 		if( avatar )
 		{
 			LLSD payload;
@@ -3142,38 +3140,41 @@ class LLAvatarEject : public view_listener_t
 				}
 			}
 		}
-		return true;
-	}
-};
+}
 
-class LLAvatarEnableFreezeEject : public view_listener_t
+bool enable_freeze_eject(const LLSD& avatar_id)
 {
-	bool handleEvent(const LLSD& userdata)
+	// Use avatar_id if available, otherwise default to right-click avatar
+	LLVOAvatar* avatar = NULL;
+	if (avatar_id.asUUID().notNull())
 	{
-		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
-		bool new_value = (avatar != NULL);
+		avatar = find_avatar_from_object(avatar_id.asUUID());
+	}
+	else
+	{
+		avatar = find_avatar_from_object(
+			LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
+	}
+	if (!avatar) return false;
 
-		if (new_value)
-		{
-			const LLVector3& pos = avatar->getPositionRegion();
-			const LLVector3d& pos_global = avatar->getPositionGlobal();
-			LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
-			LLViewerRegion* region = avatar->getRegion();
-			new_value = (region != NULL);
-						
-			if (new_value)
-			{
-				new_value = region->isOwnedSelf(pos);
-				if (!new_value || region->isOwnedGroup(pos))
-				{
-					new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
-				}
-			}
-		}
+	// Gods can always freeze
+	if (gAgent.isGodlike()) return true;
 
-		return new_value;
+	// Estate owners / managers can freeze
+	// Parcel owners can also freeze
+	const LLVector3& pos = avatar->getPositionRegion();
+	const LLVector3d& pos_global = avatar->getPositionGlobal();
+	LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
+	LLViewerRegion* region = avatar->getRegion();
+	if (!region) return false;
+				
+	bool new_value = region->isOwnedSelf(pos);
+	if (!new_value || region->isOwnedGroup(pos))
+	{
+		new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
 	}
-};
+	return new_value;
+}
 
 class LLAvatarGiveCard : public view_listener_t
 {
@@ -3431,26 +3432,13 @@ void handle_show_side_tray()
 	root->addChild(side_tray);
 }
 
-class LLSelfFriends : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		// Open "Friends" tab of the "People" panel in side tray.
-		LLSD param;
-		param["people_panel_tab_name"] = "friends_panel";
-
-		LLSideTray::getInstance()->showPanel("panel_people", param);
-		return true;
-	}
-};
-
-class LLSelfGroups : public view_listener_t
+class LLShowPanelPeopleTab : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		// Open "Groups" tab of the "People" panel in side tray.
+		// Open tab of the "People" panel in side tray.
 		LLSD param;
-		param["people_panel_tab_name"] = "groups_panel";
+		param["people_panel_tab_name"] = userdata.asString();
 		LLSideTray::getInstance()->showPanel("panel_people", param);
 		return true;
 	}
@@ -3485,9 +3473,8 @@ void set_god_level(U8 god_level)
 	gAgent.setGodLevel( god_level );
 	LLViewerParcelMgr::getInstance()->notifyObservers();
 
-	// God mode changes sim visibility
-	LLWorldMap::getInstance()->reset();
-	LLWorldMap::getInstance()->setCurrentLayer(0);
+	// God mode changes region visibility
+	LLWorldMap::getInstance()->reloadItems(true);
 
 	// inventory in items may change in god mode
 	gObjectList.dirtyAllObjectInventory();
@@ -4164,12 +4151,10 @@ void handle_take_copy()
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
 
-	LLUUID category_id =
-		gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
 }
 
-
 // You can return an object to its owner if it is on your land.
 class LLObjectReturn : public view_listener_t
 {
@@ -4250,7 +4235,7 @@ class LLObjectEnableReturn : public view_listener_t
 void force_take_copy(void*)
 {
 	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
-	const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+	const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id);
 }
 
@@ -4311,8 +4296,7 @@ void handle_take()
 		if(category_id.notNull())
 		{
 		        // check trash
-			LLUUID trash;
-			trash = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+			const LLUUID trash = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 			if(category_id == trash || gInventory.isObjectDescendentOf(category_id, trash))
 			{
 				category_id.setNull();
@@ -4328,7 +4312,7 @@ void handle_take()
 	}
 	if(category_id.isNull())
 	{
-		category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+		category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
 	}
 	LLSD payload;
 	payload["folder_id"] = category_id;
@@ -5202,7 +5186,7 @@ void show_debug_menus()
 		gMenuBarView->setItemEnabled("Develop", qamode);
 
 		// Server ('Admin') menu hidden when not in godmode.
-		const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT);
+		const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT || gAgent.getAdminOverride());
 		gMenuBarView->setItemVisible("Admin", show_server_menu);
 		gMenuBarView->setItemEnabled("Admin", show_server_menu);
 	}
@@ -6258,21 +6242,20 @@ class LLAvatarSendIM : public view_listener_t
 		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
 		if(avatar)
 		{
-			std::string name("IM");
-			LLNameValue *first = avatar->getNVPair("FirstName");
-			LLNameValue *last = avatar->getNVPair("LastName");
-			if (first && last)
-			{
-				name.assign( first->getString() );
-				name.append(" ");
-				name.append( last->getString() );
-			}
+			LLAvatarActions::startIM(avatar->getID());
+		}
+		return true;
+	}
+};
 
-			//EInstantMessage type = have_agent_callingcard(gLastHitObjectID)
-			//	? IM_SESSION_ADD : IM_SESSION_CARDLESS_START;
-			gIMMgr->addSession(name,
-								IM_NOTHING_SPECIAL,
-								avatar->getID());
+class LLAvatarCall : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		if(avatar)
+		{
+			LLAvatarActions::startCall(avatar->getID());
 		}
 		return true;
 	}
@@ -6907,7 +6890,7 @@ void handle_grab_texture(void* data)
 		LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
 		LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
 		LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
-		LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type));
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type));
 		if(folder_id.notNull())
 		{
 			std::string name = "Unknown";
@@ -7085,6 +7068,11 @@ void handle_test_load_url(void*)
 //
 // LLViewerMenuHolderGL
 //
+static LLDefaultChildRegistry::Register<LLViewerMenuHolderGL> r("menu_holder");
+
+LLViewerMenuHolderGL::LLViewerMenuHolderGL(const LLViewerMenuHolderGL::Params& p)
+: LLMenuHolderGL(p)
+{}
 
 BOOL LLViewerMenuHolderGL::hideMenus()
 {
@@ -7094,8 +7082,11 @@ BOOL LLViewerMenuHolderGL::hideMenus()
 	mParcelSelection = NULL;
 	mObjectSelection = NULL;
 
-	gMenuBarView->clearHoverItem();
-	gMenuBarView->resetMenuTrigger();
+	if (gMenuBarView)
+	{
+		gMenuBarView->clearHoverItem();
+		gMenuBarView->resetMenuTrigger();
+	}
 
 	return handled;
 }
@@ -7449,52 +7440,10 @@ class LLEditEnableTakeOff : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		std::string clothing = userdata.asString();
-		bool new_value = false;
-		if (clothing == "shirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SHIRT);
-		}
-		if (clothing == "pants")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_PANTS);
-		}
-		if (clothing == "shoes")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SHOES);
-		}
-		if (clothing == "socks")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SOCKS);
-		}
-		if (clothing == "jacket")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_JACKET);
-		}
-		if (clothing == "gloves")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_GLOVES);
-		}
-		if (clothing == "undershirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_UNDERSHIRT);
-		}
-		if (clothing == "underpants")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_UNDERPANTS);
-		}
-		if (clothing == "skirt")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_SKIRT);
-		}
-		if (clothing == "alpha")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_ALPHA);
-		}
-		if (clothing == "tattoo")
-		{
-			new_value = LLAgentWearables::selfHasWearable(WT_TATTOO);
-		}
-		return new_value;
+		EWearableType type = LLWearableDictionary::typeNameToType(clothing);
+		if (type >= WT_SHAPE && type < WT_COUNT)
+			return LLAgentWearables::selfHasWearable(type);
+		return false;
 	}
 };
 
@@ -7503,53 +7452,13 @@ class LLEditTakeOff : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		std::string clothing = userdata.asString();
-		if (clothing == "shirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SHIRT);
-		}
-		else if (clothing == "pants")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_PANTS);
-		}
-		else if (clothing == "shoes")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SHOES);
-		}
-		else if (clothing == "socks")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SOCKS);
-		}
-		else if (clothing == "jacket")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_JACKET);
-		}
-		else if (clothing == "gloves")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_GLOVES);
-		}
-		else if (clothing == "undershirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_UNDERSHIRT);
-		}
-		else if (clothing == "underpants")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_UNDERPANTS);
-		}
-		else if (clothing == "skirt")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_SKIRT);
-		}
-		else if (clothing == "alpha")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_ALPHA);
-		}
-		else if (clothing == "tattoo")
-		{
-			LLAgentWearables::userRemoveWearable((void*)WT_TATTOO);
-		}
-		else if (clothing == "all")
+		if (clothing == "all")
+			LLAgentWearables::userRemoveAllClothes();
+		else
 		{
-			LLAgentWearables::userRemoveAllClothes(NULL);
+			EWearableType type = LLWearableDictionary::typeNameToType(clothing);
+			if (type >= WT_SHAPE && type < WT_COUNT)
+				LLAgentWearables::userRemoveWearable(type);
 		}
 		return true;
 	}
@@ -7864,8 +7773,6 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedSelectedTextureInfo(), "Advanced.SelectedTextureInfo");
 	view_listener_t::addMenu(new LLAdvancedToggleWireframe(), "Advanced.ToggleWireframe");
 	view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
-	view_listener_t::addMenu(new LLAdvancedToggleDisableTextures(), "Advanced.ToggleDisableTextures");
-	view_listener_t::addMenu(new LLAdvancedCheckDisableTextures(), "Advanced.CheckDisableTextures");
 	view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
@@ -8014,25 +7921,25 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments");
 
 	// we don't use boost::bind directly to delay side tray construction
-	view_listener_t::addMenu(new LLSelfFriends(), "Self.Friends");
-	view_listener_t::addMenu(new LLSelfGroups(), "Self.Groups");
+	view_listener_t::addMenu( new LLShowPanelPeopleTab(), "SideTray.PanelPeopleTab");
 
 	 // Avatar pie menu
 	view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
 	view_listener_t::addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend");
 	view_listener_t::addMenu(new LLAvatarAddContact(), "Avatar.AddContact");
-	view_listener_t::addMenu(new LLAvatarFreeze(), "Avatar.Freeze");
+	commit.add("Avatar.Freeze", boost::bind(&handle_avatar_freeze, LLSD()));
 	view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug");
 	view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug");
-	view_listener_t::addMenu(new LLAvatarEnableDebug(), "Avatar.EnableDebug");
 	view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup");
 	view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
-	view_listener_t::addMenu(new LLAvatarEject(), "Avatar.Eject");
+	commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
 	view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
+	view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");
 	view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
 	
 	view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
-	view_listener_t::addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject");
+	enable.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
+	visible.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
 
 	// Object pie menu
 	view_listener_t::addMenu(new LLObjectBuild(), "Object.Build");
@@ -8050,6 +7957,8 @@ void initialize_menus()
 
 	commit.add("Object.Buy", boost::bind(&handle_buy));
 	commit.add("Object.Edit", boost::bind(&handle_object_edit));
+	commit.add("Object.Inspect", boost::bind(&handle_object_inspect));
+	commit.add("Object.Open", boost::bind(&handle_object_open));
 	
 	commit.add("Object.Take", boost::bind(&handle_take));
 
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 6d32df2bc54da706867ac2e4f1f97b5e8e62b7de..9a6fe03f9fa3baee3d46c29bc629fda12dbc6745 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -94,6 +94,7 @@ void handle_sit_down(void*);
 void handle_object_build(void*);
 void handle_object_touch();
 bool enable_object_open();
+void handle_object_open();
 
 // Buy either contents or object itself
 void handle_buy();
@@ -101,6 +102,14 @@ void handle_take_copy();
 void handle_look_at_selection(const LLSD& param);
 void handle_zoom_to_object(LLUUID object_id);
 
+// Takes avatar UUID, or if no UUID passed, uses last selected object
+void handle_avatar_freeze(const LLSD& avatar_id);
+
+// Takes avatar UUID, or if no UUID passed, uses last selected object
+void handle_avatar_eject(const LLSD& avatar_id);
+
+bool enable_freeze_eject(const LLSD& avatar_id);
+
 // Can anyone take a free copy of the object?
 // *TODO: Move to separate file
 bool anyone_copy_selection(LLSelectNode* nodep);
@@ -124,6 +133,11 @@ void handle_export_selected( void * );
 class LLViewerMenuHolderGL : public LLMenuHolderGL
 {
 public:
+	struct Params : public LLInitParam::Block<Params, LLMenuHolderGL::Params>
+	{};
+
+	LLViewerMenuHolderGL(const Params& p);
+
 	virtual BOOL hideMenus();
 	
 	void setParcelSelection(LLSafeHandle<LLParcelSelection> selection);
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 53067c5c930a4be355f51a6c11959e97e58eb49a..505d2afb69a947818e626d7d86ad09760d7af2db 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -354,7 +354,7 @@ class LLFileUploadBulk : public view_listener_t
 				asset_name,
 				asset_name,
 				0,
-				LLAssetType::AT_NONE,
+				LLFolderType::FT_NONE,
 				LLInventoryType::IT_NONE,
 				LLFloaterPerms::getNextOwnerPerms(),
 				LLFloaterPerms::getGroupPerms(),
@@ -536,7 +536,7 @@ LLUUID upload_new_resource(
 	std::string name,
 	std::string desc,
 	S32 compression_info,
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -871,7 +871,7 @@ void upload_done_callback(
 
 	if(result >= 0)
 	{
-		LLAssetType::EType dest_loc = (data->mPreferredLocation == LLAssetType::AT_NONE) ? data->mAssetInfo.mType : data->mPreferredLocation;
+		LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation;
 
 		if (LLAssetType::AT_SOUND == data->mAssetInfo.mType ||
 			LLAssetType::AT_TEXTURE == data->mAssetInfo.mType ||
@@ -917,7 +917,7 @@ void upload_done_callback(
 		{
 			// Actually add the upload to inventory
 			llinfos << "Adding " << uuid << " to inventory." << llendl;
-			LLUUID folder_id(gInventory.findCategoryUUIDForType(dest_loc));
+			const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc);
 			if(folder_id.notNull())
 			{
 				U32 next_owner_perms = data->mNextOwnerPerm;
@@ -968,7 +968,7 @@ void upload_done_callback(
 			asset_name,
 			asset_name,	// file
 			0,
-			LLAssetType::AT_NONE,
+			LLFolderType::FT_NONE,
 			LLInventoryType::IT_NONE,
 			PERM_NONE,
 			PERM_NONE,
@@ -1006,7 +1006,7 @@ LLSD generate_new_resource_upload_capability_body(
 	LLAssetType::EType asset_type,
 	const std::string& name,
 	const std::string& desc,
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -1015,8 +1015,8 @@ LLSD generate_new_resource_upload_capability_body(
 	LLSD body;
 
 	body["folder_id"] = gInventory.findCategoryUUIDForType(
-		(destination_folder_type == LLAssetType::AT_NONE) ?
-		asset_type :
+		(destination_folder_type == LLFolderType::FT_NONE) ?
+		(LLFolderType::EType) asset_type :
 		destination_folder_type);
 
 	body["asset_type"] = LLAssetType::lookup(asset_type);
@@ -1036,7 +1036,7 @@ void upload_new_resource(
 	std::string name,
 	std::string desc,
 	S32 compression_info,
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -1061,7 +1061,7 @@ void upload_new_resource(
 	llinfos << "Name: " << name << llendl;
 	llinfos << "Desc: " << desc << llendl;
 	llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl;
-	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl;
+	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl;
 	lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;
 
 	std::string url = gAgent.getRegion()->getCapability(
@@ -1140,7 +1140,7 @@ BOOL upload_new_variable_price_resource(
 	LLAssetType::EType asset_type,
 	std::string name,
 	std::string desc, 
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -1163,7 +1163,7 @@ BOOL upload_new_variable_price_resource(
 	llinfos << "Name: " << name << llendl;
 	llinfos << "Desc: " << desc << llendl;
 	lldebugs << "Folder: "
- << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl;
+		<< gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? (LLFolderType::EType)asset_type : destination_folder_type) << llendl;
 	lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;
 
 	std::string url = gAgent.getRegion()->getCapability(
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index 25469e0168da254d0a9281b9c031e6955349d84a..800325df0bd48236cd60246cadb294d00e0e8b66 100644
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -33,7 +33,7 @@
 #ifndef LLVIEWERMENUFILE_H
 #define LLVIEWERMENUFILE_H
 
-#include "llassettype.h"
+#include "llfoldertype.h"
 #include "llinventorytype.h"
 
 class LLTransactionID;
@@ -46,7 +46,7 @@ LLUUID upload_new_resource(
 	std::string name,
 	std::string desc, 
 	S32 compression_info,
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -62,7 +62,7 @@ void upload_new_resource(
 	std::string name,
 	std::string desc, 
 	S32 compression_info,
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
@@ -82,7 +82,7 @@ BOOL upload_new_variable_price_resource(
 	LLAssetType::EType type,
 	std::string name,
 	std::string desc, 
-	LLAssetType::EType destination_folder_type,
+	LLFolderType::EType destination_folder_type,
 	LLInventoryType::EType inv_type,
 	U32 next_owner_perms,
 	U32 group_perms,
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9840017bd6969091240eb959a28864bb350eca76..f71bb2ce891604b636db938bcb1d79fa5f320861 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -89,6 +89,7 @@
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llinventorymodel.h"
+#include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llmenugl.h"
 #include "llmoveview.h"
@@ -139,7 +140,7 @@
 #include "llgroupactions.h"
 #include "llagentui.h"
 #include "llpanelblockedlist.h"
-#include "llpanelplaceinfo.h"
+#include "llpanelplaceprofile.h"
 
 #include <boost/tokenizer.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -208,7 +209,6 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
 bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
-	LLUUID fid;
 	LLMessageSystem* msg = gMessageSystem;
 	const LLSD& payload = notification["payload"];
 
@@ -218,10 +218,11 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 	switch(option)
 	{
 	case 0:
+	{
 		// accept
 		LLAvatarTracker::formFriendship(payload["from_id"]);
 
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 
 		// This will also trigger an onlinenotification if the user is online
 		msg->newMessageFast(_PREHASH_AcceptFriendship);
@@ -234,7 +235,9 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	case 1:
+	{
 		// decline
 		// We no longer notify other viewers, but we DO still send
 		// the rejection to the simulator to delete the pending userop.
@@ -246,6 +249,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]);
 		msg->sendReliable(LLHost(payload["sender"].asString()));
 		break;
+	}
 	default:
 		// close button probably, possibly timed out
 		break;
@@ -766,8 +770,7 @@ class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
 	virtual void done()
 	{
 		LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		bool notify = false;
 		if(trash_id.notNull() && mObjectID.notNull())
 		{
@@ -874,7 +877,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 {
 	std::vector<LLUUID>::const_iterator it = items.begin();
 	std::vector<LLUUID>::const_iterator end = items.end();
-	LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH));
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 	LLInventoryItem* item;
 	for(; it != end; ++it)
 	{
@@ -945,13 +948,12 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 		}
 
 		//Trash Check
-		LLUUID trash_id;
-		trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
+		const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
 		if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id))
 		{
 			return;
 		}
-		LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
+		const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 		//BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view);
 		BOOL user_is_away = gAwayTimer.getStarted();
 
@@ -1715,7 +1717,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				info->mFromGroup = from_group;
 				info->mTransactionID = session_id;
 				info->mType = (LLAssetType::EType) asset_type;
-				info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+				info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 				std::string from_name;
 
 				from_name += "A group member named ";
@@ -1849,7 +1851,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			info->mFromID = from_id;
 			info->mFromGroup = from_group;
 			info->mTransactionID = session_id;
-			info->mFolderID = gInventory.findCategoryUUIDForType(info->mType);
+			info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 
 			if (dialog == IM_TASK_INVENTORY_OFFERED)
 			{
@@ -2143,7 +2145,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
 		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
 		msg->nextBlockFast(_PREHASH_TransactionBlock);
 		msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID());
-		fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
+		fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
 		msg->nextBlockFast(_PREHASH_FolderData);
 		msg->addUUIDFast(_PREHASH_FolderID, fid);
 		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
@@ -2596,11 +2598,10 @@ BOOL LLPostTeleportNotifiers::tick()
 	{
 		// get callingcards and landmarks available to the user arriving.
 		LLInventoryFetchDescendentsObserver::folder_ref_t folders;
-		LLUUID folder_id;
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD);
-		if(folder_id.notNull()) 
-			folders.push_back(folder_id);
-		folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
+		const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
+		if(callingcard_id.notNull()) 
+			folders.push_back(callingcard_id);
+		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		if(folder_id.notNull()) 
 			folders.push_back(folder_id);
 		if(!folders.empty())
@@ -2913,46 +2914,37 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
 
 	if (!gLastVersionChannel.empty())
 	{
-		LLSD payload;
-		payload["message"] = version_channel;
-		LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload, server_version_changed_callback);
-	}
-
-	gLastVersionChannel = version_channel;
-}
-
-bool server_version_changed_callback(const LLSD& notification, const LLSD& response)
-{
-	if(notification["payload"]["message"].asString() =="")
-		return false;
-	std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
-	//parse the msg string
-	std::string server_version = notification["payload"]["message"].asString();
-	std::vector<std::string> s_vect;
-	boost::algorithm::split(s_vect, server_version, isspace);
-	for(U32 i = 0; i < s_vect.size(); i++)
-	{
-    	if (i != (s_vect.size() - 1))
+		// work out the URL for this server's Release Notes
+		std::string url ="http://wiki.secondlife.com/wiki/Release_Notes/";
+		std::string server_version = version_channel;
+		std::vector<std::string> s_vect;
+		boost::algorithm::split(s_vect, server_version, isspace);
+		for(U32 i = 0; i < s_vect.size(); i++)
 		{
-			if(i != (s_vect.size() - 2))
+			if (i != (s_vect.size() - 1))
 			{
-			   url += s_vect[i] + "_";
+				if(i != (s_vect.size() - 2))
+				{
+				   url += s_vect[i] + "_";
+				}
+				else
+				{
+					url += s_vect[i] + "/";
+				}
 			}
 			else
 			{
-				url += s_vect[i] + "/";
+				url += s_vect[i].substr(0,4);
 			}
 		}
-		else
-		{
-			url += s_vect[i].substr(0,4);
-		}
+
+		LLSD args;
+		args["URL"] = url;
+		LLNotifications::instance().add("ServerVersionChanged", args);
 	}
-	
-	LLWeb::loadURL(url);
-	return false;
-}
 
+	gLastVersionChannel = version_channel;
+}
 
 void process_crossed_region(LLMessageSystem* msg, void**)
 {
@@ -4819,7 +4811,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		// create a new inventory category to put this in
 		LLUUID cat_id;
 		cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
-											  LLAssetType::AT_NONE,
+											  LLFolderType::FT_NONE,
 											  LLTrans::getString("AcquiredItems"));
 
 		InventoryObjectList::const_iterator it = inventory->begin();
@@ -4869,7 +4861,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		}
 
 		LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-		LLUUID category = gInventory.findCategoryUUIDForType(item->getType());
+		const LLUUID category = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType()));
 
 		LLUUID item_id;
 		item_id.generate();
@@ -5549,7 +5541,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
 	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
 	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateEstateName(estate_name);
@@ -5683,7 +5675,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
 	LLPanelLandCovenant::updateCovenantText(covenant_text);
 	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
 
-	LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateCovenantText(covenant_text);
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index c15e5df675a717ccc06bf0c4477d6e553babdc21..e24da2013d19c6b4189413230c96248258468065 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -132,7 +132,6 @@ void container_inventory_arrived(LLViewerObject* object,
 // agent movement
 void send_complete_agent_movement(const LLHost& sim_host);
 void process_agent_movement_complete(LLMessageSystem* msg, void**);
-bool server_version_changed_callback(const LLSD& notification, const LLSD& response);
 void process_crossed_region(LLMessageSystem* msg, void**);
 void process_teleport_start(LLMessageSystem* msg, void**);
 void process_teleport_progress(LLMessageSystem* msg, void**);
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 20cd516fa06e08a53d1bc616d6e700cd93dfd6e8..e491e119601e10c75344bc475e490284c22027ce 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2906,7 +2906,7 @@ F32 LLViewerObject::getMidScale() const
 }
 
 
-void LLViewerObject::updateTextures(LLAgent &agent)
+void LLViewerObject::updateTextures()
 {
 }
 
@@ -2928,7 +2928,7 @@ void LLViewerObject::boostTexturePriority(BOOL boost_children /* = TRUE */)
 	{
 		LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
 		LLUUID sculpt_id = sculpt_params->getSculptTexture();
-		LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED);
+		LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED);
 	}
 	
 	if (boost_children)
@@ -3691,7 +3691,7 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry)
 //	if (mDrawable.notNull() && mDrawable->isVisible())
 //	{
 		const LLUUID& image_id = getTE(te)->getID();
-		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 //	}
 }
 
@@ -3717,7 +3717,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos
 		uuid == LLUUID::null)
 	{
 		retval = LLPrimitive::setTETexture(te, uuid);
-		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
+		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
 		setChanged(TEXTURE);
 		if (mDrawable.notNull())
 		{
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index b8ae31118c1c078bc83ed2b0536b08f78c9b33be..01b213a87d1b871ccbfcdc7b56350cf034bdd375 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -199,7 +199,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	S32 getNumFaces() const { return mNumFaces; }
 
 	// Graphical stuff for objects - maybe broken out into render class later?
-	virtual void updateTextures(LLAgent &agent);
+	virtual void updateTextures();
 	virtual void boostTexturePriority(BOOL boost_children = TRUE);	// When you just want to boost priority of this object
 	
 	virtual LLDrawable* createDrawable(LLPipeline *pipeline);
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 2927ca529264f0bb172909ca0fdf4b484558bd1e..96828ee1b6088baad4c3ef16e92c81c7a38438fb 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -642,7 +642,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
 
 			//  Update distance & gpw 
 			objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area
-			objectp->updateTextures(agent);	// Update the image levels of textures for this object.
+			objectp->updateTextures();	// Update the image levels of textures for this object.
 		}
 	}
 
@@ -1074,6 +1074,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 	LLColor4 group_own_below_water_color = 
 						LLUIColorTable::instance().getColor( "NetMapGroupOwnBelowWater" );
 
+	F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius");
 
 	for (S32 i = 0; i < mMapObjects.count(); i++)
 	{
@@ -1089,6 +1090,11 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 
 		F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f;  // 1.3 is a fudge
 
+		// Limit the size of megaprims so they don't blot out everything on the minimap.
+		// Attempting to draw very large megaprims also causes client lag.
+		// See DEV-17370 and DEV-29869/SNOW-79 for details.
+		approx_radius = llmin(approx_radius, max_radius);
+
 		LLColor4U color = above_water_color;
 		if( objectp->permYouOwner() )
 		{
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 6233a337a663ff8b2b7971fce0705e3379e01af4..336d7f684e6f9731a7bf2ad06b7cfbb7738ad24f 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -226,6 +226,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 				media_height, 
 				media_auto_scale,
 				media_loop);
+			sMediaImpl->setIsParcelMedia(true);
 			sMediaImpl->navigateTo(media_url, mime_type, true);
 		}
 	}
@@ -240,6 +241,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
 			media_height, 
 			media_auto_scale,
 			media_loop);
+		sMediaImpl->setIsParcelMedia(true);
 		sMediaImpl->navigateTo(media_url, mime_type, true);
 	}
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 986264ad347311043143398a2652f5f8a7413529..831783752090b7e0be5d6e09a275bf07f26589a7 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1427,11 +1427,11 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("EstateChangeInfo");
 	capabilityNames.append("EventQueueGet");
 	capabilityNames.append("FetchInventory");
-	capabilityNames.append("WebFetchInventoryDescendents");
 	capabilityNames.append("ObjectMedia");
 	capabilityNames.append("ObjectMediaNavigate");
 	capabilityNames.append("FetchLib");
 	capabilityNames.append("FetchLibDescendents");
+	capabilityNames.append("GetTexture");
 	capabilityNames.append("GroupProposalBallot");
 	capabilityNames.append("HomeLocation");
 	capabilityNames.append("MapLayer");
@@ -1454,6 +1454,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("SendUserReportWithScreenshot");
 	capabilityNames.append("ServerReleaseNotes");
 	capabilityNames.append("StartGroupProposal");
+	capabilityNames.append("TextureStats");
 	capabilityNames.append("UntrustedSimulatorMessage");
 	capabilityNames.append("UpdateAgentInformation");
 	capabilityNames.append("UpdateAgentLanguage");
@@ -1466,6 +1467,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("UploadBakedTexture");
 	capabilityNames.append("ViewerStartAuction");
 	capabilityNames.append("ViewerStats");
+	capabilityNames.append("WebFetchInventoryDescendents");
 	// Please add new capabilities alphabetically to reduce
 	// merge conflicts.
 
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 6e07d8f2468c369a187bb8591e65c6f49fd2882f..caa94dba381252b8369484d446968428d09ae007 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -560,12 +560,18 @@ extern U32  gVisCompared;
 extern U32  gVisTested;
 
 std::map<S32,LLFrameTimer> gDebugTimers;
+std::map<S32,std::string> gDebugTimerLabel;
+
+void init_statistics()
+{
+	// Label debug timers
+	gDebugTimerLabel[0] = "Texture";
+}
 
 void update_statistics(U32 frame_count)
 {
 	gTotalWorldBytes += gVLManager.getTotalBytes();
 	gTotalObjectBytes += gObjectBits / 8;
-	gTotalTextureBytes += gTextureList.mTextureBits / 8;
 
 	// make sure we have a valid time delta for this frame
 	if (gFrameIntervalSeconds > 0.f)
@@ -617,7 +623,6 @@ void update_statistics(U32 frame_count)
 	F32 layer_bits = (F32)(gVLManager.getLandBits() + gVLManager.getWindBits() + gVLManager.getCloudBits());
 	LLViewerStats::getInstance()->mLayersKBitStat.addValue(layer_bits/1024.f);
 	LLViewerStats::getInstance()->mObjectKBitStat.addValue(gObjectBits/1024.f);
-	LLViewerStats::getInstance()->mTextureKBitStat.addValue(gTextureList.mTextureBits/1024.f);
 	LLViewerStats::getInstance()->mVFSPendingOperations.addValue(LLVFile::getVFSThread()->getPending());
 	LLViewerStats::getInstance()->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f);
 	gTransferManager.resetTransferBitsIn(LLTCT_ASSET);
@@ -631,8 +636,6 @@ void update_statistics(U32 frame_count)
 		gDebugTimers[0].unpause();
 	}
 	
-	LLViewerStats::getInstance()->mTexturePacketsStat.addValue(gTextureList.mTexturePackets);
-
 	{
 		static F32 visible_avatar_frames = 0.f;
 		static F32 avg_visible_avatars = 0;
@@ -652,8 +655,20 @@ void update_statistics(U32 frame_count)
 	gObjectBits = 0;
 //	gDecodedBits = 0;
 
-	gTextureList.mTextureBits = 0;
-	gTextureList.mTexturePackets = 0;
+	// Only update texture stats ones per second so that they are less noisy
+	{
+		static const F32 texture_stats_freq = 1.f;
+		static LLFrameTimer texture_stats_timer;
+		if (texture_stats_timer.getElapsedTimeF32() >= texture_stats_freq)
+		{
+			LLViewerStats::getInstance()->mTextureKBitStat.addValue(LLViewerTextureList::sTextureBits/1024.f);
+			LLViewerStats::getInstance()->mTexturePacketsStat.addValue(LLViewerTextureList::sTexturePackets);
+			gTotalTextureBytes += LLViewerTextureList::sTextureBits / 8;
+			LLViewerTextureList::sTextureBits = 0;
+			LLViewerTextureList::sTexturePackets = 0;
+			texture_stats_timer.reset();
+		}
+	}
 
 }
 
@@ -826,3 +841,4 @@ void send_stats()
 	LLViewerStats::getInstance()->addToMessage(body);
 	LLHTTPClient::post(url, body, new ViewerStatsResponder());
 }
+
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index ba89fbf02a52ce104a76568cf8aa54192d3ab129..13d73000d242ed6158e38821d8437bf94b2a7141 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -34,6 +34,7 @@
 #define LL_LLVIEWERSTATS_H
 
 #include "llstat.h"
+#include "lltextureinfo.h"
 
 class LLViewerStats : public LLSingleton<LLViewerStats>
 {
@@ -205,10 +206,13 @@ class LLViewerStats : public LLSingleton<LLViewerStats>
 static const F32 SEND_STATS_PERIOD = 300.0f;
 
 // The following are from (older?) statistics code found in appviewer.
+void init_statistics();
 void reset_statistics();
 void output_statistics(void*);
 void update_statistics(U32 frame_count);
 void send_stats();
 
 extern std::map<S32,LLFrameTimer> gDebugTimers;
+extern std::map<S32,std::string> gDebugTimerLabel;
+
 #endif // LL_LLVIEWERSTATS_H
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 8fad9e09cba202ee194165f5a169a9fe1107369f..dd310a8813743db8a6217ba6e2221d858fc5afd5 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -62,6 +62,7 @@
 #include "lltooltip.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
+#include "llviewerassettype.h"
 #include "llviewercontrol.h"
 #include "llviewerinventory.h"
 #include "llviewertexturelist.h"
@@ -170,7 +171,7 @@ class LLEmbeddedItemSegment : public LLTextSegment
 		mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
 	}
 
-	/*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
+	/*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
 	{
 		if (num_chars == 0)
 		{
@@ -182,12 +183,29 @@ class LLEmbeddedItemSegment : public LLTextSegment
 			width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str());
 			height = llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight()));
 		}
-
+		return false;
 	}
 
 	/*virtual*/ S32				getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const 
 	{
-		return 1;
+		// always draw at beginning of line
+		if (line_offset == 0)
+		{
+			return 1;
+		}
+		else
+		{
+			S32 width, height;
+			getDimensions(mStart, 1, width, height);
+			if (width > num_pixels) 
+			{
+				return 0;
+			}
+			else
+			{
+				return 1;
+			}
+		}
 	}
 	/*virtual*/ F32				draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect)
 	{
@@ -207,7 +225,7 @@ class LLEmbeddedItemSegment : public LLTextSegment
 		}
 
 		F32 right_x;
-		mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mBottom, color, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
+		mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mTop, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
 		return right_x;
 	}
 	
@@ -505,20 +523,18 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
 				}
 
 				break;
-			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";	break;
+			case LLAssetType::AT_SOUND:			img_name = "Inv_Sound";		break;
 			case LLAssetType::AT_CLOTHING:		img_name = "Inv_Clothing";	break;
-			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; break;
+			case LLAssetType::AT_OBJECT:		img_name = "Inv_Object"; 	break;
 			case LLAssetType::AT_CALLINGCARD:	img_name = "Inv_CallingCard"; break;
-			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; break;
+			case LLAssetType::AT_LANDMARK:		img_name = "Inv_Landmark"; 	break;
 			case LLAssetType::AT_NOTECARD:		img_name = "Inv_Notecard";	break;
 			case LLAssetType::AT_LSL_TEXT:		img_name = "Inv_Script";	break;
-			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";	break;
-			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";break;
-			case LLAssetType::AT_GESTURE:			img_name = "Inv_Gesture";	break;
-				//TODO need img_name
-			case LLAssetType::AT_FAVORITE:		img_name = "Inv_Landmark";	 break;
+			case LLAssetType::AT_BODYPART:		img_name = "Inv_Skin";		break;
+			case LLAssetType::AT_ANIMATION:		img_name = "Inv_Animation";	break;
+			case LLAssetType::AT_GESTURE:		img_name = "Inv_Gesture";	break;
 			case LLAssetType::AT_MESH:            img_name = "inv_item_mesh.tga";	 break;
-			default: llassert(0); 
+			default: llassert(0);
 		}
 
 		return LLUI::getUIImage(img_name);
@@ -733,11 +749,10 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
 		if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
 		{
 			LLToolDragAndDrop::getInstance()->beginDrag(
-				LLAssetType::lookupDragAndDropType( mDragItem->getType() ),
+				LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ),
 				mDragItem->getUUID(),
 				LLToolDragAndDrop::SOURCE_NOTECARD,
 				mPreviewID, mObjectID);
-
 			return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
 		}
 		getWindow()->setCursor(UI_CURSOR_HAND);
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 1cda1769c34e64a621db3027abdbb7fbfd9df73a..b812ab4fe6371796b8ed54c5105c5499afeaefe7 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -60,6 +60,8 @@
 #include "llviewercontrol.h"
 #include "pipeline.h"
 #include "llappviewer.h"
+#include "llface.h"
+#include "llviewercamera.h"
 #include "lltextureatlas.h"
 #include "lltextureatlasmanager.h"
 #include "lltextureentry.h"
@@ -88,7 +90,15 @@ S32 LLViewerTexture::sTotalTextureMemoryInBytes = 0;
 S32 LLViewerTexture::sMaxBoundTextureMemInMegaBytes = 0;
 S32 LLViewerTexture::sMaxTotalTextureMemInMegaBytes = 0;
 S32 LLViewerTexture::sMaxDesiredTextureMemInBytes = 0 ;
-BOOL LLViewerTexture::sDontLoadVolumeTextures = FALSE;
+S8  LLViewerTexture::sCameraMovingDiscardBias = 0 ;
+S32 LLViewerTexture::sMaxSculptRez = 128 ; //max sculpt image size
+const S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64 ;
+const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez ;
+const S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128 ;
+S32 LLViewerTexture::sMinLargeImageSize = 65536 ; //256 * 256.
+S32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA ;
+BOOL LLViewerTexture::sFreezeImageScalingDown = FALSE ;
+F32 LLViewerTexture::sCurrentTime = 0.0f ;
 BOOL LLViewerTexture::sUseTextureAtlas        = FALSE ;
 
 const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
@@ -162,6 +172,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(BOOL usemipma
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
@@ -171,12 +182,14 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLUUID&
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
 LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const LLImageRaw* raw, BOOL usemipmaps) 
 {
 	LLPointer<LLViewerTexture> tex = new LLViewerTexture(raw, usemipmaps) ;
+	tex->setCategory(LLViewerTexture::LOCAL) ;
 	return tex ;
 }
 LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex) 
@@ -185,6 +198,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 wid
 	if(generate_gl_tex)
 	{
 		tex->generateGLTexture() ;
+		tex->setCategory(LLViewerTexture::LOCAL) ;
 	}
 	return tex ;
 }
@@ -198,6 +212,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
 												   LLGLenum primary_format,
 												   LLHost request_from_host)
 {
+	llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ;
 	return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
 }
 	
@@ -210,9 +225,23 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
+	llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ;
 	return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
 }
 
+//static 
+LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,									 
+									 BOOL usemipmaps,
+									 S32 boost_priority,
+									 S8 texture_type,
+									 LLGLint internal_format,
+									 LLGLenum primary_format,
+									 const LLUUID& force_id
+									 )
+{
+	return gTextureList.getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
+}
+
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) 
 {
 	return gTextureList.getImageFromHost(image_id, host) ;
@@ -254,12 +283,13 @@ void LLViewerTextureManager::init()
 	}
 	imagep->createGLTexture(0, image_raw);
 	image_raw = NULL;
-	LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
 #else
- 	LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
+ 	LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
 #endif
-	
- 	LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, TRUE);
+	LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
+	LLViewerFetchedTexture::sDefaultImagep->setCategory(LLViewerTexture::OTHER) ;
+
+ 	LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, LLViewerTexture::BOOST_UI);
 	LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ;
 
 	LLViewerTexture::initClass() ;
@@ -282,6 +312,8 @@ void LLViewerTextureManager::cleanup()
 	LLViewerFetchedTexture::sWhiteImagep = NULL;
 
 	LLViewerMediaTexture::cleanup() ;	
+
+	LLViewerTexture::cleanupClass() ;
 }
 
 //----------------------------------------------------------------------------------------------
@@ -292,6 +324,11 @@ void LLViewerTextureManager::cleanup()
 void LLViewerTexture::initClass()
 {
 	LLImageGL::sDefaultGLTexture = LLViewerFetchedTexture::sDefaultImagep->getGLTexture() ;
+
+	if(gAuditTexture)
+	{
+		LLImageGL::setHighlightTexture(LLViewerTexture::OTHER) ;	
+	}
 }
 
 // static
@@ -299,6 +336,25 @@ void LLViewerTexture::cleanupClass()
 {
 }
 
+// static
+S32 LLViewerTexture::getTotalNumOfCategories() 
+{
+	return MAX_GL_IMAGE_CATEGORY - (BOOST_HIGH - BOOST_SCULPTED) + 2 ;
+}
+
+// static
+//index starts from zero.
+S32 LLViewerTexture::getIndexFromCategory(S32 category) 
+{
+	return (category < BOOST_HIGH) ? category : category - (BOOST_HIGH - BOOST_SCULPTED) + 1 ;
+}
+
+//static 
+S32 LLViewerTexture::getCategoryFromIndex(S32 index)
+{
+	return (index < BOOST_HIGH) ? index : index + (BOOST_HIGH - BOOST_SCULPTED) - 1 ;
+}
+
 // tuning params
 const F32 discard_bias_delta = .05f;
 const F32 discard_delta_time = 0.5f;
@@ -310,6 +366,8 @@ F32 texmem_middle_bound_scale = 0.925f;
 //static
 void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity)
 {
+	sCurrentTime = gFrameTimeSeconds ;
+
 	if(LLViewerTextureManager::sTesterp)
 	{
 		LLViewerTextureManager::sTesterp->update() ;
@@ -350,6 +408,13 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
 	}
 	sDesiredDiscardBias = llclamp(sDesiredDiscardBias, desired_discard_bias_min, desired_discard_bias_max);
 	LLViewerTexture::sUseTextureAtlas = gSavedSettings.getBOOL("EnableTextureAtlas") ;
+	
+	F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ;
+	F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed();
+	sCameraMovingDiscardBias = (S8)llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1) ;
+
+	LLViewerTexture::sFreezeImageScalingDown = (BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) < 0.75f * sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale) &&
+				(BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) < 0.75f * sMaxTotalTextureMemInMegaBytes * texmem_middle_bound_scale) ;
 }
 
 //end of static functions
@@ -415,7 +480,9 @@ void LLViewerTexture::init(bool firstinit)
 	mTextureState = NO_DELETE ;
 	mDontDiscard = FALSE;
 	mMaxVirtualSize = 0.f;
+	mNeedsGLTexture = FALSE ;
 	mNeedsResetMaxVirtualSize = FALSE ;
+	mAdditionalDecodePriority = 0.f ;	
 	mParcelMedia = NULL ;
 }
 
@@ -457,11 +524,15 @@ void LLViewerTexture::setBoostLevel(S32 level)
 		{
 			setNoDelete() ;		
 		}
+		if(gAuditTexture)
+		{
+			setCategory(mBoostLevel);
+		}
 	}
 }
 
 
-bool LLViewerTexture::bindDefaultImage(S32 stage) const
+bool LLViewerTexture::bindDefaultImage(S32 stage) 
 {
 	if (stage < 0) return false;
 
@@ -480,6 +551,10 @@ bool LLViewerTexture::bindDefaultImage(S32 stage) const
 		llwarns << "LLViewerTexture::bindDefaultImage failed." << llendl;
 	}
 	stop_glerror();
+
+	//check if there is cached raw image and switch to it if possible
+	switchToCachedImage() ;
+
 	if(LLViewerTextureManager::sTesterp)
 	{
 		LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ;
@@ -498,24 +573,32 @@ void LLViewerTexture::forceImmediateUpdate()
 {
 }
 
-void LLViewerTexture::addTextureStats(F32 virtual_size) const 
+void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) const 
 {
-	if (virtual_size > mMaxVirtualSize)
+	if(needs_gltexture)
 	{
-		mMaxVirtualSize = virtual_size;
+		mNeedsGLTexture = TRUE ;
 	}
-}
 
-void LLViewerTexture::resetTextureStats(BOOL zero)
-{
-	if (zero)
+	if(mNeedsResetMaxVirtualSize)
 	{
-		mMaxVirtualSize = 0.0f;
+		//flag to reset the values because the old values are used.
+		mNeedsResetMaxVirtualSize = FALSE ;
+		mMaxVirtualSize = virtual_size;		
+		mAdditionalDecodePriority = 0.f ;	
+		mNeedsGLTexture = needs_gltexture ;
 	}
-	else
+	else if (virtual_size > mMaxVirtualSize)
 	{
-		mMaxVirtualSize -= mMaxVirtualSize * .10f; // decay by 5%/update
-	}
+		mMaxVirtualSize = virtual_size;
+	}	
+}
+
+void LLViewerTexture::resetTextureStats()
+{
+	mMaxVirtualSize = 0.0f;
+	mAdditionalDecodePriority = 0.f ;	
+	mNeedsResetMaxVirtualSize = FALSE ;
 }
 
 //virtual 
@@ -542,6 +625,12 @@ void LLViewerTexture::removeFace(LLFace* facep)
 	mFaceList.remove(facep) ;
 }
 
+//virtual
+void LLViewerTexture::switchToCachedImage()
+{
+	//nothing here.
+}
+
 void LLViewerTexture::forceActive()
 {
 	mTextureState = ACTIVE ; 
@@ -586,11 +675,11 @@ BOOL LLViewerTexture::createGLTexture()
 	return mGLTexturep->createGLTexture() ;
 }
 
-BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename)
+BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename, BOOL to_create, S32 category)
 {
 	llassert_always(mGLTexturep.notNull()) ;	
 
-	BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename) ;
+	BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename, to_create, category) ;
 
 	if(ret)
 	{
@@ -702,6 +791,13 @@ void LLViewerTexture::setGLTextureCreated (bool initialized)
 	mGLTexturep->setGLTextureCreated (initialized) ;
 }
 
+void  LLViewerTexture::setCategory(S32 category) 
+{
+	llassert_always(mGLTexturep.notNull()) ;
+
+	mGLTexturep->setCategory(category) ;
+}
+
 LLTexUnit::eTextureAddressMode LLViewerTexture::getAddressMode(void) const
 {
 	llassert_always(mGLTexturep.notNull()) ;
@@ -750,18 +846,18 @@ BOOL LLViewerTexture::getMissed() const
 	return mGLTexturep->getMissed() ;
 }
 
-BOOL LLViewerTexture::isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) 
+BOOL LLViewerTexture::isJustBound() const
 {
 	llassert_always(mGLTexturep.notNull()) ;
 
-	return mGLTexturep->isValidForSculpt(discard_level, image_width, image_height, ncomponents) ;
+	return mGLTexturep->isJustBound() ;
 }
 
-BOOL LLViewerTexture::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const
+void LLViewerTexture::forceUpdateBindStats(void) const
 {
 	llassert_always(mGLTexturep.notNull()) ;
 
-	return mGLTexturep->readBackRaw(discard_level, imageraw, compressed_ok) ;
+	return mGLTexturep->forceUpdateBindStats() ;
 }
 
 U32 LLViewerTexture::getTexelsInAtlas() const
@@ -801,6 +897,11 @@ void LLViewerTexture::destroyGLTexture()
 	}	
 }
 
+BOOL LLViewerTexture::isLargeImage()
+{
+	return mFullWidth * mFullHeight > LLViewerTexture::sMinLargeImageSize ;
+}
+
 //virtual 
 void LLViewerTexture::updateBindStatsForTester()
 {
@@ -821,11 +922,12 @@ void LLViewerTexture::updateBindStatsForTester()
 //static
 F32 LLViewerFetchedTexture::maxDecodePriority()
 {
-	return 2000000.f;
+	return 6000000.f;
 }
 
-LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps)
-	: LLViewerTexture(id, usemipmaps)
+LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
+	: LLViewerTexture(id, usemipmaps),
+	mTargetHost(host)
 {
 	init(TRUE) ;
 	generateGLTexture() ;
@@ -837,9 +939,9 @@ LLViewerFetchedTexture::LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemi
 	init(TRUE) ;
 }
 	
-LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps)
+LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
 	: LLViewerTexture(id, usemipmaps),
-	mLocalFileName(full_path)
+	mUrl(url)
 {
 	init(TRUE) ;
 	generateGLTexture() ;
@@ -884,10 +986,18 @@ void LLViewerFetchedTexture::init(bool firstinit)
 	mFetchPriority = 0;
 	mDownloadProgress = 0.f;
 	mFetchDeltaTime = 999999.f;
-	mDecodeFrame = 0;
-	mVisibleFrame = 0;
 	mForSculpt = FALSE ;
 	mIsFetched = FALSE ;
+
+	mCachedRawImage = NULL ;
+	mCachedRawDiscardLevel = -1 ;
+	mCachedRawImageReady = FALSE ;
+
+	mSavedRawImage = NULL ;
+	mForceToSaveRawImage  = FALSE ;
+	mSavedRawDiscardLevel = -1 ;
+	mDesiredSavedRawDiscardLevel = -1 ;
+	mLastReferencedSavedRawImageTime = 0.0f ;
 }
 
 LLViewerFetchedTexture::~LLViewerFetchedTexture()
@@ -924,11 +1034,25 @@ void LLViewerFetchedTexture::cleanup()
 	
 	// Clean up image data
 	destroyRawImage();
+	mCachedRawImage = NULL ;
+	mCachedRawDiscardLevel = -1 ;
+	mCachedRawImageReady = FALSE ;
+	mSavedRawImage = NULL ;
 }
 
 void LLViewerFetchedTexture::setForSculpt()
 {
 	mForSculpt = TRUE ;
+	if(isForSculptOnly() && !getBoundRecently())
+	{
+		destroyGLTexture() ; //sculpt image does not need gl texture.
+	}
+	checkCachedRawSculptImage() ;
+}
+
+BOOL LLViewerFetchedTexture::isForSculptOnly() const
+{
+	return mForSculpt && !mNeedsGLTexture ;
 }
 
 BOOL LLViewerFetchedTexture::isDeleted()  
@@ -963,17 +1087,37 @@ void LLViewerFetchedTexture::setInactive()
 	}
 }
 
+BOOL LLViewerFetchedTexture::isFullyLoaded() const
+{
+	// Unfortunately, the boolean "mFullyLoaded" is never updated correctly so we use that logic
+	// to check if the texture is there and completely downloaded
+	return (mFullWidth != 0) && (mFullHeight != 0) && !mIsFetching && !mHasFetcher;
+}
+
+
 // virtual
 void LLViewerFetchedTexture::dump()
 {
 	LLViewerTexture::dump();
 
-	llinfos << "LLViewerFetchedTexture"
-			<< " mIsMissingAsset " << (S32)mIsMissingAsset
-			<< " mFullWidth " << mFullWidth
-			<< " mFullHeight " << mFullHeight
-			<< " mOrigWidth" << mOrigWidth
-			<< " mOrigHeight" << mOrigHeight
+	llinfos << "Dump : " << mID 
+			<< ", mIsMissingAsset = " << (S32)mIsMissingAsset
+			<< ", mFullWidth = " << (S32)mFullWidth
+			<< ", mFullHeight = " << (S32)mFullHeight
+			<< ", mOrigWidth = " << (S32)mOrigWidth
+			<< ", mOrigHeight = " << (S32)mOrigHeight
+			<< llendl;
+	llinfos << "     : " 
+			<< " mFullyLoaded = " << (S32)mFullyLoaded
+			<< ", mFetchState = " << (S32)mFetchState
+			<< ", mFetchPriority = " << (S32)mFetchPriority
+			<< ", mDownloadProgress = " << (F32)mDownloadProgress
+			<< llendl;
+	llinfos << "     : " 
+			<< " mHasFetcher = " << (S32)mHasFetcher
+			<< ", mIsFetching = " << (S32)mIsFetching
+			<< ", mIsFetched = " << (S32)mIsFetched
+			<< ", mBoostLevel = " << (S32)mBoostLevel
 			<< llendl;
 }
 
@@ -994,6 +1138,75 @@ void LLViewerFetchedTexture::destroyTexture()
 	mFullyLoaded = FALSE ;
 }
 
+//
+//do not change the discard level of the loaded texture image.
+BOOL LLViewerFetchedTexture::keepReuestedDiscardLevel()
+{
+	if (!mLoadedCallbackList.empty())
+	{
+		return TRUE ;
+	}
+
+	return FALSE ;
+}
+
+void LLViewerFetchedTexture::addToCreateTexture()
+{
+	if(isForSculptOnly())
+	{
+		//just update some variables, not to create a real GL texture.
+		createGLTexture(mRawDiscardLevel, mRawImage, 0, FALSE) ;
+		mNeedsCreateTexture = FALSE ;
+		destroyRawImage();
+	}
+	else
+	{	
+#if 1
+		//
+		//if mRequestedDiscardLevel > mDesiredDiscardLevel, we assume the required image res keep going up,
+		//so do not scale down the over qualified image.
+		//Note: scaling down image is expensensive. Do it only when very necessary.
+		//
+		if(mRequestedDiscardLevel <= mDesiredDiscardLevel && !keepReuestedDiscardLevel())
+		{
+			S32 w = mFullWidth >> mRawDiscardLevel;
+			S32 h = mFullHeight >> mRawDiscardLevel;
+
+			//if big image, do not load extra data
+			//scale it down to size >= LLViewerTexture::sMinLargeImageSize
+			if(w * h > LLViewerTexture::sMinLargeImageSize)
+			{
+				S32 d_level = llmin(mRequestedDiscardLevel, (S32)mDesiredDiscardLevel) - mRawDiscardLevel ;
+				
+				if(d_level > 0)
+				{
+					S32 i = 0 ;
+					while((d_level > 0) && ((w >> i) * (h >> i) > LLViewerTexture::sMinLargeImageSize))
+					{
+						i++;
+						d_level--;
+					}
+					if(i > 0)
+					{
+						mRawDiscardLevel += i ;
+						if(mRawDiscardLevel >= getDiscardLevel() && getDiscardLevel() > 0)
+						{
+							mNeedsCreateTexture = FALSE ;
+							destroyRawImage();
+							return ;
+						}
+						mRawImage->scale(w >> i, h >> i) ;					
+					}
+				}
+			}
+		}
+#endif
+		mNeedsCreateTexture = TRUE;
+		gTextureList.mCreateTextureList.insert(this);
+	}	
+	return ;
+}
+
 // ONLY called from LLViewerTextureList
 BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 {
@@ -1015,7 +1228,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 	if (!gNoRender)
 	{
 		// store original size only for locally-sourced images
-		if (!mLocalFileName.empty())
+		if (mUrl.compare(0, 7, "file://") == 0)
 		{
 			mOrigWidth = mRawImage->getWidth();
 			mOrigHeight = mRawImage->getHeight();
@@ -1061,7 +1274,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 		
 		if(!(res = insertToAtlas()))
 		{
-			res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename);
+			res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
 			resetFaceAtlas() ;
 		}
 		setActive() ;
@@ -1115,7 +1328,15 @@ void LLViewerFetchedTexture::processTextureStats()
 		return ;
 	}
 
-	if(!mFullWidth || !mFullHeight)
+	updateVirtualSize() ;
+	
+	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+	
+	if (textures_fullres)
+	{
+		mDesiredDiscardLevel = 0;
+	}
+	else if(!mFullWidth || !mFullHeight)
 	{
 		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
 	}
@@ -1147,16 +1368,6 @@ void LLViewerFetchedTexture::processTextureStats()
 	}
 }
 
-//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.
-F32 LLViewerFetchedTexture::calcDecodePriorityForUnknownTexture(F32 pixel_priority)
-{
-	F32 desired = (F32)(log(32.0/pixel_priority) / log_2);
-	S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1;
-	ddiscard = llclamp(ddiscard, 1, 9);
-	
-	return ddiscard*100000.f;
-}
-
 F32 LLViewerFetchedTexture::calcDecodePriority()
 {
 #ifndef LL_RELEASE_FOR_DOWNLOAD
@@ -1175,22 +1386,28 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	{
 		return mDecodePriority; // no change while waiting to create
 	}
-
-	F32 priority;
-	S32 cur_discard = getDiscardLevel();
-	bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel));
-	F32 pixel_priority = fsqrtf(mMaxVirtualSize);
-	const S32 MIN_NOT_VISIBLE_FRAMES = 30; // NOTE: this function is not called every frame
-	mDecodeFrame++;
-	if (pixel_priority > 0.f)
+	if(mForceToSaveRawImage)
 	{
-		mVisibleFrame = mDecodeFrame;
+		return maxDecodePriority() ;
 	}
 	
+	S32 cur_discard = getDiscardLevel();
+	bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel));
+	F32 pixel_priority = fsqrtf(mMaxVirtualSize);
+
+	F32 priority;
 	if (mIsMissingAsset)
 	{
 		priority = 0.0f;
 	}
+	else if(mDesiredDiscardLevel >= cur_discard && cur_discard > -1)
+	{
+		priority = -1.0f ;
+	}
+	else if(mCachedRawDiscardLevel > -1 && mDesiredDiscardLevel >= mCachedRawDiscardLevel)
+	{
+		priority = -1.0f;
+	}
 	else if (mDesiredDiscardLevel > getMaxDiscardLevel())
 	{
 		// Don't decode anything we don't need
@@ -1208,11 +1425,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 			// Always want high boosted images
 			priority = 1.f;
 		}
-		else if (mVisibleFrame == 0 || (mDecodeFrame - mVisibleFrame > MIN_NOT_VISIBLE_FRAMES))
-		{
-			// Don't decode anything that isn't visible unless it's important
-			priority = -2.0f;
-		}
 		else
 		{
 			// Leave the priority as-is
@@ -1221,7 +1433,13 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	}
 	else if (cur_discard < 0)
 	{
-		priority = calcDecodePriorityForUnknownTexture(pixel_priority) ;
+		//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.
+		// priority range = 100,000 - 500,000
+		static const F64 log_2 = log(2.0);
+		F32 desired = (F32)(log(32.0/pixel_priority) / log_2);
+		S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired;
+		ddiscard = llclamp(ddiscard, 0, 4);
+		priority = (ddiscard+1)*100000.f;
 	}
 	else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel))
 	{
@@ -1234,29 +1452,47 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 	}
 	else
 	{
-		// priority range = 100000-400000
-		S32 ddiscard = cur_discard - mDesiredDiscardLevel;
+		// priority range = 100,000 - 500,000
+		S32 desired_discard = mDesiredDiscardLevel;
 		if (getDontDiscard())
 		{
-			ddiscard+=2;
+			desired_discard -= 2;
 		}
-		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0)
+		else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel)
 		{
-			ddiscard-=2;
+			// We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is
+			desired_discard = cur_discard;
 		}
+		else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE)
+		{
+			// We haven't rendered this in a while, de-prioritize it
+			desired_discard += 2;
+		}
+		S32 ddiscard = cur_discard - desired_discard;
 		ddiscard = llclamp(ddiscard, 0, 4);
-		priority = ddiscard*100000.f;
+		priority = (ddiscard+1)*100000.f;
 	}
+
+	// Priority Formula:
+	// BOOST_HIGH  +  ADDITIONAL PRI + DELTA DISCARD + BOOST LEVEL + PIXELS
+	// [10,000,000] + [1-9,000,000]  + [1-400,000]   + [1-20,000]  + [0-999]
 	if (priority > 0.0f)
 	{
-		pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); // priority range = 100000-900000
+		pixel_priority = llclamp(pixel_priority, 0.0f, 999.f); 
+
+		priority = pixel_priority + 1000.f * mBoostLevel;
+
 		if ( mBoostLevel > BOOST_HIGH)
 		{
-			priority = 1000000.f + pixel_priority + 1000.f * mBoostLevel;
+			priority += 10000000.f;
 		}
-		else
+		
+		if(mAdditionalDecodePriority > 0.0f)
 		{
-			priority +=      0.f + pixel_priority + 1000.f * mBoostLevel;
+			// 1-9
+			S32 additional_priority = (S32)(1.0f + mAdditionalDecodePriority*8.0f + .5f); // round
+			// priority range += 0-9,000,000
+			priority += 1000000.f * (F32)additional_priority;
 		}
 	}
 	return priority;
@@ -1269,6 +1505,36 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority)
 	mDecodePriority = priority;
 }
 
+void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority)
+{
+	priority = llclamp(priority, 0.f, 1.f);
+	if(mAdditionalDecodePriority < priority)
+	{
+		mAdditionalDecodePriority = priority;
+	}
+}
+
+void LLViewerFetchedTexture::updateVirtualSize() 
+{	
+	if(mNeedsResetMaxVirtualSize)
+	{
+		addTextureStats(0.f, FALSE) ;//reset
+	}
+	if(mFaceList.size() > 0) 
+	{				
+		for(std::list<LLFace*>::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter)
+		{
+			LLFace* facep = *iter ;
+			if(facep->getDrawable()->isRecentlyVisible())
+			{
+				addTextureStats(facep->getVirtualSize()) ;
+				setAdditionalDecodePriority(facep->getImportanceToCamera()) ;
+			}
+		}	
+	}
+	mNeedsResetMaxVirtualSize = TRUE ;
+}
+
 bool LLViewerFetchedTexture::updateFetch()
 {
 	mFetchState = 0;
@@ -1308,6 +1574,15 @@ bool LLViewerFetchedTexture::updateFetch()
 	{
 		// Sets mRawDiscardLevel, mRawImage, mAuxRawImage
 		S32 fetch_discard = current_discard;
+		
+		if(mForceToSaveRawImage)
+		{
+			if(fetch_discard >= 0)
+			{
+				fetch_discard = llmax(fetch_discard, mSavedRawDiscardLevel) ;
+			}
+		}
+
 		if (mRawImage.notNull()) sRawCount--;
 		if (mAuxRawImage.notNull()) sAuxCount--;
 		bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mRawImage, mAuxRawImage);
@@ -1347,11 +1622,24 @@ bool LLViewerFetchedTexture::updateFetch()
 						(*iter)->dirtyTexture() ;
 					}
 				}			
-				mIsRawImageValid = TRUE;
-				gTextureList.mCreateTextureList.insert(this);
-				mNeedsCreateTexture = TRUE;
 				mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
 				mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
+
+				if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE)
+				{ 
+					//discard all oversized textures.
+					destroyRawImage();
+					setIsMissingAsset();
+					mRawDiscardLevel = INVALID_DISCARD_LEVEL ;
+					mIsFetching = FALSE ;
+				}
+				else
+				{
+					mIsRawImageValid = TRUE;			
+					addToCreateTexture() ;
+				}
+
+				return TRUE ;
 			}
 			else
 			{
@@ -1374,13 +1662,13 @@ bool LLViewerFetchedTexture::updateFetch()
 				}
 				else
 				{
-					llwarns << mID << ": Setting min discard to " << current_discard << llendl;
+					//llwarns << mID << ": Setting min discard to " << current_discard << llendl;
 					mMinDiscardLevel = current_discard;
 					desired_discard = current_discard;
 				}
 				destroyRawImage();
 			}
-			else if (mRawImage.isNull())
+			else if (mRawImage.notNull())
 			{
 				// We have data, but our fetch failed to return raw data
 				// *TODO: FIgure out why this is happening and fix it
@@ -1389,12 +1677,29 @@ bool LLViewerFetchedTexture::updateFetch()
 		}
 		else
 		{
+// 			// Useful debugging code for undesired deprioritization of textures.
+// 			if (decode_priority <= 0.0f && desired_discard >= 0 && desired_discard < current_discard)
+// 			{
+// 				llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl;
+// 				calcDecodePriority();
+// 			}
 			LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority);
 		}
 	}
 
-	bool make_request = true;
-	
+	if (!mDontDiscard)
+	{
+		if (mBoostLevel == 0)
+		{
+			desired_discard = llmax(desired_discard, current_discard-1);
+		}
+		else
+		{
+			desired_discard = llmax(desired_discard, current_discard-2);
+		}
+	}
+
+	bool make_request = true;	
 	if (decode_priority <= 0)
 	{
 		make_request = false;
@@ -1407,6 +1712,10 @@ bool LLViewerFetchedTexture::updateFetch()
 	{
 		make_request = false;
 	}
+	else if (!isJustBound() && mCachedRawImageReady)
+	{
+		make_request = false;
+	}
 	else
 	{
 		if (mIsFetching)
@@ -1434,33 +1743,12 @@ bool LLViewerFetchedTexture::updateFetch()
 			h = mGLTexturep->getHeight(0);
 			c = mComponents;
 		}
-		if (!mDontDiscard)
-		{
-			if (mBoostLevel == 0)
-			{
-				desired_discard = llmax(desired_discard, current_discard-1);
-			}
-			else
-			{
-				desired_discard = llmax(desired_discard, current_discard-2);
-			}
-		}
-
+		
 		// bypass texturefetch directly by pulling from LLTextureCache
 		bool fetch_request_created = false;
-		if (mLocalFileName.empty())
-		{
-			fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(getID(), getTargetHost(), decode_priority,
-											 w, h, c, desired_discard,
-											 needsAux());
-		}
-		else
-		{
-			fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mLocalFileName, getID(),getTargetHost(), decode_priority,
-											 w, h, c, desired_discard,
-											 needsAux());
-		}
-
+		fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority,
+																			  w, h, c, desired_discard, needsAux());
+		
 		if (fetch_request_created)
 		{
 			mHasFetcher = TRUE;
@@ -1490,9 +1778,82 @@ bool LLViewerFetchedTexture::updateFetch()
 	return mIsFetching ? true : false;
 }
 
+//
+//force to fetch a new raw image for this texture
+//
+BOOL LLViewerFetchedTexture::forceFetch()
+{
+	if(!mForceToSaveRawImage)
+	{
+		return false ;
+	}
+	if(mDesiredSavedRawDiscardLevel < getDiscardLevel())
+	{
+		//no need to force fetching. normal fetching flow will do the work.
+		//return false ;
+	}
+	if (mNeedsCreateTexture)
+	{
+		// We may be fetching still (e.g. waiting on write)
+		// but don't check until we've processed the raw data we have
+		//return false;
+	}
+	if(mIsFetching)
+	{
+		return false ;
+	}
+	if (mIsMissingAsset)
+	{
+		mForceToSaveRawImage = false ;
+		llassert_always(!mHasFetcher);
+		return false; // skip
+	}
+	if (!mLoadedCallbackList.empty() && mRawImage.notNull())
+	{
+		return false; // process any raw image data in callbacks before replacing
+	}
+	if(mRawImage.notNull() && mRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
+	{
+		return false ; // mRawImage is enough
+	}
+
+	S32 desired_discard = mDesiredSavedRawDiscardLevel ;
+	S32 current_discard = getDiscardLevel();
+	
+	bool fetch_request_created = false;
+	S32 w=0, h=0, c=0;
+	if (current_discard >= 0)
+	{
+		w = getWidth(0);
+		h = getHeight(0);
+		c = getComponents();
+	}
+	fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), maxDecodePriority(),
+																		  w, h, c, desired_discard, needsAux());
+
+	if (fetch_request_created)
+	{				
+		mHasFetcher = TRUE;
+		mIsFetching = TRUE;
+		mRequestedDiscardLevel = desired_discard ;
+
+		mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
+																	mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
+	}	
+
+	return mIsFetching ? true : false;
+}
+
 void LLViewerFetchedTexture::setIsMissingAsset()
 {
-	llwarns << mLocalFileName << " " << mID << ": Marking image as missing" << llendl;
+	if (mUrl.empty())
+	{
+		llwarns << mID << ": Marking image as missing" << llendl;
+	}
+	else
+	{
+		llwarns << mUrl << ": Marking image as missing" << llendl;
+	}
 	if (mHasFetcher)
 	{
 		LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);
@@ -1514,7 +1875,13 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
 	{
 		// Put in list to call this->doLoadedCallbacks() periodically
 		gTextureList.mCallbackList.insert(this);
+		mLoadedCallbackDesiredDiscardLevel = (S8)discard_level;
+	}
+	else
+	{
+		mLoadedCallbackDesiredDiscardLevel = llmin(mLoadedCallbackDesiredDiscardLevel, (S8)discard_level) ;
 	}
+
 	LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata);
 	mLoadedCallbackList.push_back(entryp);
 	mNeedsAux |= needs_aux;
@@ -1643,7 +2010,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 		// We have GL data.
 
 		destroyRawImage();
-		readBackRawImage(gl_discard);
+		reloadRawImage(mLoadedCallbackDesiredDiscardLevel);
 		llassert_always(mRawImage.notNull());
 		llassert_always(!mNeedsAux || mAuxRawImage.notNull());
 	}
@@ -1752,8 +2119,7 @@ void LLViewerFetchedTexture::forceImmediateUpdate()
 	return ;
 }
 
-// Was in LLImageGL
-LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level)
+LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
 {
 	llassert_always(mGLTexturep.notNull()) ;
 	llassert_always(discard_level >= 0);
@@ -1763,25 +2129,216 @@ LLImageRaw* LLViewerFetchedTexture::readBackRawImage(S8 discard_level)
 		llerrs << "called with existing mRawImage" << llendl;
 		mRawImage = NULL;
 	}
-	mRawImage = new LLImageRaw(mGLTexturep->getWidth(discard_level), mGLTexturep->getHeight(discard_level), mComponents);
-	sRawCount++;
-	mRawDiscardLevel = discard_level;
-	mGLTexturep->readBackRaw(mRawDiscardLevel, mRawImage, false);
-	mIsRawImageValid = TRUE;
+
+	if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level)
+	{
+		mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+		mRawImage->copy(getSavedRawImage()) ;
+		mRawDiscardLevel = discard_level ;
+	}
+	else
+	{		
+		//force to fetch raw image again if cached raw image is not good enough.
+		if(mCachedRawDiscardLevel > discard_level)
+		{
+			mRawImage = mCachedRawImage ;
+			mRawDiscardLevel = mCachedRawDiscardLevel;
+
+			forceToSaveRawImage(discard_level) ;
+		}
+		else //cached raw image is good enough, copy it.
+		{
+			mRawImage = new LLImageRaw(getWidth(discard_level), getHeight(discard_level), getComponents()) ;
+			mRawImage->copy(mCachedRawImage) ;
+			mRawDiscardLevel = discard_level ;
+		}
+	}
+	mIsRawImageValid = TRUE ;
+	sRawCount++;	
 	
 	return mRawImage;
 }
 
 void LLViewerFetchedTexture::destroyRawImage()
-{
-	if (mRawImage.notNull()) sRawCount--;
+{	
 	if (mAuxRawImage.notNull()) sAuxCount--;
+
+	if (mRawImage.notNull()) 
+	{
+		sRawCount--;
+		setCachedRawImage() ;
+
+		if(mForceToSaveRawImage)
+		{
+			saveRawImage() ;
+		}		
+	}
+
 	mRawImage = NULL;
 	mAuxRawImage = NULL;
 	mIsRawImageValid = FALSE;
 	mRawDiscardLevel = INVALID_DISCARD_LEVEL;
+
+	if(mForceToSaveRawImage)
+	{
+		forceFetch() ;
+	}
+}
+
+//use the mCachedRawImage to (re)generate the gl texture.
+//virtual
+void LLViewerFetchedTexture::switchToCachedImage()
+{
+	if(mCachedRawImage.notNull())
+	{
+		mRawImage = mCachedRawImage ;
+						
+		if (getComponents() != mRawImage->getComponents())
+		{
+			// We've changed the number of components, so we need to move any
+			// objects using this pool to a different pool.
+			mComponents = mRawImage->getComponents();
+			mGLTexturep->setComponents(mComponents) ;
+			gTextureList.dirtyImage(this);
+		}			
+
+		mIsRawImageValid = TRUE;
+		mRawDiscardLevel = mCachedRawDiscardLevel ;
+		gTextureList.mCreateTextureList.insert(this);
+		mNeedsCreateTexture = TRUE;		
+	}
+}
+
+void LLViewerFetchedTexture::setCachedRawImage()
+{	
+	if(mRawImage == mCachedRawImage)
+	{
+		return ;
+	}
+	if(!mIsRawImageValid)
+	{
+		return ;
+	}
+
+	if(mCachedRawImageReady)
+	{
+		return ;
+	}
+
+	if(mCachedRawDiscardLevel < 0 || mCachedRawDiscardLevel > mRawDiscardLevel)
+	{
+		S32 i = 0 ;
+		S32 w = mRawImage->getWidth() ;
+		S32 h = mRawImage->getHeight() ;
+
+		S32 max_size = MAX_CACHED_RAW_IMAGE_AREA ;
+		if(LLViewerTexture::BOOST_TERRAIN == mBoostLevel)
+		{
+			max_size = MAX_CACHED_RAW_TERRAIN_IMAGE_AREA ;
+		}		
+		if(mForSculpt)
+		{
+			max_size = MAX_CACHED_RAW_SCULPT_IMAGE_AREA ;
+			mCachedRawImageReady = !mRawDiscardLevel ;
+		}
+		else
+		{
+			mCachedRawImageReady = (!mRawDiscardLevel || ((w * h) >= max_size)) ;
+		}
+
+		while(((w >> i) * (h >> i)) > max_size)
+		{
+			++i ;
+		}
+		
+		if(i)
+		{
+			if(!(w >> i) || !(h >> i))
+			{
+				--i ;
+			}
+			//if(mForSculpt)
+			//{
+			//	mRawImage->scaleDownWithoutBlending(w >> i, h >> i) ;
+			//}
+			//else
+			{
+				mRawImage->scale(w >> i, h >> i) ;
+			}
+		}
+		mCachedRawImage = mRawImage ;
+		mCachedRawDiscardLevel = mRawDiscardLevel + i ;			
+	}
+}
+
+void LLViewerFetchedTexture::checkCachedRawSculptImage()
+{
+	if(mCachedRawImageReady && mCachedRawDiscardLevel > 0)
+	{
+		if(getDiscardLevel() != 0)
+		{
+			mCachedRawImageReady = FALSE ;
+		}
+		else if(isForSculptOnly())
+		{
+			resetTextureStats() ; //do not update this image any more.
+		}
+	}
+}
+
+void LLViewerFetchedTexture::saveRawImage() 
+{
+	if(mRawImage.isNull() || mSavedRawDiscardLevel == mRawDiscardLevel)
+	{
+		return ;
+	}
+
+	mSavedRawDiscardLevel = mRawDiscardLevel ;
+	mSavedRawImage = new LLImageRaw(mRawImage->getData(), mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents()) ;
+
+	if(mSavedRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
+	{
+		mForceToSaveRawImage = FALSE ;
+	}
+
+	mLastReferencedSavedRawImageTime = sCurrentTime ;
 }
 
+void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard) 
+{ 
+	if(!mForceToSaveRawImage && (mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard))
+	{
+		mForceToSaveRawImage = TRUE ;
+		mDesiredSavedRawDiscardLevel = desired_discard ;
+	
+		forceFetch() ;
+	}
+}
+void LLViewerFetchedTexture::destroySavedRawImage()
+{
+	mSavedRawImage = NULL ;
+	mForceToSaveRawImage  = FALSE ;
+	mSavedRawDiscardLevel = -1 ;
+	mDesiredSavedRawDiscardLevel = -1 ;
+	mLastReferencedSavedRawImageTime = 0.0f ;
+}
+
+LLImageRaw* LLViewerFetchedTexture::getSavedRawImage() 
+{
+	mLastReferencedSavedRawImageTime = sCurrentTime ;
+
+	return mSavedRawImage ;
+}
+	
+BOOL LLViewerFetchedTexture::hasSavedRawImage() const
+{
+	return mSavedRawImage.notNull() ;
+}
+	
+F32 LLViewerFetchedTexture::getElapsedLastReferencedSavedRawImageTime() const
+{ 
+	return mLastReferencedSavedRawImageTime - sCurrentTime ;
+}
 //----------------------------------------------------------------------------------------------
 //atlasing
 //----------------------------------------------------------------------------------------------
@@ -1979,14 +2536,14 @@ BOOL LLViewerFetchedTexture::insertToAtlas()
 //----------------------------------------------------------------------------------------------
 //start of LLViewerLODTexture
 //----------------------------------------------------------------------------------------------
-LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps)
-	: LLViewerFetchedTexture(id, usemipmaps)
+LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
+	: LLViewerFetchedTexture(id, host, usemipmaps)
 {
 	init(TRUE) ;
 }
 
-LLViewerLODTexture::LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps)
-	: LLViewerFetchedTexture(full_path, id, usemipmaps)
+LLViewerLODTexture::LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
+	: LLViewerFetchedTexture(url, id, usemipmaps)
 {
 	init(TRUE) ;
 }
@@ -2004,12 +2561,25 @@ S8 LLViewerLODTexture::getType() const
 	return LLViewerTexture::LOD_TEXTURE ;
 }
 
+BOOL LLViewerLODTexture::isUpdateFrozen()
+{
+	return LLViewerTexture::sFreezeImageScalingDown && !getDiscardLevel() ;
+}
+
 // This is gauranteed to get called periodically for every texture
 //virtual
 void LLViewerLODTexture::processTextureStats()
 {
+	updateVirtualSize() ;
+
+	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+	
+	if (textures_fullres)
+	{
+		mDesiredDiscardLevel = 0;
+	}
 	// Generate the request priority and render priority
-	if (mDontDiscard || !mUseMipMaps)
+	else if (mDontDiscard || !mUseMipMaps)
 	{
 		mDesiredDiscardLevel = 0;
 		if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
@@ -2038,13 +2608,7 @@ void LLViewerLODTexture::processTextureStats()
 		// If we know the output width and height, we can force the discard
 		// level to the correct value, and thus not decode more texture
 		// data than we need to.
-		/*if (mBoostLevel == LLViewerTexture::BOOST_UI ||
-			mBoostLevel == LLViewerTexture::BOOST_PREVIEW ||
-			mBoostLevel == LLViewerTexture::BOOST_AVATAR_SELF)	// what about AVATAR_BAKED_SELF?
-		{
-			discard_level = 0; // full res
-		}
-		else*/ if (mKnownDrawWidth && mKnownDrawHeight)
+		if (mKnownDrawWidth && mKnownDrawHeight)
 		{
 			S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight;
 
@@ -2055,6 +2619,12 @@ void LLViewerLODTexture::processTextureStats()
 		}
 		else
 		{
+			if(isLargeImage() && !isJustBound() && mAdditionalDecodePriority < 1.0f)
+			{
+				//if is a big image and not being used recently, nor close to the view point, do not load hi-res data.
+				mMaxVirtualSize = llmin(mMaxVirtualSize, (F32)LLViewerTexture::sMinLargeImageSize) ;
+			}
+
 			if ((mCalculatedDiscardLevel >= 0.f) &&
 				(llabs(mMaxVirtualSize - mDiscardVirtualSize) < mMaxVirtualSize*.20f))
 			{
@@ -2071,13 +2641,11 @@ void LLViewerLODTexture::processTextureStats()
 		}
 		if (mBoostLevel < LLViewerTexture::BOOST_HIGH)
 		{
-			static const F32 discard_bias = -.5f; // Must be < 1 or highest discard will never load!
-			discard_level += discard_bias;
 			discard_level += sDesiredDiscardBias;
 			discard_level *= sDesiredDiscardScale; // scale
+			discard_level += sCameraMovingDiscardBias ;
 		}
 		discard_level = floorf(discard_level);
-// 		discard_level -= (gTextureList.mVideoMemorySetting>>1); // more video ram = higher detail
 
 		F32 min_discard = 0.f;
 		if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
@@ -2096,46 +2664,39 @@ void LLViewerLODTexture::processTextureStats()
 		// proper action if we don't.
 		//
 
-		BOOL increase_discard = FALSE;
 		S32 current_discard = getDiscardLevel();
 		if ((sDesiredDiscardBias > 0.0f) &&
 			(current_discard >= 0 && mDesiredDiscardLevel >= current_discard))
 		{
-			if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale)			
+			// Limit the amount of GL memory bound each frame
+			if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
+				(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
 			{
-				// Limit the amount of GL memory bound each frame
-				if (mDesiredDiscardLevel > current_discard)
-				{
-					increase_discard = TRUE;
-				}
+				scaleDown() ;
 			}
-			if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale)			
+			// Only allow GL to have 2x the video card memory
+			else if ( BYTES_TO_MEGA_BYTES(sTotalTextureMemoryInBytes) > sMaxTotalTextureMemInMegaBytes*texmem_middle_bound_scale &&
+				(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
 			{
-				// Only allow GL to have 2x the video card memory
-				if (!mGLTexturep->getBoundRecently())
-				{
-					increase_discard = TRUE;
-				}
-			}
-			if (increase_discard)
-			{
-				// 			llinfos << "DISCARDED: " << mID << " Discard: " << current_discard << llendl;
-				sBoundTextureMemoryInBytes -= mGLTexturep->mTextureMemory;
-				sTotalTextureMemoryInBytes -= mGLTexturep->mTextureMemory;
-				// Increase the discard level (reduce the texture res)
-				S32 new_discard = current_discard+1;
-				mGLTexturep->setDiscardLevel(new_discard);
-				sBoundTextureMemoryInBytes += mGLTexturep->mTextureMemory;
-				sTotalTextureMemoryInBytes += mGLTexturep->mTextureMemory;
-				if(LLViewerTextureManager::sTesterp)
-				{
-					LLViewerTextureManager::sTesterp->setStablizingTime() ;
-				}
+				scaleDown() ;
+				
 			}
 		}
 	}
 }
 
+void LLViewerLODTexture::scaleDown()
+{
+	if(hasGLTexture() && mCachedRawDiscardLevel > getDiscardLevel())
+	{		
+		switchToCachedImage() ;	
+
+		if(LLViewerTextureManager::sTesterp)
+		{
+			LLViewerTextureManager::sTesterp->setStablizingTime() ;
+		}
+	}
+}
 //----------------------------------------------------------------------------------------------
 //end of LLViewerLODTexture
 //----------------------------------------------------------------------------------------------
@@ -2224,6 +2785,8 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL
 
 	setMediaImpl() ;
 
+	setCategory(LLViewerTexture::MEDIA) ;
+	
 	LLViewerTexture* tex = gTextureList.findImage(mID) ;
 	if(tex) //this media is a parcel media for tex.
 	{
@@ -2768,7 +3331,7 @@ void LLTexturePipelineTester::updateTextureLoadingStats(const LLViewerFetchedTex
 		mTotalBytesLoadedForLargeImage += data_size ;
 	}
 
-	if(imagep->isForSculpt())
+	if(imagep->forSculpt())
 	{
 		mTotalBytesLoadedForSculpties += data_size ;
 
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 020478beef2c6026ebebe3a9d694df1ff1236f82..bde87d1dd5726d7105a15669bc2ce634a8743723 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -107,11 +107,12 @@ class LLViewerTexture : public LLTexture
 
 	enum EBoostLevel
 	{
-		BOOST_NONE 			= 0,
-		BOOST_AVATAR_BAKED	= 1,
-		BOOST_AVATAR		= 2,
-		BOOST_CLOUDS		= 3,
-		BOOST_SCULPTED      = 4,
+		//skip 0 and 1 to avoid mistakenly mixing boost level with boolean numbers.
+		BOOST_NONE 			= 2,
+		BOOST_AVATAR_BAKED	= 3,
+		BOOST_AVATAR		= 4,
+		BOOST_CLOUDS		= 5,
+		BOOST_SCULPTED      = 6,
 		
 		BOOST_HIGH 			= 10,
 		BOOST_TERRAIN		= 11, // has to be high priority for minimap / low detail
@@ -122,10 +123,23 @@ class LLViewerTexture : public LLTexture
 		BOOST_UI			= 16,
 		BOOST_PREVIEW		= 17,
 		BOOST_MAP			= 18,
-		BOOST_AVATAR_SELF	= 19, // needed for baking avatar
-		BOOST_MAX_LEVEL
+		BOOST_MAP_VISIBLE	= 19,
+		BOOST_AVATAR_SELF	= 20, // needed for baking avatar
+		BOOST_MAX_LEVEL,
+
+		//other texture Categories
+		LOCAL = BOOST_MAX_LEVEL,
+		AVATAR_SCRATCH_TEX,
+		DYNAMIC_TEX,
+		MEDIA,
+		ATLAS,
+		OTHER,
+		MAX_GL_IMAGE_CATEGORY
 	};
-	
+	static S32 getTotalNumOfCategories() ;
+	static S32 getIndexFromCategory(S32 category) ;
+	static S32 getCategoryFromIndex(S32 index) ;
+
 	typedef std::list<LLFace*> ll_face_list_t ;
 
 protected:
@@ -146,7 +160,7 @@ class LLViewerTexture : public LLTexture
 	virtual BOOL isMissingAsset()const ;
 	virtual void dump();	// debug info to llinfos
 	
-	/*virtual*/ bool bindDefaultImage(const S32 stage = 0) const ;
+	/*virtual*/ bool bindDefaultImage(const S32 stage = 0) ;
 	/*virtual*/ void forceImmediateUpdate() ;
 	
 	const LLUUID& getID() const { return mID; }
@@ -154,9 +168,9 @@ class LLViewerTexture : public LLTexture
 	void setBoostLevel(S32 level);
 	S32  getBoostLevel() { return mBoostLevel; }
 
-	//maxVirtualSize of the texture
-	void addTextureStats(F32 virtual_size) const ;
-	void resetTextureStats(BOOL zero = FALSE);
+	void addTextureStats(F32 virtual_size, BOOL needs_gltexture = TRUE) const;
+	void resetTextureStats();	
+
 	virtual F32  getMaxVirtualSize() ;
 
 	LLFrameTimer* getLastReferencedTimer() {return &mLastReferencedTimer ;}
@@ -181,7 +195,7 @@ class LLViewerTexture : public LLTexture
 	BOOL       hasGLTexture() const ;
 	LLGLuint   getTexName() const ;		
 	BOOL       createGLTexture() ;
-	BOOL       createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0);
+	BOOL       createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0, BOOL to_create = TRUE, S32 category = LLViewerTexture::OTHER);
 
 	void       setFilteringOption(LLTexUnit::eTextureFilterOptions option);
 	void       setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE);
@@ -189,7 +203,8 @@ class LLViewerTexture : public LLTexture
 	BOOL       setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height);
 	BOOL       setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height);
 	void       setGLTextureCreated (bool initialized);
-	
+	void       setCategory(S32 category) ;
+
 	LLTexUnit::eTextureAddressMode getAddressMode(void) const ;
 	S32        getMaxDiscardLevel() const;
 	S32        getDiscardLevel() const;
@@ -202,8 +217,8 @@ class LLViewerTexture : public LLTexture
 	BOOL       getMask(const LLVector2 &tc);
 	F32        getTimePassedSinceLastBound();
 	BOOL       getMissed() const ;
-	BOOL       isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ;
-	BOOL       readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const;
+	BOOL       isJustBound()const ;
+	void       forceUpdateBindStats(void) const;
 
 	U32        getTexelsInAtlas() const ;
 	U32        getTexelsInGLTexture() const ;
@@ -221,6 +236,8 @@ class LLViewerTexture : public LLTexture
 	BOOL getDontDiscard() const { return mDontDiscard; }
 	//-----------------	
 	
+	BOOL isLargeImage() ;	
+	
 	void setParcelMedia(LLViewerMediaTexture* media) {mParcelMedia = media;}
 	BOOL hasParcelMedia() const { return mParcelMedia != NULL;}
 	LLViewerMediaTexture* getParcelMedia() const { return mParcelMedia;}
@@ -233,6 +250,7 @@ class LLViewerTexture : public LLTexture
 private:
 	//note: do not make this function public.
 	/*virtual*/ LLImageGL* getGLTexture() const ;
+	virtual void switchToCachedImage();
 
 protected:
 	LLUUID mID;
@@ -242,7 +260,9 @@ class LLViewerTexture : public LLTexture
 	BOOL  mUseMipMaps ;
 	S8  mComponents;
 	mutable F32 mMaxVirtualSize;	// The largest virtual size of the image, in pixels - how much data to we need?
+	mutable S8  mNeedsGLTexture;
 	mutable BOOL mNeedsResetMaxVirtualSize ;
+	mutable F32 mAdditionalDecodePriority;  // priority add to mDecodePriority.
 	LLFrameTimer mLastReferencedTimer;
 
 	ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture
@@ -278,7 +298,12 @@ class LLViewerTexture : public LLTexture
 	static S32 sMaxBoundTextureMemInMegaBytes;
 	static S32 sMaxTotalTextureMemInMegaBytes;
 	static S32 sMaxDesiredTextureMemInBytes ;
-	static BOOL sDontLoadVolumeTextures;
+	static S8  sCameraMovingDiscardBias;
+	static S32 sMaxSculptRez ;
+	static S32 sMinLargeImageSize ;
+	static S32 sMaxSmallImageSize ;
+	static BOOL sFreezeImageScalingDown ;//do not scale down image res if set.
+	static F32  sCurrentTime ;
 	static BOOL sUseTextureAtlas ;
 
 	static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects.
@@ -298,9 +323,9 @@ class LLViewerFetchedTexture : public LLViewerTexture
 protected:
 	/*virtual*/ ~LLViewerFetchedTexture();
 public:
-	LLViewerFetchedTexture(const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerFetchedTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
 	LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemipmaps);
-	LLViewerFetchedTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
 
 public:
 	static F32 maxDecodePriority();
@@ -336,6 +361,8 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	bool hasCallbacks() { return mLoadedCallbackList.empty() ? false : true; }	
 	bool doLoadedCallbacks();
 
+	void addToCreateTexture();
+
 	 // ONLY call from LLViewerTextureList
 	BOOL createTexture(S32 usename = 0);
 	void destroyTexture() ;	
@@ -354,7 +381,11 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	// the priority list, and cause horrible things to happen.
 	void setDecodePriority(F32 priority = -1.0f);
 	F32 getDecodePriority() const { return mDecodePriority; };
+
+	void setAdditionalDecodePriority(F32 priority) ;
 	
+	void updateVirtualSize() ;
+
 	// setDesiredDiscardLevel is only used by LLViewerTextureList
 	void setDesiredDiscardLevel(S32 discard) { mDesiredDiscardLevel = discard; }
 	S32  getDesiredDiscardLevel()			 { return mDesiredDiscardLevel; }
@@ -378,15 +409,15 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	BOOL isInImageList() const {return mInImageList ;}
 	void setInImageList(BOOL flag) {mInImageList = flag ;}
 
-	const std::string& getLocalFileName() const {return mLocalFileName ;}
 	LLFrameTimer* getLastPacketTimer() {return &mLastPacketTimer;}
 
 	U32 getFetchPriority() const { return mFetchPriority ;}
 	F32 getDownloadProgress() const {return mDownloadProgress ;}
 
-	LLImageRaw* readBackRawImage(S8 discard_level) ;
+	LLImageRaw* reloadRawImage(S8 discard_level) ;
 	void destroyRawImage();
 
+	const std::string& getUrl() const {return mUrl;}
 	//---------------
 	BOOL isDeleted() ;
 	BOOL isInactive() ;
@@ -397,13 +428,35 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	//---------------
 
 	void setForSculpt();
-	BOOL isForSculpt() const {return mForSculpt;}
+	BOOL forSculpt() const {return mForSculpt;}
+	BOOL isForSculptOnly() const;
+
+	//raw image management	
+	void        checkCachedRawSculptImage() ;
+	LLImageRaw* getRawImage()const { return mRawImage ;}
+	S32         getRawImageLevel() const {return mRawDiscardLevel;}
+	LLImageRaw* getCachedRawImage() const { return mCachedRawImage ;}
+	S32         getCachedRawImageLevel() const {return mCachedRawDiscardLevel;}
+	BOOL        isCachedRawImageReady() const {return mCachedRawImageReady ;}
+	BOOL        isRawImageValid()const { return mIsRawImageValid ; }	
+	void        forceToSaveRawImage(S32 desired_discard = 0) ;
+	void        destroySavedRawImage() ;
+	LLImageRaw* getSavedRawImage() ;
+	BOOL        hasSavedRawImage() const ;
+	F32         getElapsedLastReferencedSavedRawImageTime() const ;
+	BOOL		isFullyLoaded() const;
+
+protected:
+	/*virtual*/ void switchToCachedImage();
 
 private:
 	void init(bool firstinit) ;
 	void cleanup() ;
 
-	F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ;
+	void saveRawImage() ;
+	BOOL forceFetch() ;
+	void setCachedRawImage() ;
+	BOOL keepReuestedDiscardLevel();
 
 	//for atlas
 	void resetFaceAtlas() ;
@@ -424,11 +477,8 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S32 mKnownDrawWidth;
 	S32	mKnownDrawHeight;
 	BOOL mKnownDrawSizeChanged ;
-
-	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	
-	S8  mMinDesiredDiscardLevel;	// The minimum discard level we'd like to have
-	S32	mMinDiscardLevel;
-
+	std::string mUrl;
+	
 	S32 mRequestedDiscardLevel;
 	F32 mRequestedDownloadPriority;
 	S32 mFetchState;
@@ -436,8 +486,10 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	F32 mDownloadProgress;
 	F32 mFetchDeltaTime;
 	F32 mRequestDeltaTime;
-	S32 mDecodeFrame;
-	S32 mVisibleFrame; // decode frame where image was last visible
+	F32 mDecodePriority;			// The priority for decoding this image.
+	S32	mMinDiscardLevel;
+	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	
+	S8  mMinDesiredDiscardLevel;	// The minimum discard level we'd like to have
 
 	S8  mNeedsAux;					// We need to decode the auxiliary channels
 	S8  mDecodingAux;				// Are we decoding high components
@@ -445,10 +497,10 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S8  mHasFetcher;				// We've made a fecth request
 	S8  mIsFetching;				// Fetch request is active
 	
-	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.	
+	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.		
 
-	F32 mDecodePriority;			// The priority for decoding this image.
 	typedef std::list<LLLoadedCallbackEntry*> callback_list_t;
+	S8              mLoadedCallbackDesiredDiscardLevel;
 	callback_list_t mLoadedCallbackList;
 
 	LLPointer<LLImageRaw> mRawImage;
@@ -458,6 +510,19 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	// doing if you use it for anything else! - djs
 	LLPointer<LLImageRaw> mAuxRawImage;
 
+	//keep a copy of mRawImage for some special purposes
+	//when mForceToSaveRawImage is set.
+	BOOL mForceToSaveRawImage ;
+	LLPointer<LLImageRaw> mSavedRawImage;
+	S32 mSavedRawDiscardLevel;
+	S32 mDesiredSavedRawDiscardLevel;
+	F32 mLastReferencedSavedRawImageTime ;
+
+	//a small version of the copy of the raw image (<= 64 * 64)
+	LLPointer<LLImageRaw> mCachedRawImage;
+	S32 mCachedRawDiscardLevel;
+	BOOL mCachedRawImageReady; //the rez of the mCachedRawImage reaches the upper limit.	
+
 	LLHost mTargetHost;	// if LLHost::invalid, just request from agent's simulator
 
 	// Timers
@@ -486,15 +551,17 @@ class LLViewerLODTexture : public LLViewerFetchedTexture
 	/*virtual*/ ~LLViewerLODTexture(){}
 
 public:
-	LLViewerLODTexture(const LLUUID& id, BOOL usemipmaps = TRUE);
-	LLViewerLODTexture(const std::string& full_path, const LLUUID& id, BOOL usemipmaps = TRUE);
+	LLViewerLODTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
+	LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
 
 	/*virtual*/ S8 getType() const;
 	// Process image stats to determine priority/quality requirements.
 	/*virtual*/ void processTextureStats();
-	
+	BOOL isUpdateFrozen() ;
+
 private:
 	void init(bool firstinit) ;
+	void scaleDown() ;		
 
 private:
 	
@@ -601,7 +668,7 @@ class LLViewerTextureManager
 
 	static LLViewerFetchedTexture* getFetchedTexture(const LLUUID &image_id,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -610,7 +677,16 @@ class LLViewerTextureManager
 	
 	static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,
+									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
+									 LLGLint internal_format = 0,
+									 LLGLenum primary_format = 0,
+									 const LLUUID& force_id = LLUUID::null
+									 );
+
+	static LLViewerFetchedTexture* getFetchedTextureFromUrl(const std::string& url,									 
+									 BOOL usemipmap = TRUE,
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index b5986c70f589069618e7adede346fcaf5aeba637..081b7cc4831e0676803a8d2a0a04b80faf41dd5b 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -44,6 +44,7 @@
 #include "llimagetga.h"
 #include "llimagejpeg.h"
 #include "llimagepng.h"
+#include "llimageworker.h"
 
 #include "llsdserialize.h"
 #include "llsys.h"
@@ -68,10 +69,15 @@
 
 void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL;
 
-const S32 IMAGES_PER_REQUEST = 42;
-const S32 IMAGES_MIN_UPDATES = 4;  // Always update the highest N images each frame
-const S32 IMAGES_MAX_PACKET_UPDATES = 1; // Only send N packets of IMAGES_PER_REQUEST in a frame
-const F32 RESEND_IMAGE_REQUEST_TIME = 15.f; // seconds
+U32 LLViewerTextureList::sTextureBits = 0;
+U32 LLViewerTextureList::sTexturePackets = 0;
+S32 LLViewerTextureList::sNumImages = 0;
+LLStat LLViewerTextureList::sNumImagesStat(32, TRUE);
+LLStat LLViewerTextureList::sNumRawImagesStat(32, TRUE);
+LLStat LLViewerTextureList::sGLTexMemStat(32, TRUE);
+LLStat LLViewerTextureList::sGLBoundMemStat(32, TRUE);
+LLStat LLViewerTextureList::sRawMemStat(32, TRUE);
+LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE);
 
 LLViewerTextureList gTextureList;
 static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images");
@@ -88,7 +94,7 @@ LLViewerTextureList::LLViewerTextureList()
 
 void LLViewerTextureList::init()
 {
-	mNumImages = 0;
+	sNumImages = 0;
 	mMaxResidentTexMemInMegaBytes = 0;
 	mMaxTotalTextureMemInMegaBytes = 0 ;
 	if (gNoRender)
@@ -197,7 +203,7 @@ void LLViewerTextureList::doPrefetchImages()
 
 		if(LLViewerTexture::FETCHED_TEXTURE == texture_type || LLViewerTexture::LOD_TEXTURE == texture_type)
 		{
-			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, FALSE, texture_type);
+			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, texture_type);
 			if (image)
 			{
 				image->addTextureStats((F32)pixel_area);
@@ -231,6 +237,10 @@ void LLViewerTextureList::shutdown()
 		{
 			continue; // avoid UI, baked, and other special images
 		}
+		if(!image->getBoundRecently())
+		{
+			continue ;
+		}
 		S32 desired = image->getDesiredDiscardLevel();
 		if (desired >= 0 && desired < MAX_DISCARD_LEVEL)
 		{
@@ -321,18 +331,31 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
-	if (gNoRender)
-	{
-		// Never mind that this ignores image_set_id;
-		// getImage() will handle that later.
-		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
-	}
-
 	std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename);
 	if (full_path.empty())
 	{
 		llwarns << "Failed to find local image file: " << filename << llendl;
-		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE);
+		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
+	}
+
+	std::string url = "file://" + full_path;
+
+	return getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id);
+}
+
+LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string& url,
+												   BOOL usemipmaps,
+												   S32 boost_priority,
+												   S8 texture_type,
+												   LLGLint internal_format,
+												   LLGLenum primary_format, 
+												   const LLUUID& force_id)
+{
+	if (gNoRender)
+	{
+		// Never mind that this ignores image_set_id;
+		// getImage() will handle that later.
+		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
 	}
 
 	// generate UUID based on hash of filename
@@ -343,7 +366,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 	}
 	else
 	{
-		new_id.generate(full_path);
+		new_id.generate(url);
 	}
 
 	LLPointer<LLViewerFetchedTexture> imagep = findImage(new_id);
@@ -353,10 +376,10 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
 		switch(texture_type)
 		{
 		case LLViewerTexture::FETCHED_TEXTURE:
-			imagep = new LLViewerFetchedTexture(full_path, new_id, usemipmaps);
+			imagep = new LLViewerFetchedTexture(url, new_id, usemipmaps);
 			break ;
 		case LLViewerTexture::LOD_TEXTURE:
-			imagep = new LLViewerLODTexture(full_path, new_id, usemipmaps);
+			imagep = new LLViewerLODTexture(url, new_id, usemipmaps);
 			break ;
 		default:
 			llerrs << "Invalid texture type " << texture_type << llendl ;
@@ -400,7 +423,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 	
 	if ((&image_id == NULL) || image_id.isNull())
 	{
-		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE));
+		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI));
 	}
 	
 	LLPointer<LLViewerFetchedTexture> imagep = findImage(image_id);
@@ -428,18 +451,15 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
 	switch(texture_type)
 	{
 	case LLViewerTexture::FETCHED_TEXTURE:
-		imagep = new LLViewerFetchedTexture(image_id, usemipmaps);
+		imagep = new LLViewerFetchedTexture(image_id, request_from_host, usemipmaps);
 		break ;
 	case LLViewerTexture::LOD_TEXTURE:
-		imagep = new LLViewerLODTexture(image_id, usemipmaps);
+		imagep = new LLViewerLODTexture(image_id, request_from_host, usemipmaps);
 		break ;
 	default:
 		llerrs << "Invalid texture type " << texture_type << llendl ;
 	}
 	
-	// Might want to request from host other than where the agent is. JC
-	imagep->setTargetHost(request_from_host);
-	
 	if (internal_format && primary_format)
 	{
 		imagep->setExplicitFormat(internal_format, primary_format);
@@ -517,7 +537,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
 	{
 		llwarns << "Image with ID " << image_id << " already in list" << llendl;
 	}
-	mNumImages++;
+	sNumImages++;
 	
 	addImageToList(new_image);
 	mUUIDMap[image_id] = new_image;
@@ -534,7 +554,7 @@ void LLViewerTextureList::deleteImage(LLViewerFetchedTexture *image)
 		}
 
 		llverify(mUUIDMap.erase(image->getID()) == 1);
-		mNumImages--;
+		sNumImages--;
 		removeImageFromList(image);
 	}
 }
@@ -554,7 +574,9 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_MARK_DIRTY("Dirty Images");
 
 void LLViewerTextureList::updateImages(F32 max_time)
 {
-	LLViewerStats::getInstance()->mNumImagesStat.addValue(mNumImages);
+	LLAppViewer::getTextureFetch()->setTextureBandwidth(LLViewerStats::getInstance()->mTextureKBitStat.getMeanPerSec());
+
+	LLViewerStats::getInstance()->mNumImagesStat.addValue(sNumImages);
 	LLViewerStats::getInstance()->mNumRawImagesStat.addValue(LLImageRaw::sRawImageCount);
 	LLViewerStats::getInstance()->mGLTexMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sGlobalTextureMemoryInBytes));
 	LLViewerStats::getInstance()->mGLBoundMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageGL::sBoundTextureMemoryInBytes));
@@ -562,10 +584,13 @@ void LLViewerTextureList::updateImages(F32 max_time)
 	LLViewerStats::getInstance()->mFormattedMemStat.addValue((F32)BYTES_TO_MEGA_BYTES(LLImageFormatted::sGlobalFormattedMemory));
 	
 	updateImagesDecodePriorities();
+
+	F32 total_max_time = max_time;
 	max_time -= updateImagesFetchTextures(max_time);
-	max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f);
+	
+	max_time = llmax(max_time, total_max_time*.25f); // at least 25% of max_time
 	max_time -= updateImagesCreateTextures(max_time);
-	max_time = llmin(llmax(max_time, 0.001f*10.f*gFrameIntervalSeconds), 0.001f);
+	
 	if (!mDirtyTextureList.empty())
 	{
 		LLFastTimer t(FTM_IMAGE_MARK_DIRTY);
@@ -578,7 +603,7 @@ void LLViewerTextureList::updateImages(F32 max_time)
 	{
 		//trigger loaded callbacks on local textures immediately
 		LLViewerFetchedTexture* image = *iter++;
-		if (!image->getLocalFileName().empty())
+		if (!image->getUrl().empty())
 		{
 			// Do stuff to handle callbacks, update priorities, etc.
 			didone = image->doLoadedCallbacks();
@@ -636,6 +661,14 @@ void LLViewerTextureList::updateImagesDecodePriorities()
 			}
 			else
 			{
+				if(imagep->hasSavedRawImage())
+				{
+					if(imagep->getElapsedLastReferencedSavedRawImageTime() > MAX_INACTIVE_TIME)
+					{
+						imagep->destroySavedRawImage() ;
+					}
+				}
+
 				if(imagep->isDeleted())
 				{
 					continue ;
@@ -766,74 +799,76 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
 	const size_t max_update_count = llmin((S32) (1024*10.f*gFrameIntervalSeconds)+1, 256);
 	
 	// 32 high priority entries
-	std::set<LLViewerFetchedTexture*> entries;
+	typedef std::vector<LLViewerFetchedTexture*> entries_list_t;
+	entries_list_t entries;
 	size_t update_counter = llmin(max_priority_count, mImageList.size());
 	image_priority_list_t::iterator iter1 = mImageList.begin();
 	while(update_counter > 0)
 	{
-		// added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad
-		if(iter1 == mImageList.end())
-		{
-			llerrs << "DEV-12002: update_counter not calculated correctly!" << llendl;
-			return 0.f;
-		}
-
-		LLPointer<LLViewerFetchedTexture> const & ptr = *iter1;
-
-		LLViewerFetchedTexture * img = ptr.get();
-
-		// added extra granularity and verbosity for crash logging during 1.19.1 RC. -Brad
-		if(img == NULL)
-		{
-			llwarns << "DEV-12002: image is NULL!" << llendl;
-		}
-
-		entries.insert(img);
-
+		entries.push_back(*iter1);
+		
 		++iter1;
 		update_counter--;
 	}
 	
 	// 256 cycled entries
-	update_counter = llmin(max_update_count, mUUIDMap.size());
-	uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID);
-	while(update_counter > 0)
+	update_counter = llmin(max_update_count, mUUIDMap.size());	
+	if(update_counter > 0)
 	{
-		if (iter2 == mUUIDMap.end())
+		uuid_map_t::iterator iter2 = mUUIDMap.upper_bound(mLastFetchUUID);
+		uuid_map_t::iterator iter2p = iter2;
+		while(update_counter > 0)
 		{
-			iter2 = mUUIDMap.begin();
+			if (iter2 == mUUIDMap.end())
+			{
+				iter2 = mUUIDMap.begin();
+			}
+			entries.push_back(iter2->second);
+			iter2p = iter2++;
+			update_counter--;
 		}
-		mLastFetchUUID = iter2->first;
-		entries.insert(iter2->second);
-		++iter2;
-		update_counter--;
+
+		mLastFetchUUID = iter2p->first;
 	}
 	
+	S32 fetch_count = 0;
 	S32 min_count = max_priority_count + max_update_count/4;
-	for (std::set<LLViewerFetchedTexture*>::iterator iter3 = entries.begin();
+	for (entries_list_t::iterator iter3 = entries.begin();
 		 iter3 != entries.end(); )
 	{
 		LLPointer<LLViewerFetchedTexture> imagep = *iter3++;
 		
-		imagep->updateFetch();
+		bool fetching = imagep->updateFetch();
+		if (fetching)
+		{
+			fetch_count++;
+		}
 		if (min_count <= 0 && image_op_timer.getElapsedTimeF32() > max_time)
 		{
 			break;
 		}
 		min_count--;
 	}
+	if (fetch_count == 0)
+	{
+		gDebugTimers[0].pause();
+	}
+	else
+	{
+		gDebugTimers[0].unpause();
+	}
 	return image_op_timer.getElapsedTimeF32();
 }
 
 void LLViewerTextureList::updateImagesUpdateStats()
 {
-	if (mUpdateStats)
+	if (mUpdateStats && mForceResetTextureStats)
 	{
 		for (image_priority_list_t::iterator iter = mImageList.begin();
 			 iter != mImageList.end(); )
 		{
 			LLViewerFetchedTexture* imagep = *iter++;
-			imagep->resetTextureStats(mForceResetTextureStats);
+			imagep->resetTextureStats();
 		}
 		mUpdateStats = FALSE;
 		mForceResetTextureStats = FALSE;
@@ -1019,6 +1054,9 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage
 	return compressedImage;
 }
 
+const S32 MIN_VIDEO_RAM = 32;
+const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons.
+
 // Returns min setting for TextureMemory (in MB)
 S32 LLViewerTextureList::getMinVideoRamSetting()
 {
@@ -1137,13 +1175,13 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 	
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
 	}
 	else
 	{
-		gTextureList.mTextureBits += msg->getReceiveSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
 	}
-	gTextureList.mTexturePackets++;
+	gTextureList.sTexturePackets++;
 	
 	U8 codec;
 	U16 packets;
@@ -1171,7 +1209,7 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 	U8 *data = new U8[data_size];
 	msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
 	
-	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	if (!image)
 	{
 		delete [] data;
@@ -1202,13 +1240,13 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 	
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.mTextureBits += msg->getReceiveCompressedSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
 	}
 	else
 	{
-		gTextureList.mTextureBits += msg->getReceiveSize() * 8;
+		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
 	}
-	gTextureList.mTexturePackets++;
+	gTextureList.sTexturePackets++;
 	
 	//llprintline("Start decode, image header...");
 	msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id);
@@ -1235,7 +1273,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 	U8 *data = new U8[data_size];
 	msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
 	
-	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	if (!image)
 	{
 		delete [] data;
@@ -1401,7 +1439,7 @@ void LLUIImageList::onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_v
 
 		// for images grabbed from local files, apply clipping rectangle to restore original dimensions
 		// from power-of-2 gl image
-		if (success && imagep.notNull() && src_vi && !src_vi->getLocalFileName().empty())
+		if (success && imagep.notNull() && src_vi && (src_vi->getUrl().compare(0, 7, "file://")==0))
 		{
 			F32 clip_x = (F32)src_vi->getOriginalWidth() / (F32)src_vi->getFullWidth();
 			F32 clip_y = (F32)src_vi->getOriginalHeight() / (F32)src_vi->getFullHeight();
@@ -1458,6 +1496,11 @@ bool LLUIImageList::initFromFile()
 		llwarns << "Unable to parse UI image list file " << base_file_path << llendl;
 		return false;
 	}
+	if (!root->hasAttribute("version"))
+	{
+		llwarns << "No valid version number in UI image list file " << base_file_path << llendl;
+		return false;
+	}
 
 	std::vector<std::string> paths;
 	// path to current selected skin
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index fda57ce981bd5fe6e3bf90684bc31c955660b9b9..3c9c81a689a50f36191220c3024d9631027a982f 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -53,7 +53,6 @@ const BOOL GL_TEXTURE_NO = FALSE;
 const BOOL IMMEDIATE_YES = TRUE;
 const BOOL IMMEDIATE_NO = FALSE;
 
-class LLImageJ2C;
 class LLMessageSystem;
 class LLTextureView;
 
@@ -131,7 +130,7 @@ class LLViewerTextureList
 
 	LLViewerFetchedTexture * getImage(const LLUUID &image_id,									 
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -139,6 +138,15 @@ class LLViewerTextureList
 									 );
 	
 	LLViewerFetchedTexture * getImageFromFile(const std::string& filename,									 
+									 BOOL usemipmap = TRUE,
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
+									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
+									 LLGLint internal_format = 0,
+									 LLGLenum primary_format = 0,
+									 const LLUUID& force_id = LLUUID::null
+									 );
+	
+	LLViewerFetchedTexture* getImageFromUrl(const std::string& url,
 									 BOOL usemipmap = TRUE,
 									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
@@ -149,7 +157,7 @@ class LLViewerTextureList
 
 	LLViewerFetchedTexture* createImage(const LLUUID &image_id,
 									 BOOL usemipmap = TRUE,
-									 BOOL level_immediate = FALSE,		// Get the requested level immediately upon creation.
+									 S32 boost_priority = LLViewerTexture::BOOST_NONE,		// Get the requested level immediately upon creation.
 									 S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
 									 LLGLint internal_format = 0,
 									 LLGLenum primary_format = 0,
@@ -159,7 +167,7 @@ class LLViewerTextureList
 	// Request image from a specific host, used for baked avatar textures.
 	// Implemented in header in case someone changes default params above. JC
 	LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host)
-	{ return getImage(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
+	{ return getImage(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
 
 public:
 	typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t;	
@@ -190,11 +198,18 @@ class LLViewerTextureList
 	LLFrameTimer mForceDecodeTimer;
 	
 public:
-	U32 mTextureBits;
-	U32 mTexturePackets;
+	static U32 sTextureBits;
+	static U32 sTexturePackets;
+
+	static LLStat sNumImagesStat;
+	static LLStat sNumRawImagesStat;
+	static LLStat sGLTexMemStat;
+	static LLStat sGLBoundMemStat;
+	static LLStat sRawMemStat;
+	static LLStat sFormattedMemStat;
 
 private:
-	S32 mNumImages;
+	static S32 sNumImages;
 	static void (*sUUIDCallback)(void**, const LLUUID &);
 };
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index c1535b48dc4154511ce958460fd30adf8b9cb3ff..dc2567d94bde70796473e7bb596705f0f552b34f 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -121,6 +121,7 @@
 #include "llhudview.h"
 #include "llimagebmp.h"
 #include "llimagej2c.h"
+#include "llimageworker.h"
 #include "llkeyboard.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
@@ -160,7 +161,6 @@
 #include "lltoolselectland.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
-#include "lluploaddialog.h"
 #include "llurldispatcher.h"		// SLURL from other app instance
 #include "llvieweraudio.h"
 #include "llviewercamera.h"
@@ -192,6 +192,7 @@
 #include "llbottomtray.h"
 #include "llnearbychatbar.h"
 #include "llagentui.h"
+#include "llwearablelist.h"
 
 #include "llnotificationmanager.h"
 
@@ -330,7 +331,9 @@ class LLDebugText
 				S32 hours = (S32)(time / (60*60));
 				S32 mins = (S32)((time - hours*(60*60)) / 60);
 				S32 secs = (S32)((time - hours*(60*60) - mins*60));
-				addText(xpos, ypos, llformat(" Debug %d: %d:%02d:%02d", idx, hours,mins,secs)); ypos += y_inc2;
+				std::string label = gDebugTimerLabel[idx];
+				if (label.empty()) label = llformat("Debug: %d", idx);
+				addText(xpos, ypos, llformat(" %s: %d:%02d:%02d", label.c_str(), hours,mins,secs)); ypos += y_inc2;
 			}
 			
 			F32 time = gFrameTimeSeconds;
@@ -1304,6 +1307,7 @@ LLViewerWindow::LLViewerWindow(
 		
 	// Init the image list.  Must happen after GL is initialized and before the images that
 	// LLViewerWindow needs are requested.
+	LLImageGL::initClass(LLViewerTexture::MAX_GL_IMAGE_CATEGORY) ;
 	gTextureList.init();
 	LLViewerTextureManager::init() ;
 	gBumpImageList.init();
@@ -1373,6 +1377,10 @@ void LLViewerWindow::initGLDefaults()
 	gCylinder.prerender();
 }
 
+struct MainPanel : public LLPanel
+{
+};
+
 void LLViewerWindow::initBase()
 {
 	S32 height = getWindowHeight();
@@ -1396,30 +1404,18 @@ void LLViewerWindow::initBase()
 	// Create the floater view at the start so that other views can add children to it. 
 	// (But wait to add it as a child of the root view so that it will be in front of the 
 	// other views.)
+	MainPanel* main_view = new MainPanel();
+	LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml");
+	main_view->setShape(full_window);
+	getRootView()->addChild(main_view);
+
+	// placeholder widget that controls where "world" is rendered
+	mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
 
 	// Constrain floaters to inside the menu and status bar regions.
-	LLRect floater_view_rect = full_window;
-	// make space for menu bar
-	floater_view_rect.mTop -= MENU_BAR_HEIGHT;
-
-	LLFloaterView::Params fvparams;
-	fvparams.name("Floater View");
-	fvparams.rect(floater_view_rect);
-	fvparams.mouse_opaque(false);
-	fvparams.follows.flags(FOLLOWS_ALL);
-	fvparams.tab_stop(false);
-	gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams);
-
-	LLSnapshotFloaterView::Params snapParams;
-	snapParams.name("Snapshot Floater View");
-	snapParams.rect(full_window);
-	snapParams.enabled(false);
-	gSnapshotFloaterView = LLUICtrlFactory::create<LLSnapshotFloaterView> (snapParams);
+	gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
+	gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
 	
-	// Snapshot floater must start invisible otherwise it eats all
-	// the tooltips. JC
-	gSnapshotFloaterView->setVisible(FALSE);
-
 	// Console
 	llassert( !gConsole );
 	LLConsole::Params cp;
@@ -1443,43 +1439,21 @@ void LLViewerWindow::initBase()
 	}
 #endif
 
-	// Debug view over the console
-	LLDebugView::Params debug_p;
-	debug_p.name("DebugView");
-	debug_p.rect(full_window);
-	debug_p.follows.flags(FOLLOWS_ALL);
-	debug_p.visible(true);
-	gDebugView = LLUICtrlFactory::create<LLDebugView>(debug_p);
-	getRootView()->addChild(gDebugView);
-
-	// Add floater view at the end so it will be on top, and give it tab priority over others
-	getRootView()->addChild(gFloaterView, -1);
-	getRootView()->addChild(gSnapshotFloaterView);
-
-	// notify above floaters!
-	LLRect notify_rect = floater_view_rect;
-	LLNotifyBoxView::Params p;
-	p.name("notify_container");
-	p.rect(notify_rect);
-	p.mouse_opaque(false);
-	p.follows.flags(FOLLOWS_ALL);
-	gNotifyBoxView = LLUICtrlFactory::create<LLNotifyBoxView> (p);
-	getRootView()->addChild(gNotifyBoxView, -2);
-
-	// View for tooltips
-	LLToolTipView::Params hvp;
-	hvp.name("tooltip view");
-	hvp.rect(full_window);
-	hvp.follows.flags(FOLLOWS_ALL);
-	gToolTipView = LLUICtrlFactory::create<LLToolTipView>(hvp);
-	gToolTipView->setFollowsAll();
-	getRootView()->addChild(gToolTipView);
+	gDebugView = getRootView()->getChild<LLDebugView>("DebugView");
+	gDebugView->init();
+	gNotifyBoxView = getRootView()->getChild<LLNotifyBoxView>("notify_container");
+	gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view");
 
 	// Add the progress bar view (startup view), which overrides everything
 	mProgressView = new LLProgressView(full_window);
 	getRootView()->addChild(mProgressView);
 	setShowProgress(FALSE);
 	setProgressCancelButtonVisible(FALSE);
+
+	gMenuHolder = getRootView()->getChild<LLViewerMenuHolderGL>("Menu Holder");
+
+	LLMenuGL::sMenuContainer = gMenuHolder;
+
 }
 
 void LLViewerWindow::initWorldUI()
@@ -1488,20 +1462,19 @@ void LLViewerWindow::initWorldUI()
 	S32 width = mRootView->getRect().getWidth();
 	LLRect full_window(0, height, width, 0);
 
-	gIMMgr = LLIMMgr::getInstance();
 
-	// side tray
-	getRootView()->addChild(LLSideTray::getInstance());
+	gIMMgr = LLIMMgr::getInstance();
 
 	getRootView()->sendChildToFront(gFloaterView);
 	getRootView()->sendChildToFront(gSnapshotFloaterView);
 
 	// new bottom panel
-	LLRect rc = LLBottomTray::getInstance()->getRect();
-	rc.mLeft = 0;
-	rc.mRight = mRootView->getRect().getWidth();
-	LLBottomTray::getInstance()->reshape(rc.getWidth(),rc.getHeight(),FALSE);
-	LLBottomTray::getInstance()->setRect(rc);
+	LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
+	LLBottomTray* bottom_tray = LLBottomTray::getInstance();
+	bottom_tray->setShape(bottom_tray_container->getLocalRect());
+	bottom_tray->setFollowsAll();
+	bottom_tray_container->addChild(bottom_tray);
+	bottom_tray_container->setVisible(TRUE);
 
 	// Pre initialize instance communicate instance;
 	//  currently needs to happen before initializing chat or IM
@@ -1517,17 +1490,6 @@ void LLViewerWindow::initWorldUI()
 	gMorphView = LLUICtrlFactory::create<LLMorphView>(mvp);
 	getRootView()->addChild(gMorphView);
 
-	// Make space for nav bar.
-	LLNavigationBar* navbar = LLNavigationBar::getInstance();
-	LLRect floater_view_rect = gFloaterView->getRect();
-	LLRect notify_view_rect = gNotifyBoxView->getRect();
-	floater_view_rect.mTop -= navbar->getDefNavBarHeight();
-	floater_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight();
-	notify_view_rect.mTop -= navbar->getDefNavBarHeight();
-	notify_view_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight();
-	gFloaterView->setRect(floater_view_rect);
-	gNotifyBoxView->setRect(notify_view_rect);
-
 	LLWorldMapView::initClass();
 	
 	// Force gFloaterWorldMap to initialize
@@ -1538,22 +1500,23 @@ void LLViewerWindow::initWorldUI()
 	LLFloaterReg::hideInstance("build");
 
 	// Status bar
-	S32 menu_bar_height = gMenuBarView->getRect().getHeight();
-	LLRect root_rect = getRootView()->getRect();
-	LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height);
-	gStatusBar = new LLStatusBar(status_rect);
-	gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP);
-
-	gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE);
-	gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight());
+	LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
+	gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
+	gStatusBar->setFollowsAll();
+	gStatusBar->setShape(status_bar_container->getLocalRect());
 	// sync bg color with menu bar
 	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
+	status_bar_container->addChild(gStatusBar);
+	status_bar_container->setVisible(TRUE);
 
 	// Navigation bar
-	navbar->reshape(root_rect.getWidth(), navbar->getRect().getHeight(), TRUE); // *TODO: redundant?
-	navbar->translate(0, root_rect.getHeight() - menu_bar_height - navbar->getRect().getHeight()); // FIXME
-	navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get());
+	LLPanel* nav_bar_container = getRootView()->getChild<LLPanel>("nav_bar_container");
 
+	LLNavigationBar* navbar = LLNavigationBar::getInstance();
+	navbar->setShape(nav_bar_container->getLocalRect());
+	navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get());
+	nav_bar_container->addChild(navbar);
+	nav_bar_container->setVisible(TRUE);
 	
 	if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
 	{
@@ -1585,19 +1548,6 @@ void LLViewerWindow::initWorldUI()
 		LLBottomTray::getInstance()->showGestureButton(FALSE);
 	}
 
-	getRootView()->addChild(gStatusBar);
-	getRootView()->addChild(navbar);
-
-
-	//sidetray
-	//then notify area
-	//then menu
-	//getRootView()->sendChildToFront(LLSideTray::getInstance());
-
-	getRootView()->sendChildToFront(gNotifyBoxView);
-	// menu holder appears on top to get first pass at all mouse events
-	getRootView()->sendChildToFront(gMenuHolder);
-
 	if ( gHUDView == NULL )
 	{
 		LLRect hud_rect = full_window;
@@ -1611,11 +1561,27 @@ void LLViewerWindow::initWorldUI()
 		getRootView()->addChildInBack(gHUDView);
 	}
 
-	// this allows not to see UI elements created while UI initializing after Alt+Tab was pressed during login. EXT-744.
-	moveProgressViewToFront();
-
-	// tooltips are always on top
-	getRootView()->sendChildToFront(gToolTipView);
+	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
+	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance();
+	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
+	panel_stand_stop_flying->setFollowsAll();
+	panel_ssf_container->addChild(panel_stand_stop_flying);
+	panel_ssf_container->setVisible(TRUE);
+
+	// put sidetray in container
+	LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
+	LLSideTray* sidetrayp = LLSideTray::getInstance();
+	sidetrayp->setShape(side_tray_container->getLocalRect());
+	sidetrayp->setFollowsAll();
+	side_tray_container->addChild(sidetrayp);
+	side_tray_container->setVisible(FALSE);
+	
+	// put sidetray buttons in their own panel
+	LLPanel* buttons_panel = sidetrayp->getButtonsPanel();
+	LLPanel* buttons_panel_container = getRootView()->getChild<LLPanel>("side_bar_tabs");
+	buttons_panel->setShape(buttons_panel_container->getLocalRect());
+	buttons_panel->setFollowsAll();
+	buttons_panel_container->addChild(buttons_panel);
 }
 
 // Destroy the UI
@@ -1670,6 +1636,8 @@ void LLViewerWindow::shutdownGL()
 	gSky.cleanup();
 	stop_glerror();
 
+	LLWearableList::instance().cleanup() ;
+
 	gTextureList.shutdown();
 	stop_glerror();
 
@@ -1683,7 +1651,10 @@ void LLViewerWindow::shutdownGL()
 	stop_glerror();
 
 	LLViewerTextureManager::cleanup() ;
-	
+	LLImageGL::cleanupClass() ;
+
+	llinfos << "All texturs and llimagegl images are destroyed!" << llendl ;
+
 	llinfos << "Cleaning up select manager" << llendl;
 	LLSelectMgr::getInstance()->cleanup();
 
@@ -2113,31 +2084,30 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		// arrow keys move avatar while chatting hack
 		if (chat_editor && chat_editor->hasFocus())
 		{
-			if (chat_editor->getText().empty() || gSavedSettings.getBOOL("ArrowKeysMoveAvatar"))
+			// If text field is empty, there's no point in trying to move
+			// cursor with arrow keys, so allow movement
+			if (chat_editor->getText().empty() 
+				|| gSavedSettings.getBOOL("ArrowKeysAlwaysMove"))
 			{
-				switch(key)
+				// let Control-Up and Control-Down through for chat line history,
+				if (!(key == KEY_UP && mask == MASK_CONTROL)
+					&& !(key == KEY_DOWN && mask == MASK_CONTROL))
 				{
-				case KEY_LEFT:
-				case KEY_RIGHT:
-				case KEY_UP:
-					// let CTRL UP through for chat line history
-					if( MASK_CONTROL == mask )
-					{
-						break;
-					}
-				case KEY_DOWN:
-					// let CTRL DOWN through for chat line history
-					if( MASK_CONTROL == mask )
+					switch(key)
 					{
+					case KEY_LEFT:
+					case KEY_RIGHT:
+					case KEY_UP:
+					case KEY_DOWN:
+					case KEY_PAGE_UP:
+					case KEY_PAGE_DOWN:
+					case KEY_HOME:
+						// when chatbar is empty or ArrowKeysAlwaysMove set,
+						// pass arrow keys on to avatar...
+						return FALSE;
+					default:
 						break;
 					}
-				case KEY_PAGE_UP:
-				case KEY_PAGE_DOWN:
-				case KEY_HOME:
-					// when chatbar is empty or ArrowKeysMoveAvatar set, pass arrow keys on to avatar...
-					return FALSE;
-				default:
-					break;
 				}
 			}
 		}
@@ -2326,29 +2296,6 @@ void LLViewerWindow::moveCursorToCenter()
 	LLUI::setMousePositionScreen(x, y);	
 }
 
-void LLViewerWindow::updateBottomTrayRect()
-{
-	if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
-	{
-		S32 side_tray_width = 0;
-		if(LLSideTray::getInstance()->getVisible())
-		{
-			side_tray_width = LLSideTray::getInstance()->getTrayWidth();
-		}
-
-		LLBottomTray* bottom_tray = LLBottomTray::getInstance();
-		S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
-
-		LLRect rc = bottom_tray->getRect();
-		if (right != rc.mRight)
-		{
-			rc.mRight = right;
-			bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
-			bottom_tray->setRect(rc);
-			mOnBottomTrayWidthChanged();
-		}
-	}
-}
 
 //////////////////////////////////////////////////////////////////////
 //
@@ -2390,9 +2337,10 @@ void LLViewerWindow::updateUI()
 {
 	static std::string last_handle_msg;
 
-	updateWorldViewRect();
+	// animate layout stacks so we have up to date rect for world view
+	LLLayoutStack::updateClass();
 
-	updateBottomTrayRect();
+	updateWorldViewRect();
 
 	LLView::sMouseHandlerMessage.clear();
 
@@ -2892,32 +2840,20 @@ void LLViewerWindow::updateKeyboardFocus()
 		LLSideTray::getInstance()->highlightFocused();
 }
 
+static LLFastTimer::DeclareTimer FTM_UPDATE_WORLD_VIEW("Update World View");
 void LLViewerWindow::updateWorldViewRect(bool use_full_window)
 {
-	if (!LLSideTray::instanceCreated()) return;
+	LLFastTimer ft(FTM_UPDATE_WORLD_VIEW);
 
 	// start off using whole window to render world
 	LLRect new_world_rect = mWindowRect;
 
-	if (use_full_window == false)
+	if (use_full_window == false && mWorldViewPlaceholder.get())
 	{
-		// pull in right side of world view based on sidetray
-		LLSideTray* sidetray = LLSideTray::getInstance();
-		if (sidetray->getVisible())
-		{
-			new_world_rect.mRight -= llround((F32)sidetray->getTrayWidth() * mDisplayScale.mV[VX]);
-		}
-
-		// push top of world view below nav bar
-		if (LLNavigationBar::getInstance()->getVisible())
-		{
-			LLNavigationBar* barp = LLNavigationBar::getInstance();
-			LLRect nav_bar_rect;
-			if(barp->localRectToOtherView(barp->getLocalRect(), &nav_bar_rect, mRootView))
-			{
-				new_world_rect.mTop = llround((F32)LLNavigationBar::getInstance()->getRect().mBottom * mDisplayScale.mV[VY]);
-			}
-		}
+		new_world_rect = mWorldViewPlaceholder.get()->calcScreenRect();
+		// clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers
+		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);
+		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1);
 	}
 
 	if (mWorldViewRect != new_world_rect)
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index d7c403739e492047131fa101ea03da2db3aad9e9..d8f0a99a49c855f89db232ea3aa60804b4675f53 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -294,7 +294,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	void				updateKeyboardFocus();		
 
 	void			updateWorldViewRect(bool use_full_window=false);
-	void			updateBottomTrayRect();
 
 	BOOL			handleKey(KEY key, MASK mask);
 	void			handleScrollWheel	(S32 clicks);
@@ -324,7 +323,7 @@ class LLViewerWindow : public LLWindowCallbacks
 	} ESnapshotType;
 	BOOL			saveSnapshot(const std::string&  filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
 	BOOL			rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
-								BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_IMAGE_SIZE );
+								BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE );
 	BOOL			thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ;
 	BOOL			isSnapshotLocSet() const { return ! sSnapshotDir.empty(); }
 	void			resetSnapshotLoc() const { sSnapshotDir.clear(); }
@@ -451,6 +450,8 @@ class LLViewerWindow : public LLWindowCallbacks
 	BOOL			mIgnoreActivate;
 
 	std::string		mInitAlert;			// Window / GL initialization requires an alert
+
+	LLHandle<LLView> mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
 	
diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp
index d124cbcdced8357d26f03281adbadf1ceb519606..999701ece1656d7d504659e41e03c9f52039b29f 100644
--- a/indra/newview/llvlcomposition.cpp
+++ b/indra/newview/llvlcomposition.cpp
@@ -279,7 +279,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
 		if (mRawImages[i].isNull())
 		{
 			// Read back a raw image for this discard level, if it exists
-			mRawImages[i] = new LLImageRaw;
 			S32 min_dim = llmin(mDetailTextures[i]->getFullWidth(), mDetailTextures[i]->getFullHeight());
 			S32 ddiscard = 0;
 			while (min_dim > BASE_SIZE && ddiscard < MAX_DISCARD_LEVEL)
@@ -287,12 +286,18 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
 				ddiscard++;
 				min_dim /= 2;
 			}
-			if (!mDetailTextures[i]->readBackRaw(ddiscard, mRawImages[i], false))
+
+			mDetailTextures[i]->reloadRawImage(ddiscard) ;
+			if(mDetailTextures[i]->getRawImageLevel() != ddiscard)//raw iamge is not ready, will enter here again later.
 			{
-				llwarns << "Unable to read raw data for terrain detail texture: " << mDetailTextures[i]->getID() << llendl;
-				mRawImages[i] = NULL;
+				mDetailTextures[i]->destroyRawImage() ;
+				lldebugs << "cached raw data for terrain detail texture is not ready yet: " << mDetailTextures[i]->getID() << llendl;
 				return FALSE;
 			}
+
+			mRawImages[i] = mDetailTextures[i]->getRawImage() ;
+			mDetailTextures[i]->destroyRawImage() ;
+
 			if (mDetailTextures[i]->getWidth(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getHeight(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getComponents() != 3)
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4bf66ba17e08ea1230766c3a56ad18e91092c072..16bd74f7989a9af73f5a7398bfbec9ea7805a3c7 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -689,7 +689,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 		mBakedTextureDatas[i].mIsUsed = false;
 		mBakedTextureDatas[i].mMaskTexName = 0;
 		mBakedTextureDatas[i].mTextureIndex = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)i);
-		mBakedTextureDatas[i].mMorphMasksValid = FALSE;
 	}
 
 	mDirtyMesh = TRUE;	// Dirty geometry, need to regenerate.
@@ -999,7 +998,7 @@ void LLVOAvatar::resetImpostors()
 
 // static
 void LLVOAvatar::deleteCachedImages(bool clearAll)
-{
+{	
 	if (LLTexLayerSet::sHasCaches)
 	{
 		lldebugs << "Deleting layer set caches" << llendl;
@@ -2385,7 +2384,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
 			F32 old_angle = mImpostorAngle.mV[i];
 			F32 angle_diff = fabsf(cur_angle-old_angle);
 		
-			if (angle_diff > 3.14159f/512.f*distance*mUpdatePeriod)
+			if (angle_diff > F_PI/512.f*distance*mUpdatePeriod)
 			{
 				mNeedsImpostorUpdate = TRUE;
 			}
@@ -2557,7 +2556,7 @@ void LLVOAvatar::idleUpdateLoadingEffect()
 			particle_parameters.mPartImageID                 = cloud->getID();
 			particle_parameters.mMaxAge                      = 0.f;
 			particle_parameters.mPattern                     = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE;
-			particle_parameters.mInnerAngle                  = 3.14159f;
+			particle_parameters.mInnerAngle                  = F_PI;
 			particle_parameters.mOuterAngle                  = 0.f;
 			particle_parameters.mBurstRate                   = 0.02f;
 			particle_parameters.mBurstRadius                 = 0.0f;
@@ -3919,7 +3918,7 @@ U32 LLVOAvatar::renderFootShadows()
 	LLGLDepthTest test(GL_TRUE, GL_FALSE);
 	//render foot shadows
 	LLGLEnable blend(GL_BLEND);
-	gGL.getTexUnit(0)->bind(mShadowImagep.get());
+	gGL.getTexUnit(0)->bind(mShadowImagep, TRUE);
 	glColor4fv(mShadow0Facep->getRenderColor().mV);
 	mShadow0Facep->renderIndexed(foot_mask);
 	glColor4fv(mShadow1Facep->getRenderColor().mV);
@@ -3967,7 +3966,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color, S32 diffuse_channel)
 //------------------------------------------------------------------------
 // LLVOAvatar::updateTextures()
 //------------------------------------------------------------------------
-void LLVOAvatar::updateTextures(LLAgent &agent)
+void LLVOAvatar::updateTextures()
 {
 	BOOL render_avatar = TRUE;
 
@@ -5378,7 +5377,6 @@ void LLVOAvatar::updateSexDependentLayerSets( BOOL set_by_user )
 	invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user );
 	invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user );
 	invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user );
-	updateMeshTextures();
 }
 
 //-----------------------------------------------------------------------------
@@ -6091,28 +6089,6 @@ void LLVOAvatar::addMaskedMorph(EBakedTextureIndex index, LLPolyMorphTarget* mor
 	}
 }
 
-// invalidates morph masks for a given layer. Don't pass a parameter to invalidate all morph masks.
-void LLVOAvatar::invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index)
-{
-	setMorphMasksValid(FALSE, index);
-}
-
-// updates morph masks to be a value for a given layer. Don't pass an argument to set value for all morph masks
-void LLVOAvatar::setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index)
-{
-	if (index == BAKED_NUM_INDICES)
-	{
-		for (U8 tex = 0; tex < (U8)BAKED_NUM_INDICES; tex++)
-		{
-			mBakedTextureDatas[tex].mMorphMasksValid = new_status;
-		}
-	} 
-	else if (index < BAKED_NUM_INDICES) 
-	{
-		mBakedTextureDatas[index].mMorphMasksValid = new_status;
-	}
-}
-
 // returns TRUE if morph masks are present and not valid for a given baked texture, FALSE otherwise
 BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index)
 {
@@ -6121,9 +6097,20 @@ BOOL LLVOAvatar::morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex inde
 		return FALSE;
 	}
 
-	if (!mBakedTextureDatas[index].mMaskedMorphs.empty() && !mBakedTextureDatas[index].mMorphMasksValid)
+	if (!mBakedTextureDatas[index].mMaskedMorphs.empty())
 	{
-		return TRUE;
+		if (isSelf())
+		{
+			LLTexLayerSet *layer_set = mBakedTextureDatas[index].mTexLayerSet;
+			if (layer_set)
+			{
+				return !layer_set->isMorphValid();
+			}
+		}
+		else
+		{
+			return FALSE;
+		}
 	}
 
 	return FALSE;
@@ -6520,7 +6507,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 			&& baked_index != BAKED_SKIRT)
 		{
 			setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, 
-				LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+				LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 		}
 	}
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index f7c794defeb48da8f521cc2e6f927d982d29b65e..173ad02808a4981359c27699495e20a529412bcd 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -125,7 +125,7 @@ class LLVOAvatar :
 	virtual BOOL   	 	 	updateLOD();
 	BOOL  	 	 	 	 	updateJointLODs();
 	virtual BOOL   	 	 	isActive() const; // Whether this object needs to do an idleUpdate.
-	virtual void   	 	 	updateTextures(LLAgent &agent);
+	virtual void   	 	 	updateTextures();
 	virtual S32    	 	 	setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim.
 	virtual void   	 	 	onShift(const LLVector3& shift_vector);
 	virtual U32    	 	 	getPartitionType() const;
@@ -355,10 +355,8 @@ class LLVOAvatar :
 	// Morph masks
 	//--------------------------------------------------------------------
 public:
-	void 		invalidateMorphMasks(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	BOOL 		morphMaskNeedsUpdate(LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	void 		addMaskedMorph(LLVOAvatarDefines::EBakedTextureIndex index, LLPolyMorphTarget* morph_target, BOOL invert, std::string layer);
-	void 		setMorphMasksValid(BOOL new_status, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 	void 		applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components, LLVOAvatarDefines::EBakedTextureIndex index = LLVOAvatarDefines::BAKED_NUM_INDICES);
 
 	//--------------------------------------------------------------------
@@ -489,7 +487,6 @@ class LLVOAvatar :
 		// Stores pointers to the joint meshes that this baked texture deals with
 		std::vector< LLViewerJointMesh * > 	mMeshes;  // std::vector<LLViewerJointMesh> mJoints[i]->mMeshParts
 		morph_list_t						mMaskedMorphs;
-		BOOL								mMorphMasksValid;
 	};
 	typedef std::vector<BakedTextureData> 	bakedtexturedata_vec_t;
 	bakedtexturedata_vec_t 					mBakedTextureDatas;
diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp
index 5624f19c8d040fffc9e74db8387f8949c699a68c..49c4a1a6c89da64e6563219e193600851d194fe2 100644
--- a/indra/newview/llvoavatardefines.cpp
+++ b/indra/newview/llvoavatardefines.cpp
@@ -84,34 +84,34 @@ LLVOAvatarDictionary::BakedTextures::BakedTextures()
 {
 	// Baked textures
 	addEntry(BAKED_HEAD,       new BakedEntry(TEX_HEAD_BAKED,  
-											  "head", "18ded8d6-bcfc-e415-8539-944c0f5ea7a6", 
+											  "head", "a4b9dc38-e13b-4df9-b284-751efb0566ff", 
 											  3, TEX_HEAD_BODYPAINT, TEX_HEAD_TATTOO, TEX_HEAD_ALPHA,
 											  5, WT_SHAPE, WT_SKIN, WT_HAIR, WT_TATTOO, WT_ALPHA));
 
 	addEntry(BAKED_UPPER,      new BakedEntry(TEX_UPPER_BAKED, 
-											  "upper_body", "338c29e3-3024-4dbb-998d-7c04cf4fa88f", 
+											  "upper_body", "5943ff64-d26c-4a90-a8c0-d61f56bd98d4", 
 											  7, TEX_UPPER_SHIRT,TEX_UPPER_BODYPAINT, TEX_UPPER_JACKET,
 											  TEX_UPPER_GLOVES, TEX_UPPER_UNDERSHIRT, TEX_UPPER_TATTOO, TEX_UPPER_ALPHA,
 											  8, WT_SHAPE, WT_SKIN,	WT_SHIRT, WT_JACKET, WT_GLOVES, WT_UNDERSHIRT, WT_TATTOO, WT_ALPHA));											  
 
 	addEntry(BAKED_LOWER,      new BakedEntry(TEX_LOWER_BAKED, 
-											  "lower_body", "91b4a2c7-1b1a-ba16-9a16-1f8f8dcc1c3f",
+											  "lower_body", "2944ee70-90a7-425d-a5fb-d749c782ed7d",
 											  8, TEX_LOWER_PANTS,TEX_LOWER_BODYPAINT,TEX_LOWER_SHOES, TEX_LOWER_SOCKS,
 											  TEX_LOWER_JACKET, TEX_LOWER_UNDERPANTS, TEX_LOWER_TATTOO, TEX_LOWER_ALPHA,
 											  9, WT_SHAPE, WT_SKIN,	WT_PANTS, WT_SHOES,	 WT_SOCKS,  WT_JACKET, WT_UNDERPANTS, WT_TATTOO, WT_ALPHA));
 
 	addEntry(BAKED_EYES,       new BakedEntry(TEX_EYES_BAKED,  
-											  "eyes", "b2cf28af-b840-1071-3c6a-78085d8128b5",
+											  "eyes", "27b1bc0f-979f-4b13-95fe-b981c2ba9788",
 											  2, TEX_EYES_IRIS, TEX_EYES_ALPHA,
 											  2, WT_EYES, WT_ALPHA));
 
 	addEntry(BAKED_SKIRT,      new BakedEntry(TEX_SKIRT_BAKED,
-											  "skirt", "ea800387-ea1a-14e0-56cb-24f2022f969a", 
+											  "skirt", "03e7e8cb-1368-483b-b6f3-74850838ba63", 
 											  1, TEX_SKIRT,
 											  1, WT_SKIRT));
 
 	addEntry(BAKED_HAIR,       new BakedEntry(TEX_HAIR_BAKED,
-											  "hair", "0af1ef7c-ad24-11dd-8790-001f5bf833e8", 
+											  "hair", "a60e85a9-74e8-48d8-8a2d-8129f28d9b61", 
 											  2, TEX_HAIR, TEX_HAIR_ALPHA,
 											  2, WT_HAIR, WT_ALPHA));
 }
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 758db538a28f4cbddb991e7908c9fa91b726d9a1..a2203ba2ea89ba1e2af78eefe34d0028d9114d28 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -41,53 +41,22 @@
 #include "llvoavatarself.h"
 #include "llvoavatar.h"
 
-#include <stdio.h>
-#include <ctype.h>
-
-#include "llaudioengine.h"
-#include "noise.h"
+#include "pipeline.h"
 
-// TODO: Seraph - Remove unnecessary headers.  These are copied from llvoavatar.h.
 #include "llagent.h" //  Get state values from here
 #include "llagentwearables.h"
-#include "llviewercontrol.h"
-#include "lldrawpoolavatar.h"
-#include "lldriverparam.h"
-#include "lleditingmotion.h"
-#include "llemote.h"
-#include "llface.h"
-#include "llfirstuse.h"
-#include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
-#include "llkeyframefallmotion.h"
-#include "llkeyframestandmotion.h"
-#include "llkeyframewalkmotion.h"
-#include "llmutelist.h"
 #include "llselectmgr.h"
-#include "llsprite.h"
-#include "lltargetingmotion.h"
-#include "lltexlayer.h"
-#include "lltexglobalcolor.h"
 #include "lltoolgrab.h"	// for needsRenderBeam
 #include "lltoolmgr.h" // for needsRenderBeam
 #include "lltoolmorph.h"
 #include "lltrans.h"
 #include "llviewercamera.h"
-#include "llviewertexturelist.h"
 #include "llviewermenu.h"
 #include "llviewerobjectlist.h"
-#include "llviewerparcelmgr.h"
 #include "llviewerstats.h"
-#include "llvovolume.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llviewershadermgr.h"
-#include "llsky.h"
-#include "llanimstatelabels.h"
-#include "llgesturemgr.h" //needed to trigger the voice gesticulations
-#include "llvoiceclient.h"
-#include "llvoicevisualizer.h" // Ventrella
+#include "llviewerregion.h"
 #include "llappearancemgr.h"
 
 #if LL_MSVC
@@ -205,7 +174,10 @@ void LLVOAvatarSelf::markDead()
 		 param;
 		 param = (LLViewerVisualParam*) getNextVisualParam())
 	{
-		param->setIsDummy(TRUE);
+		if (param->getWearableType() != WT_INVALID)
+		{
+			param->setIsDummy(TRUE);
+		}
 	}
 
 	return success;
@@ -785,19 +757,7 @@ void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_b
 		return;
 	}
 
-	LLTexLayerSet* layer_set = getLayerSet((ETextureIndex)te);
-	if (layer_set)
-	{
-		invalidateComposite(layer_set, set_by_user);
-	}
-
 	setTEImage(te, image);
-	updateMeshTextures();
-
-	if (gAgent.cameraCustomizeAvatar())
-	{
-		LLVisualParamHint::requestHintUpdates();
-	}
 }
 
 //virtual
@@ -1080,15 +1040,8 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 	if (attachment->isObjectAttached(viewer_object))
 	{
 		const LLUUID& attachment_id = viewer_object->getItemID();
-		LLViewerInventoryItem *item = gInventory.getItem(attachment_id);
-		if (item)
-		{
-			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
-			LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
-			gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
-		}
+		LLAppearanceManager::registerAttachment(attachment_id);
 	}
-	gInventory.notifyObservers();
 
 	return attachment;
 }
@@ -1096,12 +1049,12 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 //virtual
 BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 {
-	const LLUUID item_id = viewer_object->getItemID();
+	const LLUUID attachment_id = viewer_object->getItemID();
 	if (LLVOAvatar::detachObject(viewer_object))
 	{
 		// the simulator should automatically handle permission revocation
 		
-		stopMotionFromSource(item_id);
+		stopMotionFromSource(attachment_id);
 		LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE);
 		
 		LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren();
@@ -1126,13 +1079,9 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 		}
 		else
 		{
-			LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
-			LLAppearanceManager::removeItemLinks(item_id, false);
+			LLAppearanceManager::unregisterAttachment(attachment_id);
 		}
 		
-		// BAP - needs to change for label to track link.
-		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
-		gInventory.notifyObservers();
 		return TRUE;
 	}
 	return FALSE;
@@ -1209,26 +1158,6 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr
 	}
 }
 
-// virtual
-/* //unused
-BOOL LLVOAvatarSelf::getLocalTextureRaw(ETextureIndex index, LLImageRaw* image_raw) const
-{
-	if (!isIndexLocalTexture(index)) return FALSE;
-	if (getLocalTextureID(index) == IMG_DEFAULT_AVATAR)	return TRUE;
-
-	const LocalTextureData *local_tex_data = getLocalTextureData(index)[0];
-	if (local_tex_data->mImage->readBackRaw(-1, image_raw, false))
-	{
-
-		return TRUE;
-	}
-	
-	// No data loaded yet
-	setLocalTexture((ETextureIndex)index, getTEImage(index), FALSE); // <-- non-const, move this elsewhere
-	return FALSE;
-}
-*/
-
 // virtual
 BOOL LLVOAvatarSelf::getLocalTextureGL(ETextureIndex type, LLViewerTexture** tex_pp, U32 index) const
 {
@@ -1426,8 +1355,8 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u
 	}
 	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegion() << llendl;
 
-	invalidateMorphMasks(layerset->getBakedTexIndex());
 	layerset->requestUpdate();
+	layerset->invalidateMorphMasks();
 
 	if( set_by_user )
 	{
@@ -1436,6 +1365,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u
 		ETextureIndex baked_te = getBakedTE( layerset );
 		setTEImage( baked_te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR) );
 		layerset->requestUpload();
+		updateMeshTextures();
 	}
 }
 
@@ -1445,7 +1375,6 @@ void LLVOAvatarSelf::invalidateAll()
 	{
 		invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE);
 	}
-	updateMeshTextures();
 }
 
 //-----------------------------------------------------------------------------
@@ -1880,12 +1809,13 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe
 
 	if (!covered_by_baked)
 	{
-		if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR)
+		if (getLocalTextureID(type, index) != IMG_DEFAULT_AVATAR && imagep->getDiscardLevel() != 0)
 		{
 			F32 desired_pixels;
 			desired_pixels = llmin(mPixelArea, (F32)getTexImageArea());
 			imagep->setBoostLevel(getAvatarBoostLevel());
 			imagep->addTextureStats( desired_pixels / texel_area_ratio );
+			imagep->forceUpdateBindStats() ;
 			if (imagep->getDiscardLevel() < 0)
 			{
 				mHasGrey = TRUE; // for statistics gathering
@@ -2183,6 +2113,49 @@ BOOL LLVOAvatarSelf::needsRenderBeam()
 // static
 void LLVOAvatarSelf::deleteScratchTextures()
 {
+	if(gAuditTexture)
+	{
+		S32 total_tex_size = sScratchTexBytes ;
+		S32 tex_size = SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT ;
+
+		if( sScratchTexNames.checkData( GL_LUMINANCE ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_ALPHA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_COLOR_INDEX ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 1, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_LUMINANCE_ALPHA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 2, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 2 * tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_RGB ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 3, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 3 * tex_size ;
+		}
+		if( sScratchTexNames.checkData( GL_RGBA ) )
+		{
+			LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 4 * tex_size ;
+		}
+		//others
+		while(total_tex_size > 0)
+		{
+			LLImageGL::decTextureCounter(tex_size, 4, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+			total_tex_size -= 4 * tex_size ;
+		}
+	}
+
 	for( LLGLuint* namep = sScratchTexNames.getFirstData(); 
 		 namep; 
 		 namep = sScratchTexNames.getNextData() )
@@ -2205,7 +2178,8 @@ void LLVOAvatarSelf::deleteScratchTextures()
 BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 {
 	U32 texture_bytes = 0;
-	GLuint gl_name = getScratchTexName( format, &texture_bytes );
+	S32 components = 0; 
+	GLuint gl_name = getScratchTexName( format, components, &texture_bytes );
 	if( gl_name )
 	{
 		gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
@@ -2217,12 +2191,12 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 			if( *last_bind_time != LLImageGL::sLastFrameTime )
 			{
 				*last_bind_time = LLImageGL::sLastFrameTime;
-				LLImageGL::updateBoundTexMem(texture_bytes);
+				LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
 			}
 		}
 		else
 		{
-			LLImageGL::updateBoundTexMem(texture_bytes);
+			LLImageGL::updateBoundTexMem(texture_bytes, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
 			sScratchTexLastBindTime.addData( format, new F32(LLImageGL::sLastFrameTime) );
 		}
 		return TRUE;
@@ -2230,9 +2204,8 @@ BOOL LLVOAvatarSelf::bindScratchTexture( LLGLenum format )
 	return FALSE;
 }
 
-LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes )
-{
-	S32 components;
+LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, S32& components, U32* texture_bytes )
+{	
 	GLenum internal_format;
 	switch( format )
 	{
@@ -2278,6 +2251,11 @@ LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, U32* texture_bytes
 
 	sScratchTexBytes += *texture_bytes;
 	LLImageGL::sGlobalTextureMemoryInBytes += *texture_bytes;
+
+	if(gAuditTexture)
+	{
+		LLImageGL::incTextureCounter(SCRATCH_TEX_WIDTH * SCRATCH_TEX_HEIGHT, components, LLViewerTexture::AVATAR_SCRATCH_TEX) ;
+	}
 	return name;
 }
 
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 6e52b336348848c5307a2446963b49cd2fc9e845..8a66422c445a14c021943af260cef88dfa53d1f7 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -241,7 +241,7 @@ class LLVOAvatarSelf :
 	BOOL			bindScratchTexture(LLGLenum format);
 	static void		deleteScratchTextures();
 protected:
-	LLGLuint		getScratchTexName(LLGLenum format, U32* texture_bytes);
+	LLGLuint		getScratchTexName(LLGLenum format, S32& components, U32* texture_bytes);
 private:
 	static S32 		sScratchTexBytes;
 	static LLMap< LLGLenum, LLGLuint*> sScratchTexNames;
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
index 8d3c8b6f1a98b5f18094e69f3d40600f08c5adbd..177cb16c50802a5e17ab62533a0c7459ffd220af 100644
--- a/indra/newview/llvoclouds.cpp
+++ b/indra/newview/llvoclouds.cpp
@@ -101,7 +101,7 @@ void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent)
 	mPixelArea = 1500*100;
 }
 
-void LLVOClouds::updateTextures(LLAgent &agent)
+void LLVOClouds::updateTextures()
 {
 	getTEImage(0)->addTextureStats(mPixelArea);
 }
diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h
index 95e6b96e4ed5c257fd540d5fd86578af9fd9a6b0..c4a75f5b5ef3028b799d8bebcf9c7aaa2877feb2 100644
--- a/indra/newview/llvoclouds.h
+++ b/indra/newview/llvoclouds.h
@@ -65,7 +65,7 @@ class LLVOClouds : public LLAlphaObject
 	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
 	F32 getPartSize(S32 idx);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 	
 	void updateFaceSize(S32 idx) { }
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index 570a3334b9ec4b25da058e7571bed200db5be109..f33a5cc81839f541008a10e1404d6f87d7dbc7ef 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -106,7 +106,7 @@ void LLVOGrass::updateSpecies()
 		SpeciesMap::const_iterator it = sSpeciesTable.begin();
 		mSpecies = (*it).first;
 	}
-	setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE));
+	setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
 }
 
 
@@ -322,7 +322,7 @@ void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent)
 
 
 // BUG could speed this up by caching the relative_position and range calculations
-void LLVOGrass::updateTextures(LLAgent &agent)
+void LLVOGrass::updateTextures()
 {
 	if (getTEImage(0))
 	{
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 124400d35607f1d17ae5139d368a9f0e3bb8b64b..6a6fcc31c3b7d4f50ace57c1747d05b3e424fedb 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -72,7 +72,7 @@ class LLVOGrass : public LLAlphaObject
 								LLStrider<U16>& indicesp);
 
 	void updateFaceSize(S32 idx) { }
-	/*virtual*/ void updateTextures(LLAgent &agent);											
+	/*virtual*/ void updateTextures();											
 	/*virtual*/ BOOL updateLOD();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp
index ac2484ddfddcbb1c9ab40d1645caddc67d84fe9d..221c6b61ec2c0c1904b4f352a131daacdcb17a9e 100644
--- a/indra/newview/llvoground.cpp
+++ b/indra/newview/llvoground.cpp
@@ -70,7 +70,7 @@ BOOL LLVOGround::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 }
 
 
-void LLVOGround::updateTextures(LLAgent &agent)
+void LLVOGround::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h
index af3fcd65d46827791cd18c6a88d467db3de30b60..0ccb0834a2fe388db6ce30d6ece03c6f04a48452 100644
--- a/indra/newview/llvoground.h
+++ b/indra/newview/llvoground.h
@@ -51,7 +51,7 @@ class LLVOGround : public LLStaticViewerObject
 	
 	// Graphical stuff for objects - maybe broken out into render class
 	// later?
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 96fcf61e62899c2b41bce022335a8eb435f3e531..cefc88ebee85249ec4bda34b0d70d113de31d4a6 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -390,7 +390,15 @@ void LLVoiceChannel::setState(EState state)
 		break;
 	}
 
-	mState = state;
+	doSetState(state);
+}
+
+void LLVoiceChannel::doSetState(const EState& new_state)
+{
+	EState old_state = mState;
+	mState = new_state;
+	if (!mStateChangedCallback.empty())
+		mStateChangedCallback(old_state, mState);
 }
 
 void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
@@ -620,7 +628,7 @@ void LLVoiceChannelGroup::setState(EState state)
 			gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
 		}
 
-		mState = state;
+		doSetState(state);
 		break;
 	default:
 		LLVoiceChannel::setState(state);
@@ -865,7 +873,7 @@ void LLVoiceChannelP2P::setState(EState state)
 	if (mReceivedCall && state == STATE_RINGING)
 	{
 		gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
-		mState = state;
+		doSetState(state);
 		return;
 	}
 	LLVoiceChannel::setState(state);
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 9966bdd5abff75798ab693808e037dae5196801b..8f1e9ff02d3c9807781b2e19425e408f2212440e 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -52,6 +52,8 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 		STATE_CONNECTED
 	} EState;
 
+	typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t;
+
 	LLVoiceChannel(const LLUUID& session_id, const std::string& session_name);
 	virtual ~LLVoiceChannel();
 
@@ -69,6 +71,8 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 	virtual BOOL callStarted();
 	const std::string& getSessionName() const { return mSessionName; }
 
+	void setStateChangedCallback(state_changed_callback_t callback) { mStateChangedCallback = callback; }
+
 	const LLUUID getSessionID() { return mSessionID; }
 	EState getState() { return mState; }
 
@@ -85,6 +89,10 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 
 protected:
 	virtual void setState(EState state);
+	/**
+	 * Use this method if you want mStateChangedCallback to be executed while state is changed
+	 */
+	void doSetState(const EState& state);
 	void toggleCallWindowIfNeeded(EState state);
 	void setURI(std::string uri);
 
@@ -106,6 +114,9 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 	static LLVoiceChannel* sCurrentVoiceChannel;
 	static LLVoiceChannel* sSuspendedVoiceChannel;
 	static BOOL sSuspended;
+
+private:
+	state_changed_callback_t mStateChangedCallback;
 };
 
 class LLVoiceChannelGroup : public LLVoiceChannel
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index df5481c874c91240e1cf862a65507c373cf522f1..39d4bb0c029396af530e18908570179de4ba5a45 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -68,9 +68,6 @@
 #include "llfloaterfriends.h"  //VIVOX, inorder to refresh communicate panel
 #include "llfloaterchat.h"		// for LLFloaterChat::addChat()
 
-// for Talk Button's state updating
-#include "llnearbychatbar.h"
-
 // for base64 decoding
 #include "apr_base64.h"
 
@@ -5791,7 +5788,6 @@ bool LLVoiceClient::getMuteMic() const
 void LLVoiceClient::setUserPTTState(bool ptt)
 {
 	mUserPTTState = ptt;
-	if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(ptt);
 }
 
 bool LLVoiceClient::getUserPTTState()
@@ -5802,7 +5798,6 @@ bool LLVoiceClient::getUserPTTState()
 void LLVoiceClient::toggleUserPTTState(void)
 {
 	mUserPTTState = !mUserPTTState;
-	if (LLNearbyChatBar::instanceExists()) LLNearbyChatBar::getInstance()->setPTTState(mUserPTTState);
 }
 
 void LLVoiceClient::setVoiceEnabled(bool enabled)
@@ -5930,8 +5925,6 @@ void LLVoiceClient::setMicGain(F32 volume)
 
 void LLVoiceClient::keyDown(KEY key, MASK mask)
 {	
-//	LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL;
-
 	if (gKeyboard->getKeyRepeated(key))
 	{
 		// ignore auto-repeat keys
@@ -5940,44 +5933,39 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
 
 	if(!mPTTIsMiddleMouse)
 	{
-		if(mPTTIsToggle)
-		{
-			if(key == mPTTKey)
-			{
-				toggleUserPTTState();
-			}
-		}
-		else if(mPTTKey != KEY_NONE)
-		{
-			setUserPTTState(gKeyboard->getKeyDown(mPTTKey));
-		}
+		bool down = (mPTTKey != KEY_NONE)
+			&& gKeyboard->getKeyDown(mPTTKey);
+		inputUserControlState(down);
 	}
 }
 void LLVoiceClient::keyUp(KEY key, MASK mask)
 {
 	if(!mPTTIsMiddleMouse)
 	{
-		if(!mPTTIsToggle && (mPTTKey != KEY_NONE))
+		bool down = (mPTTKey != KEY_NONE)
+			&& gKeyboard->getKeyDown(mPTTKey);
+		inputUserControlState(down);
+	}
+}
+void LLVoiceClient::inputUserControlState(bool down)
+{
+	if(mPTTIsToggle)
+	{
+		if(down) // toggle open-mic state on 'down'
 		{
-			setUserPTTState(gKeyboard->getKeyDown(mPTTKey));
+			toggleUserPTTState();
 		}
 	}
+	else // set open-mic state as an absolute
+	{
+		setUserPTTState(down);
+	}
 }
 void LLVoiceClient::middleMouseState(bool down)
 {
 	if(mPTTIsMiddleMouse)
 	{
-		if(mPTTIsToggle)
-		{
-			if(down)
-			{
-				toggleUserPTTState();
-			}
-		}
-		else
-		{
-			setUserPTTState(down);
-		}
+		inputUserControlState(down);
 	}
 }
 
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 9df96d9a5215a2db6f0edf23f9427556e8d09fd5..347fae6156b9d45e571d0e49c8757c15d2b1d4ad 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -188,6 +188,7 @@ static	void updatePosition(void);
 		void setUserPTTState(bool ptt);
 		bool getUserPTTState();
 		void toggleUserPTTState(void);
+		void inputUserControlState(bool down); // interpret any sort of up-down mic-open control input according to ptt-toggle prefs
 		void setVoiceEnabled(bool enabled);
 		static bool voiceEnabled();
 		void setUsePTT(bool usePTT);
@@ -196,7 +197,7 @@ static	void updatePosition(void);
 		void setEarLocation(S32 loc);
 		void setVoiceVolume(F32 volume);
 		void setMicGain(F32 volume);
-		void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
+		void setUserVolume(const LLUUID& id, F32 volume); // sets volume for specified agent, from 0-1 (where .5 is nominal)
 		void setLipSyncEnabled(BOOL enabled);
 		BOOL lipSyncEnabled();
 
diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
index 9bafc03a6d1845893194a41e8163db4fc42d43d3..e777d7362f7ec18abe2a2c7dbf7bc3154e2d96cf 100644
--- a/indra/newview/llvoicevisualizer.cpp
+++ b/indra/newview/llvoicevisualizer.cpp
@@ -142,7 +142,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
 	for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++)
 	{
 		mSoundSymbol.mWaveFadeOutStartTime	[i] = mCurrentTime;
-		mSoundSymbol.mTexture				[i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, TRUE);
+		mSoundSymbol.mTexture				[i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, LLViewerTexture::BOOST_UI);
 		mSoundSymbol.mWaveActive			[i] = false;
 		mSoundSymbol.mWaveOpacity			[i] = 1.0f;
 		mSoundSymbol.mWaveExpansion			[i] = 1.0f;
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 143cd2d9c63a3d5540041c0884f428ada43d2418..9dd0b598dc549d08c1d4f9c4ee631c252dbe7c7d 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -108,7 +108,7 @@ void LLVOPartGroup::setPixelAreaAndAngle(LLAgent &agent)
 	}
 }
 
-void LLVOPartGroup::updateTextures(LLAgent &agent)
+void LLVOPartGroup::updateTextures()
 {
 	// Texture stats for particles need to be updated in a different way...
 }
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index 3dc32929920f519cb196bf71e0979b6939245599..18583b4be9ae0b015979c811230e6dd2169eb484 100644
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -61,7 +61,7 @@ class LLVOPartGroup : public LLAlphaObject
 	virtual U32 getPartitionType() const;
 	
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index d44c5432669c4aa0759bb371debf2ef791f02fc6..5ff8f0d267d1aa89f17deda2bc8a800202f6fc33 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -289,7 +289,7 @@ void LLSkyTex::create(const F32 brightness)
 
 void LLSkyTex::createGLImage(S32 which)
 {	
-	mTexture[which]->createGLTexture(0, mImageRaw[which]);
+	mTexture[which]->createGLTexture(0, mImageRaw[which], 0, TRUE, LLViewerTexture::LOCAL);
 	mTexture[which]->setAddressMode(LLTexUnit::TAM_CLAMP);
 }
 
@@ -376,9 +376,9 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
 	mSun.setIntensity(SUN_INTENSITY);
 	mMoon.setIntensity(0.1f * SUN_INTENSITY);
 
-	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
 	mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
 	mBloomTexturep->setNoDelete() ;
@@ -472,9 +472,9 @@ void LLVOSky::restoreGL()
 	{
 		mSkyTex[i].restoreGL();
 	}
-	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE);
+	mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
-	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE);
+	mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI);
 	mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
 	mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
 	mBloomTexturep->setNoDelete() ;
@@ -1180,7 +1180,7 @@ BOOL LLVOSky::updateSky()
 	return TRUE;
 }
 
-void LLVOSky::updateTextures(LLAgent &agent)
+void LLVOSky::updateTextures()
 {
 	if (mSunTexturep)
 	{
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
index 62c934fb41085bdba8dbd5ebcf8d5c33c5b1489b..ef74324e58d8ded0a5bbefd183179be912c9d428 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -492,7 +492,7 @@ class LLVOSky : public LLStaticViewerObject
 	
 	// Graphical stuff for objects - maybe broken out into render class
 	// later?
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 164f0f0cade67b0c1d7ffbb63c5cc2b1904491e2..ef7b16100361789cd5a138270d44081600ccc993 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -134,7 +134,7 @@ void LLVOSurfacePatch::setPixelAreaAndAngle(LLAgent &agent)
 }
 
 
-void LLVOSurfacePatch::updateTextures(LLAgent &agent)
+void LLVOSurfacePatch::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index aaf4d41fa1e02b733e58d946b26b95cab5028c93..10a5888526ca0a17dbdf44d651a0cd7aed241291 100644
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -75,7 +75,7 @@ class LLVOSurfacePatch : public LLStaticViewerObject
 								LLStrider<LLVector2> &texCoords1p,
 								LLStrider<U16> &indicesp);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
 	/*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp
index f5094c025ec27a610a2c07b2cfefd00e67604db9..75beab519e0c5406704ced2b2d4ec72a265b9fec 100644
--- a/indra/newview/llvotextbubble.cpp
+++ b/indra/newview/llvotextbubble.cpp
@@ -115,7 +115,7 @@ BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld	&world, const F64 &time)
 }
 
 
-void LLVOTextBubble::updateTextures(LLAgent &agent)
+void LLVOTextBubble::updateTextures()
 {
 	// Update the image levels of all textures...
 
diff --git a/indra/newview/llvotextbubble.h b/indra/newview/llvotextbubble.h
index 45d4df2a7e1845f49431e6ed3912ca12c304d447..7f84dbf631e7e625fb2b2527976da7918d4b31ac 100644
--- a/indra/newview/llvotextbubble.h
+++ b/indra/newview/llvotextbubble.h
@@ -44,7 +44,7 @@ class LLVOTextBubble : public LLAlphaObject
 	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
 	/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
 	/*virtual*/ BOOL		updateLOD();
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 615ae13bc2c40c19e1f75225bf470a8ea95e4b2f..235e10f716fe125c60b7f4433ca64495a939c4f3 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -311,7 +311,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
 	//
 	//  Load Species-Specific data 
 	//
-	mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 	mBranchLength = sSpeciesTable[mSpecies]->mBranchLength;
 	mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength;
 	mLeafScale = sSpeciesTable[mSpecies]->mLeafScale;
@@ -463,7 +463,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)
 #endif
 }
 
-void LLVOTree::updateTextures(LLAgent &agent)
+void LLVOTree::updateTextures()
 {
 	if (mTreeImagep)
 	{
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
index 13817fa111de24a71cec418e4022083eb4fa4f21..feac9e0675e2b1c0a6c9c9ec3e3110e90aa21276 100644
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -69,7 +69,7 @@ class LLVOTree : public LLViewerObject
 	// Graphical stuff for objects - maybe broken out into render class later?
 	/*virtual*/ void render(LLAgent &agent);
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvotreenew.h b/indra/newview/llvotreenew.h
index 3fec5855efe77732f7543758e51f4c610cfc74ba..426470101dee6cf474cf654ff40b08a9e01b31ac 100644
--- a/indra/newview/llvotreenew.h
+++ b/indra/newview/llvotreenew.h
@@ -156,7 +156,7 @@ class LLVOTreeNew : public LLViewerObject
 	/*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 
 	/*virtual*/ void render(LLAgent &agent);
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 
 	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
 	/*virtual*/ BOOL		updateGeometry(LLDrawable *drawable);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 7666009a62d4d5e431f1226b998390873198c786..e38b0c62f3a78d20f083a429e27b3c650c130bb3 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -55,12 +55,10 @@
 #include "lldrawpoolbump.h"
 #include "llface.h"
 #include "llspatialpartition.h"
-
-// TEMP HACK ventrella
 #include "llhudmanager.h"
 #include "llflexibleobject.h"
-
 #include "llsky.h"
+#include "lltexturefetch.h"
 #include "llviewercamera.h"
 #include "llviewertexturelist.h"
 #include "llviewerobjectlist.h"
@@ -78,7 +76,6 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30;
 const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
 const F32 FORCE_CULL_AREA = 8.f;
 const F32 MAX_LOD_DISTANCE = 24.f;
-const S32 MAX_SCULPT_REZ = 128;
 
 
 BOOL gAnimateTextures = TRUE;
@@ -120,6 +117,11 @@ class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
 				if (te->getMediaData() != NULL)
 				{
 					result = te->getMediaData()->asLLSD();
+					// XXX HACK: workaround bug in asLLSD() where whitelist is not set properly
+					if (!result.has(LLMediaEntry::WHITELIST_KEY))
+					{
+						result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
+					}
 				}
 			}
 			return result;
@@ -160,7 +162,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re
 	mRelativeXformInvTrans.setIdentity();
 
 	mLOD = MIN_LOD;
-	mSculptLevel = -2;
+	mMeshSculptLevel = -2;
 	mTextureAnimp = NULL;
 	mVObjRadius = LLVector3(1,1,0.5f).length();
 	mNumFaces = 0;
@@ -573,29 +575,33 @@ BOOL LLVOVolume::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 	return TRUE;
 }
 
-void LLVOVolume::updateTextures(LLAgent &agent)
+void LLVOVolume::updateTextures()
 {
 	const F32 TEXTURE_AREA_REFRESH_TIME = 5.f; // seconds
-	if (mDrawable.notNull() && mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME)
+	if (mTextureUpdateTimer.getElapsedTimeF32() > TEXTURE_AREA_REFRESH_TIME)
 	{
-		if (mDrawable->isVisible())
-		{
-			updateTextures();
-		}
+		updateTextureVirtualSize();		
 	}
 }
 
-void LLVOVolume::updateTextures()
+void LLVOVolume::updateTextureVirtualSize()
 {
 	LLFastTimer ftm(FTM_VOLUME_TEXTURES);
 	// Update the pixel area of all faces
 
+	if(mDrawable.isNull() || !mDrawable->isVisible())
+	{
+		return ;
+	}
+
 	if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE))
 	{
 		return;
 	}
-	
-	if (LLViewerTexture::sDontLoadVolumeTextures || mDrawable.isNull()) // || !mDrawable->isVisible())
+
+	static LLCachedControl<bool> dont_load_textures(gSavedSettings,"TextureDisable");
+		
+	if (dont_load_textures || LLAppViewer::getTextureFetch()->mDebugPause) // || !mDrawable->isVisible())
 	{
 		return;
 	}
@@ -612,14 +618,15 @@ void LLVOVolume::updateTextures()
 		LLFace* face = mDrawable->getFace(i);
 		const LLTextureEntry *te = face->getTextureEntry();
 		LLViewerTexture *imagep = face->getTexture();
-		if (!imagep || !te ||
+		if (!imagep || !te ||			
 			face->mExtents[0] == face->mExtents[1])
 		{
 			continue;
 		}
 		
 		F32 vsize;
-		
+		F32 old_size = face->getVirtualSize();
+
 		if (isHUDAttachment())
 		{
 			F32 area = (F32) LLViewerCamera::getInstance()->getScreenPixelArea();
@@ -629,12 +636,10 @@ void LLVOVolume::updateTextures()
 		}
 		else
 		{
-			vsize = getTextureVirtualSize(face);
+			vsize = face->getTextureVirtualSize();
 		}
 
-		mPixelArea = llmax(mPixelArea, face->getPixelArea());
-
-		F32 old_size = face->getVirtualSize();
+		mPixelArea = llmax(mPixelArea, face->getPixelArea());		
 
 		if (face->mTextureMatrix != NULL)
 		{
@@ -646,7 +651,6 @@ void LLVOVolume::updateTextures()
 		}
 		
 		face->setVirtualSize(vsize);
-		imagep->addTextureStats(vsize);
 		if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA))
 		{
 			if (vsize < min_vsize) min_vsize = vsize;
@@ -680,7 +684,7 @@ void LLVOVolume::updateTextures()
 		if ((sculpt_type & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH)
 			// mesh is a mesh
 		{
-			if (mSculptLevel == -2)
+			if (mMeshSculptLevel == -2)
 			{
 				// get the asset please
 				gPipeline.loadMesh(this, id);
@@ -697,35 +701,47 @@ void LLVOVolume::updateTextures()
 		else
 			// mesh is a sculptie
 		{
-			mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+			mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 
 			if (mSculptTexture.notNull())
 			{
-				S32 lod = llmin(mLOD, 3);
-				F32 lodf = ((F32)(lod + 1.0f)/4.f); 
-				F32 tex_size = lodf * MAX_SCULPT_REZ;
-				mSculptTexture->addTextureStats(2.f * tex_size * tex_size);
 				mSculptTexture->setBoostLevel(llmax((S32)mSculptTexture->getBoostLevel(),
 												(S32)LLViewerTexture::BOOST_SCULPTED));
 				mSculptTexture->setForSculpt() ;
-			}
-
-			S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture
-			S32 current_discard = mSculptLevel;
+			
+				if(!mSculptTexture->isCachedRawImageReady())
+				{
+					S32 lod = llmin(mLOD, 3);
+					F32 lodf = ((F32)(lod + 1.0f)/4.f);
+					F32 tex_size = lodf * LLViewerTexture::sMaxSculptRez ;
+					mSculptTexture->addTextureStats(2.f * tex_size * tex_size, FALSE);
+				
+					//if the sculpty very close to the view point, load first
+					{				
+						LLVector3 lookAt = getPositionAgent() - LLViewerCamera::getInstance()->getOrigin();
+						F32 dist = lookAt.normVec() ;
+						F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;				
+						mSculptTexture->setAdditionalDecodePriority(0.8f * LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist)) ;
+					}
+				}
+	
+				S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture
+				S32 current_discard = getVolume() ? getVolume()->getSculptLevel() : -2 ;
 
-			if (texture_discard >= 0 && //texture has some data available
-				(texture_discard < current_discard || //texture has more data than last rebuild
-				 current_discard < 0)) //no previous rebuild
-			{
-				gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
-				mSculptChanged = TRUE;
-			}
+				if (texture_discard >= 0 && //texture has some data available
+					(texture_discard < current_discard || //texture has more data than last rebuild
+					 current_discard < 0)) //no previous rebuild
+				{
+					gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
+					mSculptChanged = TRUE;
+				}
 
-			if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED))
-			{
-				setDebugText(llformat("T%d C%d V%d\n%dx%d",
-									  texture_discard, current_discard, getVolume()->getSculptLevel(),
-									  mSculptTexture->getHeight(), mSculptTexture->getWidth()));
+				if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED))
+				{
+					setDebugText(llformat("T%d C%d V%d\n%dx%d",
+										  texture_discard, current_discard, getVolume()->getSculptLevel(),
+										  mSculptTexture->getHeight(), mSculptTexture->getWidth()));
+				}
 			}
 		}
 	}
@@ -743,15 +759,15 @@ void LLVOVolume::updateTextures()
 																	*LLViewerCamera::getInstance()));
 		}	
 	}
-
+	
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA))
 	{
 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
 	}
-	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
-	{
-		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
-	}
+ 	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY))
+ 	{
+ 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
+ 	}
 	else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_FACE_AREA))
 	{
 		setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize)));
@@ -763,36 +779,6 @@ void LLVOVolume::updateTextures()
 	}
 }
 
-F32 LLVOVolume::getTextureVirtualSize(LLFace* face)
-{
-	//get area of circle around face
-	LLVector3 center = face->getPositionAgent();
-	LLVector3 size = (face->mExtents[1] - face->mExtents[0]) * 0.5f;
-	
-	F32 face_area = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance());
-
-	face->setPixelArea(face_area);
-
-	if (face_area <= 0)
-	{
-		return 0.f;
-	}
-
-	//get area of circle in texture space
-	LLVector2 tdim = face->mTexExtents[1] - face->mTexExtents[0];
-	F32 texel_area = (tdim * 0.5f).lengthSquared()*3.14159f;
-	if (texel_area <= 0)
-	{
-		// Probably animated, use default
-		texel_area = 1.f;
-	}
-
-	//apply texel area to face area to get accurate ratio
-	face_area /= llclamp(texel_area, 1.f/64.f, 16.f);
-
-	return face_area;
-}
-
 BOOL LLVOVolume::isActive() const
 {
 	return !mStatic || mTextureAnimp || (mVolumeImpl && mVolumeImpl->isActive());
@@ -869,7 +855,6 @@ LLDrawable *LLVOVolume::createDrawable(LLPipeline *pipeline)
 	return mDrawable;
 }
 
-
 BOOL LLVOVolume::setVolume(const LLVolumeParams &params, const S32 detail, bool unique_volume)
 {
 	LLVolumeParams volume_params = params;
@@ -923,12 +908,12 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params, const S32 detail, bool
 				}
 				else
 				{
-					mSculptLevel = 1;
+					mMeshSculptLevel = 1;
 				}
 			}
 			else // otherwise is sculptie
 			{
-				mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+				mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
 
 				if (mSculptTexture.notNull())
 				{
@@ -943,7 +928,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params, const S32 detail, bool
 					{
 						sculpt();
 					}
-					mSculptLevel = getVolume()->getSculptLevel();
 				}
 			}
 		}
@@ -967,32 +951,22 @@ void LLVOVolume::notifyMeshLoaded()
 
 // sculpt replaces generate() for sculpted surfaces
 void LLVOVolume::sculpt()
-{
-	U16 sculpt_height = 0;
-	U16 sculpt_width = 0;
-	S8 sculpt_components = 0;
-	const U8* sculpt_data = NULL;
-
+{	
 	if (mSculptTexture.notNull())
-	{
-		S32 discard_level;
-		S32 desired_discard = 0; // lower discard levels have MUCH less resolution 
-
-		discard_level = desired_discard;
+	{				
+		U16 sculpt_height = 0;
+		U16 sculpt_width = 0;
+		S8 sculpt_components = 0;
+		const U8* sculpt_data = NULL;
+	
+		S32 discard_level = mSculptTexture->getDiscardLevel() ;
+		LLImageRaw* raw_image = mSculptTexture->getCachedRawImage() ;
 		
 		S32 max_discard = mSculptTexture->getMaxDiscardLevel();
 		if (discard_level > max_discard)
 			discard_level = max_discard;    // clamp to the best we can do
 
-		S32 best_discard = mSculptTexture->getDiscardLevel();
-		if (discard_level < best_discard)
-			discard_level = best_discard;   // clamp to what we have
-
-		if (best_discard == -1)
-			discard_level = -1;  // and if we have nothing, set to nothing
-
-		
-		S32 current_discard = getVolume()->getSculptLevel();
+		S32 current_discard = getVolume()->getSculptLevel() ;
 		if(current_discard < -2)
 		{
 			llwarns << "WARNING!!: Current discard of sculpty at " << current_discard 
@@ -1013,18 +987,7 @@ void LLVOVolume::sculpt()
 		if (current_discard == discard_level)  // no work to do here
 			return;
 		
-		LLPointer<LLImageRaw> raw_image = new LLImageRaw();
-		BOOL is_valid = mSculptTexture->readBackRaw(discard_level, raw_image, FALSE);
-
-		sculpt_height = raw_image->getHeight();
-		sculpt_width = raw_image->getWidth();
-		sculpt_components = raw_image->getComponents();		
-
-		if(is_valid)
-		{
-			is_valid = mSculptTexture->isValidForSculpt(discard_level, sculpt_width, sculpt_height, sculpt_components) ;
-		}
-		if(!is_valid)
+		if(!raw_image)
 		{
 			sculpt_width = 0;
 			sculpt_height = 0;
@@ -1036,10 +999,10 @@ void LLVOVolume::sculpt()
 			}
 		}
 		else
-		{
-			if (raw_image->getDataSize() < sculpt_height * sculpt_width * sculpt_components)
-				llerrs << "Sculpt: image data size = " << raw_image->getDataSize()
-					   << " < " << sculpt_height << " x " << sculpt_width << " x " <<sculpt_components << llendl;
+		{					
+			sculpt_height = raw_image->getHeight();
+			sculpt_width = raw_image->getWidth();
+			sculpt_components = raw_image->getComponents();		
 					   
 			sculpt_data = raw_image->getData();
 
@@ -1075,12 +1038,6 @@ BOOL LLVOVolume::calcLOD()
 		return FALSE;
 	}
 
-	//update face texture sizes on lod calculation
-	//if (mDrawable->isVisible())
-	//{
-	//	updateTextures();
-	//}
-
 	S32 cur_detail = 0;
 	
 	F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length();
@@ -1098,7 +1055,7 @@ BOOL LLVOVolume::calcLOD()
 	}
 	
 	// DON'T Compensate for field of view changing on FOV zoom.
-	distance *= 3.14159f/3.f;
+	distance *= F_PI/3.f;
 
 	cur_detail = computeLODDetail(llround(distance, 0.01f), 
 									llround(radius, 0.01f));
@@ -1758,6 +1715,26 @@ bool LLVOVolume::hasMedia() const
 	return result;
 }
 
+LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
+{
+	LLVolume* volume = getVolume();
+	LLVector3 result;
+
+	if (volume && face_id < volume->getNumVolumeFaces())
+	{
+		const LLVolumeFace& face = volume->getVolumeFace(face_id);
+		for (S32 i = 0; i < (S32)face.mVertices.size(); ++i)
+		{
+			result += face.mVertices[i].mNormal;
+		}
+
+		result = volumeDirectionToAgent(result);
+		result.normVec();
+	}
+	
+	return result;
+}
+
 void LLVOVolume::requestMediaDataUpdate()
 {
     sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this));
@@ -1833,6 +1810,10 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
 			
 		addMediaImpl(media_impl, texture_index) ;
 	}
+	else
+	{
+		removeMediaImpl(texture_index);
+	}
 
 	//llinfos << "AFTER: texture_index = " << texture_index
 	//	<< " hasMedia = " << te->hasMedia() << " : " 
@@ -1867,20 +1848,19 @@ void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
 
 bool LLVOVolume::hasMediaPermission(const LLMediaEntry* media_entry, MediaPermType perm_type)
 {
-    // NOTE: This logic duplicates the logic in the server (in particular, in llmediaservice.cpp).
+    // NOTE: This logic ALMOST duplicates the logic in the server (in particular, in llmediaservice.cpp).
     if (NULL == media_entry ) return false; // XXX should we assert here?
     
-    // The agent has permissions to navigate if:
-    // - agent has edit permissions, or
+    // The agent has permissions if:
     // - world permissions are on, or
     // - group permissions are on, and agent_id is in the group, or
     // - agent permissions are on, and agent_id is the owner
     
-    if (permModify()) 
-    {
-        return true;
-    }
-    
+	// *NOTE: We *used* to check for modify permissions here (i.e. permissions were
+	// granted if permModify() was true).  However, this doesn't make sense in the
+	// viewer: we don't want to show controls or allow interaction if the author
+	// has deemed it so.  See DEV-42115.
+	
     U8 media_perms = (perm_type == MEDIA_PERM_INTERACT) ? media_entry->getPermsInteract() : media_entry->getPermsControl();
     
     // World permissions
@@ -2896,7 +2876,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 		if (face == -1)
 		{
 			start_face = 0;
-			end_face = volume->getNumFaces();
+			end_face = volume->getNumVolumeFaces();
 		}
 		else
 		{
@@ -2911,8 +2891,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 			
 			if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit)
 			{
-				LLFace* face = mDrawable->getFace(face_hit);
-			
+				LLFace* face = mDrawable->getFace(face_hit);				
+
 				if (pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n)))
 				{
 					v_end = p;
@@ -3159,7 +3139,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 
 		LLVOVolume* vobj = drawablep->getVOVolume();
 		llassert_always(vobj);
-		vobj->updateTextures();
+		vobj->updateTextureVirtualSize();
 		vobj->preRebuild();
 
 		drawablep->clearState(LLDrawable::HAS_ALPHA);
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 9253b1b16e5bc1ee888baafbf846e4e3bfe0b918..9b8248e4f24401f21a1120634025c8b8f7304636 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -139,7 +139,7 @@ class LLVOVolume : public LLViewerObject
 
 				
 				BOOL	getVolumeChanged() const				{ return mVolumeChanged; }
-				F32		getTextureVirtualSize(LLFace* face);
+				
 	/*virtual*/ F32  	getRadius() const						{ return mVObjRadius; };
 				const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const;
 
@@ -192,8 +192,8 @@ class LLVOVolume : public LLViewerObject
 	/*virtual*/ void	updateFaceSize(S32 idx);
 	/*virtual*/ BOOL	updateLOD();
 				void	updateRadius();
-	/*virtual*/ void	updateTextures(LLAgent &agent);
-				void	updateTextures();
+	/*virtual*/ void	updateTextures();
+				void	updateTextureVirtualSize();
 
 				void	updateFaceFlags();
 				void	regenFaces();
@@ -270,6 +270,8 @@ class LLVOVolume : public LLViewerObject
 	F64 getTotalMediaInterest() const;
    
 	bool hasMedia() const;
+	
+	LLVector3 getApproximateFaceNormal(U8 face_id);
 
 	void notifyMeshLoaded();
 
@@ -293,7 +295,7 @@ class LLVOVolume : public LLViewerObject
 	LLFrameTimer mTextureUpdateTimer;
 	S32			mLOD;
 	BOOL		mLODChanged;
-	S32         mSculptLevel;
+	S32         mMeshSculptLevel;
 	BOOL		mSculptChanged;
 	F32			mSpotLightPriority;
 	LLMatrix4	mRelativeXform;
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 0c967f9020c4580cebaa026f399e74a5e484976a..a8c4625f6ed8a5a58d738bc9478819d034351d17 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -55,8 +55,6 @@ const BOOL gUseRoam = FALSE;
 
 ///////////////////////////////////
 
-#include "randgauss.h"
-
 template<class T> inline T LERP(T a, T b, F32 factor)
 {
 	return a + (b - a) * factor;
@@ -100,7 +98,7 @@ void LLVOWater::setPixelAreaAndAngle(LLAgent &agent)
 
 
 // virtual
-void LLVOWater::updateTextures(LLAgent &agent)
+void LLVOWater::updateTextures()
 {
 }
 
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
index 28a5633c58ecf8b14321df75965cead93d1ff026..3cc031e589a63d530096d941d0dda2ef7a42439c 100644
--- a/indra/newview/llvowater.h
+++ b/indra/newview/llvowater.h
@@ -68,7 +68,7 @@ class LLVOWater : public LLStaticViewerObject
 	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
 	/*virtual*/ void		updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
 
-	/*virtual*/ void updateTextures(LLAgent &agent);
+	/*virtual*/ void updateTextures();
 	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
 
 	virtual U32 getPartitionType() const;
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 8621e5e1d9218b46d9a4cb21f010807f85682e78..d3238f16a8aa62ded405f7e4d2e325e74c718449 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -49,12 +49,12 @@ const U32 LLVOWLSky::MAX_SKY_DETAIL = 180;
 
 inline U32 LLVOWLSky::getNumStacks(void)
 {
-	return gSavedSettings.getU32("WLSkyDetail");
+	return llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getNumSlices(void)
 {
-	return 2 * gSavedSettings.getU32("WLSkyDetail");
+	return 2 * llmin(MAX_SKY_DETAIL, llmax(MIN_SKY_DETAIL, gSavedSettings.getU32("WLSkyDetail")));
 }
 
 inline U32 LLVOWLSky::getFanNumVerts(void)
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 4cd29bb83866a8365a1ba2c4fc450cb908b704ae..3185ee45bfe1ae2f69526a409e1a4a128ea06727 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -60,7 +60,7 @@ static std::string asset_id_to_filename(const LLUUID &asset_id);
 
 LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 	mDefinitionVersion(LLWearable::sCurrentDefinitionVersion),
-	mType(WT_SHAPE)
+	mType(WT_INVALID)
 {
 	mTransactionID = transaction_id;
 	mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
@@ -68,7 +68,7 @@ LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 
 LLWearable::LLWearable(const LLAssetID& asset_id) :
 	mDefinitionVersion( LLWearable::sCurrentDefinitionVersion ),
-	mType(WT_SHAPE)
+	mType(WT_INVALID)
 {
 	mAssetID = asset_id;
 	mTransactionID.setNull();
@@ -181,13 +181,7 @@ void LLWearable::createVisualParams()
 	{
 		if (param->getWearableType() == mType)
 		{
-			if (mVisualParamIndexMap[param->getID()])
-			{
-				delete mVisualParamIndexMap[param->getID()];
-			}
-			LLViewerVisualParam *new_param = param->cloneParam(this);
-			new_param->setIsDummy(FALSE);
-			mVisualParamIndexMap[param->getID()] = new_param;
+			addVisualParam(param->cloneParam(this));
 		}
 	}
 
@@ -661,7 +655,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
 			{	
 				image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
 			}
-			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE );
+			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
 			// MULTI-WEARABLE: replace hard-coded 0
 			avatar->setLocalTextureTE(te, image, set_by_user, 0);
 		}
@@ -680,8 +674,6 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
 		avatar->updateSexDependentLayerSets( set_by_user );
 	}	
 	
-	avatar->updateMeshTextures();
-
 //	if( set_by_user )
 //	{
 //		gAgent.sendAgentSetAppearance();
@@ -725,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
 	}
 
 	avatar->updateVisualParams();
-	avatar->updateMeshTextures();
+	avatar->wearableUpdated(type);
 
 //	if( set_by_user )
 //	{
@@ -750,7 +742,8 @@ void LLWearable::copyDataFrom(const LLWearable* src)
 	mDescription = src->mDescription;
 	mPermissions = src->mPermissions;
 	mSaleInfo = src->mSaleInfo;
-	mType = src->mType;
+
+	setType(src->mType);
 
 	mSavedVisualParamMap.clear();
 	// Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed)
@@ -763,9 +756,6 @@ void LLWearable::copyDataFrom(const LLWearable* src)
 			S32 id = param->getID();
 			F32 weight = src->getVisualParamWeight(id);
 			mSavedVisualParamMap[id] = weight;
-			
-			// Clones a visual param from src and adds it to this wearable. Value of param is taken from current value of source param, not saved.
-			addVisualParam(param->cloneParam(this));
 		}
 	}
 
@@ -860,6 +850,7 @@ void LLWearable::addVisualParam(LLVisualParam *param)
 	{
 		delete mVisualParamIndexMap[param->getID()];
 	}
+	param->setIsDummy(FALSE);
 	mVisualParamIndexMap[param->getID()] = param;
 }
 
@@ -1123,7 +1114,7 @@ void LLWearable::saveNewAsset() const
 		{
 			llinfos << "Update Agent Inventory via capability" << llendl;
 			LLSD body;
-			body["folder_id"] = gInventory.findCategoryUUIDForType(getAssetType());
+			body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType()));
 			body["asset_type"] = LLAssetType::lookup(getAssetType());
 			body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE);
 			body["name"] = getName();
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index da62223aac203da585296d1f9e1623d225df771b..9bde85dcaf8629984c6d552d20878815e3fe3a15 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -69,6 +69,11 @@ struct LLWearableArrivedData
 // LLWearableList
 
 LLWearableList::~LLWearableList()
+{
+	llassert_always(mList.empty()) ;
+}
+
+void LLWearableList::cleanup() 
 {
 	for_each(mList.begin(), mList.end(), DeletePairedPointer());
 	mList.clear();
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
index e5155c66a4b47ae9f5d1b4e4ecd6ae0c16891e74..cf1a9bddff62db7c13717a5f21605736b5db6737 100644
--- a/indra/newview/llwearablelist.h
+++ b/indra/newview/llwearablelist.h
@@ -44,6 +44,7 @@ class LLWearableList : public LLSingleton<LLWearableList>
 public:
 	LLWearableList()	{}
 	~LLWearableList();
+	void cleanup() ;
 
 	S32					getLength() const { return mList.size(); }
 
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 3204c2d264208624c1c6b8fb53fa28b3901e5ec0..72431bd22f2c7aa148e031cb0bcc617bf19c5f03 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -43,8 +43,9 @@
 #include "llfloatermediabrowser.h"
 #include "llfloaterreg.h"
 #include "llalertdialog.h"
+#include "lltoastalertpanel.h"
 
-class URLLoader : public LLAlertDialog::URLLoader
+class URLLoader : public LLAlertURLLoader
 {
 	virtual void load(const std::string& url , bool force_open_externally)
 	{
@@ -65,6 +66,7 @@ static URLLoader sAlertURLLoader;
 void LLWeb::initClass()
 {
 	LLAlertDialog::setURLLoader(&sAlertURLLoader);
+	LLToastAlertPanel::setURLLoader(&sAlertURLLoader);
 }
 
 
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 1581153c19979aa0a094cafb9a709e0e2fb40ee6..c6fd35c1422522bec6160efcd86c63fbea01b1c3 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -196,7 +196,7 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
 	escaped_filename += ".xml";
 
 	std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
-	llinfos << "Loading WindLight sky setting from " << pathName << llendl;
+	//llinfos << "Loading WindLight sky setting from " << pathName << llendl;
 
 	llifstream presetsXML;
 	presetsXML.open(pathName.c_str());
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index f198f3a0cf531b8984cd0004aca2f3fc17a8ab7a..66cb02ce99b585fcb7d32148873d396b55c68f97 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -34,57 +34,81 @@
 
 #include "llworldmap.h"
 
-#include "llregionhandle.h"
+#include "llworldmapmessage.h"
 #include "message.h"
-
-#include "llagent.h"
-#include "llmapresponders.h"
-#include "llviewercontrol.h"
-#include "llfloaterworldmap.h"
 #include "lltracker.h"
 #include "llviewertexturelist.h"
-#include "llviewerregion.h"
-#include "llregionflags.h"
 #include "lltrans.h"
 
-const F32 REQUEST_ITEMS_TIMER =  10.f * 60.f; // 10 minutes
+// Timers to temporise database requests
+const F32 AGENTS_UPDATE_TIMER = 60.0;			// Seconds between 2 agent requests for a region
+const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f;	// Seconds before we consider re-requesting item data for the grid
+
+//---------------------------------------------------------------------------
+// LLItemInfo
+//---------------------------------------------------------------------------
 
-// For DEV-17507, do lazy image loading in llworldmapview.cpp instead,
-// limiting requests to currently visible regions and minimizing the
-// number of textures being requested simultaneously.
-//
-// Uncomment IMMEDIATE_IMAGE_LOAD to restore the old behavior
-//
-//#define IMMEDIATE_IMAGE_LOAD
 LLItemInfo::LLItemInfo(F32 global_x, F32 global_y,
 					   const std::string& name, 
-					   LLUUID id,
-					   S32 extra, S32 extra2)
+					   LLUUID id)
 :	mName(name),
 	mToolTip(""),
 	mPosGlobal(global_x, global_y, 40.0),
 	mID(id),
-	mSelected(FALSE),
-	mExtra(extra),
-	mExtra2(extra2)
+	mCount(1)
+//	mSelected(false)
+//	mColor()
 {
-	mRegionHandle = to_region_handle(mPosGlobal);
 }
 
-LLSimInfo::LLSimInfo()
-:	mHandle(0),
+//---------------------------------------------------------------------------
+// LLSimInfo
+//---------------------------------------------------------------------------
+
+LLSimInfo::LLSimInfo(U64 handle)
+:	mHandle(handle),
 	mName(),
 	mAgentsUpdateTime(0),
-	mShowAgentLocations(FALSE),
 	mAccess(0x0),
 	mRegionFlags(0x0),
-	mWaterHeight(0.f),
-	mAlpha(-1.f)
+	mFirstAgentRequest(true)
+//	mWaterHeight(0.f)
+{
+}
+
+void LLSimInfo::setLandForSaleImage (LLUUID image_id) 
 {
+	mMapImageID = image_id;
+
+	// Fetch the image
+	if (mMapImageID.notNull())
+	{
+		mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
+		mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
+	}
+	else
+	{
+		mOverlayImage = NULL;
+	}
 }
 
+LLPointer<LLViewerFetchedTexture> LLSimInfo::getLandForSaleImage () 
+{
+	if (mOverlayImage.isNull() && mMapImageID.notNull())
+	{
+		// Fetch the image if it hasn't been done yet (unlikely but...)
+		mOverlayImage = LLViewerTextureManager::getFetchedTexture(mMapImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
+		mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
+	}
+	if (!mOverlayImage.isNull())
+	{
+		// Boost the fetch level when we try to access that image
+		mOverlayImage->setBoostLevel(LLViewerTexture::BOOST_MAP);
+	}
+	return mOverlayImage;
+}
 
-LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
+LLVector3d LLSimInfo::getGlobalPos(const LLVector3& local_pos) const
 {
 	LLVector3d pos = from_region_handle(mHandle);
 	pos.mdV[VX] += local_pos.mV[VX];
@@ -93,128 +117,184 @@ LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
 	return pos;
 }
 
+LLVector3d LLSimInfo::getGlobalOrigin() const
+{
+	return from_region_handle(mHandle);
+}
 LLVector3 LLSimInfo::getLocalPos(LLVector3d global_pos) const
 {
 	LLVector3d sim_origin = from_region_handle(mHandle);
 	return LLVector3(global_pos - sim_origin);
 }
 
+void LLSimInfo::clearImage()
+{
+	if (!mOverlayImage.isNull())
+	{
+		mOverlayImage->setBoostLevel(0);
+		mOverlayImage = NULL;
+	}
+}
 
-
-//---------------------------------------------------------------------------
-// World Map
-//---------------------------------------------------------------------------
-
-LLWorldMap::LLWorldMap() :
-	mIsTrackingUnknownLocation( FALSE ),
-	mInvalidLocation( FALSE ),
-	mIsTrackingDoubleClick( FALSE ),
-	mIsTrackingCommit( FALSE ),
-	mUnknownLocation( 0, 0, 0 ),
-	mRequestLandForSale(true),
-	mCurrentMap(0),
-	mMinX(U32_MAX),
-	mMaxX(U32_MIN),
-	mMinY(U32_MAX),
-	mMaxY(U32_MIN),
-	mNeighborMap(NULL),
-	mTelehubCoverageMap(NULL),
-	mNeighborMapWidth(0),
-	mNeighborMapHeight(0),
-	mSLURLRegionName(),
-	mSLURLRegionHandle(0),
-	mSLURL(),
-	mSLURLCallback(0),
-	mSLURLTeleport(false)
-{
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+void LLSimInfo::dropImagePriority()
+{
+	if (!mOverlayImage.isNull())
 	{
-		mMapLoaded[map] = FALSE;
-		mMapBlockLoaded[map] = new BOOL[MAP_BLOCK_RES*MAP_BLOCK_RES];
-		for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
-		{
-			mMapBlockLoaded[map][idx] = FALSE;
-		}
+		mOverlayImage->setBoostLevel(0);
 	}
 }
 
+// Update the agent count for that region
+void LLSimInfo::updateAgentCount(F64 time)
+{
+	if ((time - mAgentsUpdateTime > AGENTS_UPDATE_TIMER) || mFirstAgentRequest)
+	{
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, mHandle);
+		mAgentsUpdateTime = time;
+		mFirstAgentRequest = false;
+	}
+}
 
-LLWorldMap::~LLWorldMap()
+// Get the total agents count
+const S32 LLSimInfo::getAgentCount() const
 {
-	reset();
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+	S32 total_agent_count = 0;
+	for (LLSimInfo::item_info_list_t::const_iterator it = mAgentLocations.begin(); it != mAgentLocations.end(); ++it)
 	{
-		delete[] mMapBlockLoaded[map];
+		total_agent_count += it->getCount();
 	}
+	return total_agent_count;
 }
 
+bool LLSimInfo::isName(const std::string& name) const
+{
+	return (LLStringUtil::compareInsensitive(name, mName) == 0);
+}
 
-void LLWorldMap::reset()
+void LLSimInfo::dump() const
 {
-	for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer());
-	mSimInfoMap.clear();
+	U32 x_pos, y_pos;
+	from_region_handle(mHandle, &x_pos, &y_pos);
+
+	LL_INFOS("World Map") << x_pos << "," << y_pos
+		<< " " << mName 
+		<< " " << (S32)mAccess
+		<< " " << std::hex << mRegionFlags << std::dec
+//		<< " " << mWaterHeight
+		<< LL_ENDL;
+}
+
+void LLSimInfo::clearItems()
+{
+	mTelehubs.clear();
+	mInfohubs.clear();
+	mPGEvents.clear();
+	mMatureEvents.clear();
+	mAdultEvents.clear();
+	mLandForSale.clear();
+	mLandForSaleAdult.clear();
+//  We persist the agent count though as it is updated on a frequent basis
+// 	mAgentLocations.clear();
+}
+
+void LLSimInfo::insertAgentLocation(const LLItemInfo& item) 
+{
+	std::string name = item.getName();
 
-	for (S32 m=0; m<MAP_SIM_IMAGE_TYPES; ++m)
+	// Find the last item in the list with a different name and erase them
+	item_info_list_t::iterator lastiter;
+	for (lastiter = mAgentLocations.begin(); lastiter != mAgentLocations.end(); ++lastiter)
+	{
+		LLItemInfo& info = *lastiter;
+		if (info.isName(name))
+		{
+			break;
+		}
+	}
+	if (lastiter != mAgentLocations.begin())
 	{
-		mMapLoaded[m] = FALSE;
+		mAgentLocations.erase(mAgentLocations.begin(), lastiter);
 	}
 
+	// Now append the new location
+	mAgentLocations.push_back(item); 
+}
+
+//---------------------------------------------------------------------------
+// World Map
+//---------------------------------------------------------------------------
+
+LLWorldMap::LLWorldMap() :
+	mIsTrackingLocation( false ),
+	mIsTrackingFound( false ),
+	mIsInvalidLocation( false ),
+	mIsTrackingDoubleClick( false ),
+	mIsTrackingCommit( false ),
+	mTrackingLocation( 0, 0, 0 ),
+	mFirstRequest(true)
+{
+	//LL_INFOS("World Map") << "Creating the World Map -> LLWorldMap::LLWorldMap()" << LL_ENDL;
+	mMapBlockLoaded = new bool[MAP_BLOCK_RES*MAP_BLOCK_RES];
 	clearSimFlags();
-	
-	eraseItems();
+}
 
-	mMinX = U32_MAX;
-	mMaxX = U32_MIN;
 
-	mMinY = U32_MAX;
-	mMaxY = U32_MIN;
+LLWorldMap::~LLWorldMap()
+{
+	//LL_INFOS("World Map") << "Destroying the World Map -> LLWorldMap::~LLWorldMap()" << LL_ENDL;
+	reset();
+	delete[] mMapBlockLoaded;
+}
 
-	delete [] mNeighborMap;
-	mNeighborMap = NULL;
-	delete [] mTelehubCoverageMap;
-	mTelehubCoverageMap = NULL;
 
-	mNeighborMapWidth = 0;
-	mNeighborMapHeight = 0;
+void LLWorldMap::reset()
+{
+	clearItems(true);		// Clear the items lists
+	clearImageRefs();		// Clear the world mipmap and the land for sale tiles
+	clearSimFlags();		// Clear the block info flags array 
 
-	for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
-	{
-		mMapLayers[i].clear();
-	}
+	// Finally, clear the region map itself
+	for_each(mSimInfoMap.begin(), mSimInfoMap.end(), DeletePairedPointer());
+	mSimInfoMap.clear();
 }
 
-void LLWorldMap::eraseItems()
+// Returns true if the items have been cleared
+bool LLWorldMap::clearItems(bool force)
 {
-	if (mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER)
+	bool clear = false;
+	if ((mRequestTimer.getElapsedTimeF32() > REQUEST_ITEMS_TIMER) || mFirstRequest || force)
 	{
 		mRequestTimer.reset();
 
-		mTelehubs.clear();
-		mInfohubs.clear();
-		mPGEvents.clear();
-		mMatureEvents.clear();
-		mAdultEvents.clear();
-		mLandForSale.clear();
+		LLSimInfo* sim_info = NULL;
+		for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+		{
+			sim_info = it->second;
+			if (sim_info)
+			{
+				sim_info->clearItems();
+			}
+		}
+		clear = true;
+		mFirstRequest = false;
 	}
-// 	mAgentLocationsMap.clear(); // persists
-// 	mNumAgents.clear(); // persists
+	return clear;
 }
 
-
 void LLWorldMap::clearImageRefs()
 {
+	// We clear the reference to the images we're holding.
+	// Images hold by the world mipmap first
+	mWorldMipmap.reset();
+
+	// Images hold by the region map
+	LLSimInfo* sim_info = NULL;
 	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		LLSimInfo* info = (*it).second;
-		if (info->mCurrentImage)
-		{
-			info->mCurrentImage->setBoostLevel(0);
-			info->mCurrentImage = NULL;
-		}
-		if (info->mOverlayImage)
+		sim_info = it->second;
+		if (sim_info)
 		{
-			info->mOverlayImage->setBoostLevel(0);
-			info->mOverlayImage = NULL;
+			sim_info->clearImage();
 		}
 	}
 }
@@ -222,15 +302,25 @@ void LLWorldMap::clearImageRefs()
 // Doesn't clear the already-loaded sim infos, just re-requests them
 void LLWorldMap::clearSimFlags()
 {
-	for (S32 map=0; map<MAP_SIM_IMAGE_TYPES; ++map)
+	for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
 	{
-		for (S32 idx=0; idx<MAP_BLOCK_RES*MAP_BLOCK_RES; ++idx)
-		{
-			mMapBlockLoaded[map][idx] = FALSE;
-		}
+		mMapBlockLoaded[idx] = false;
 	}
 }
 
+LLSimInfo* LLWorldMap::createSimInfoFromHandle(const U64 handle)
+{
+	LLSimInfo* sim_info = new LLSimInfo(handle);
+	mSimInfoMap[handle] = sim_info;
+	return sim_info;
+}
+
+void LLWorldMap::equalizeBoostLevels()
+{
+	mWorldMipmap.equalizeBoostLevels();
+	return;
+}
+
 LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global)
 {
 	U64 handle = to_region_handle(pos_global);
@@ -242,11 +332,7 @@ LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
 	sim_info_map_t::iterator it = mSimInfoMap.find(handle);
 	if (it != mSimInfoMap.end())
 	{
-		LLSimInfo* sim_info = (*it).second;
-		if (sim_info)
-		{
-			return sim_info;
-		}
+		return it->second;
 	}
 	return NULL;
 }
@@ -257,762 +343,273 @@ LLSimInfo* LLWorldMap::simInfoFromName(const std::string& sim_name)
 	LLSimInfo* sim_info = NULL;
 	if (!sim_name.empty())
 	{
-		for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+		// Iterate through the entire sim info map and compare the name
+		sim_info_map_t::iterator it;
+		for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 		{
-			sim_info = (*it).second;
-			if (sim_info
-				&& (0 == LLStringUtil::compareInsensitive(sim_name, sim_info->mName)) )
+			sim_info = it->second;
+			if (sim_info && sim_info->isName(sim_name) )
 			{
+				// break out of loop if success
 				break;
 			}
-			sim_info = NULL;
 		}
+		// If we got to the end, we haven't found the sim. Reset the ouput value to NULL.
+		if (it == mSimInfoMap.end())
+			sim_info = NULL;
 	}
 	return sim_info;
 }
 
 bool LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global, std::string & outSimName )
 {
-	bool gotSimName = true;
+	LLSimInfo* sim_info = simInfoFromPosGlobal(pos_global);
 
-	U64 handle = to_region_handle(pos_global);
-
-	sim_info_map_t::iterator it = mSimInfoMap.find(handle);
-	if (it != mSimInfoMap.end())
+	if (sim_info)
 	{
-		LLSimInfo* info = (*it).second;
-		outSimName = info->mName;
+		outSimName = sim_info->getName();
 	}
 	else
 	{
-		gotSimName = false;
 		outSimName = "(unknown region)";
 	}
 
-	return gotSimName;
+	return (sim_info != NULL);
 }
 
-void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
+void LLWorldMap::reloadItems(bool force)
 {
-	mCurrentMap = layer;
-	if (!mMapLoaded[layer] || request_layer)
+	//LL_INFOS("World Map") << "LLWorldMap::reloadItems()" << LL_ENDL;
+	if (clearItems(force))
 	{
-		sendMapLayerRequest();
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_TELEHUB);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_PG_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_MATURE_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_ADULT_EVENT);
+		LLWorldMapMessage::getInstance()->sendItemRequest(MAP_ITEM_LAND_FOR_SALE);
 	}
-
-	if (mTelehubs.size() == 0 ||
-		mInfohubs.size() == 0)
-	{
-		// Request for telehubs
-		sendItemRequest(MAP_ITEM_TELEHUB);
-	}
-
-	if (mPGEvents.size() == 0)
-	{
-		// Request for events
-		sendItemRequest(MAP_ITEM_PG_EVENT);
-	}
-
-	if (mMatureEvents.size() == 0)
-	{
-		// Request for events (mature)
-		sendItemRequest(MAP_ITEM_MATURE_EVENT);
-	}
-
-	if (mAdultEvents.size() == 0)
-	{
-		// Request for events (adult)
-		sendItemRequest(MAP_ITEM_ADULT_EVENT);
-	}
-
-	if (mLandForSale.size() == 0)
-	{
-		// Request for Land For Sale
-		sendItemRequest(MAP_ITEM_LAND_FOR_SALE);
-	}
-	
-	if (mLandForSaleAdult.size() == 0)
-	{
-		// Request for Land For Sale
-		sendItemRequest(MAP_ITEM_LAND_FOR_SALE_ADULT);
-	}
-
-	clearImageRefs();
-	clearSimFlags();
 }
 
-void LLWorldMap::sendItemRequest(U32 type, U64 handle)
-{
-	LLMessageSystem* msg = gMessageSystem;
-	S32 layer = mCurrentMap;
-
-	msg->newMessageFast(_PREHASH_MapItemRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addU32Fast(_PREHASH_Flags, layer);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-
-	msg->nextBlockFast(_PREHASH_RequestData);
-	msg->addU32Fast(_PREHASH_ItemType, type);
-	msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim
-
-	gAgent.sendReliableMessage();
-}
 
-// public
-void LLWorldMap::sendMapLayerRequest()
+// static public
+// Insert a region in the region map
+// returns true if region inserted, false otherwise
+bool LLWorldMap::insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& image_id, U32 accesscode, U32 region_flags)
 {
-	if (!gAgent.getRegion()) return;
-
-	LLSD body;
-	body["Flags"] = mCurrentMap;
-	std::string url = gAgent.getRegion()->getCapability(
-		gAgent.isGodlike() ? "MapLayerGod" : "MapLayer");
-
-	if (!url.empty())
+	// This region doesn't exist
+	if (accesscode == 255)
 	{
-		llinfos << "LLWorldMap::sendMapLayerRequest via capability" << llendl;
-		LLHTTPClient::post(url, body, new LLMapLayerResponder());
+		// Checks if the track point is in it and invalidates it if it is
+		if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS))
+		{
+			LLWorldMap::getInstance()->setTrackingInvalid();
+		}
+		// return failure to insert
+		return false;
 	}
 	else
 	{
-		llinfos << "LLWorldMap::sendMapLayerRequest via message system" << llendl;
-		LLMessageSystem* msg = gMessageSystem;
-		S32 layer = mCurrentMap;
-
-		// Request for layer
-		msg->newMessageFast(_PREHASH_MapLayerRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addU32Fast(_PREHASH_Flags, layer);
-		msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-		msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-		gAgent.sendReliableMessage();
-
-		if (mRequestLandForSale)
+		U64 handle = to_region_handle(x_world, y_world);
+ 		//LL_INFOS("World Map") << "Map sim : " << name << ", ID : " << image_id.getString() << LL_ENDL;
+		// Insert the region in the region map of the world map
+		// Loading the LLSimInfo object with what we got and insert it in the map
+		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if (siminfo == NULL)
 		{
-			msg->newMessageFast(_PREHASH_MapLayerRequest);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->addU32Fast(_PREHASH_Flags, 2);
-			msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-			msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-			gAgent.sendReliableMessage();
+			siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
 		}
+		siminfo->setName(name);
+		siminfo->setAccess(accesscode);
+		siminfo->setRegionFlags(region_flags);
+	//	siminfo->setWaterHeight((F32) water_height);
+		siminfo->setLandForSaleImage(image_id);
+
+		// Handle the location tracking (for teleport, UI feedback and info display)
+		if (LLWorldMap::getInstance()->isTrackingInRectangle( x_world, y_world, x_world + REGION_WIDTH_UNITS, y_world + REGION_WIDTH_UNITS))
+		{
+			if (siminfo->isDown())
+			{
+				// We were tracking this location, but it's no available
+				LLWorldMap::getInstance()->setTrackingInvalid();
+			}
+			else
+			{
+				// We were tracking this location, and it does exist and is available
+				LLWorldMap::getInstance()->setTrackingValid();
+			}
+		}
+		// return insert region success
+		return true;
 	}
 }
 
-// public
-void LLWorldMap::sendNamedRegionRequest(std::string region_name)
-{
-	LLMessageSystem* msg = gMessageSystem;
-	S32 layer = mCurrentMap;
-
-	// Request for layer
-	msg->newMessageFast(_PREHASH_MapNameRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addU32Fast(_PREHASH_Flags, layer);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-	msg->nextBlockFast(_PREHASH_NameData);
-	msg->addStringFast(_PREHASH_Name, region_name);
-	gAgent.sendReliableMessage();
-}
-// public
-void LLWorldMap::sendNamedRegionRequest(std::string region_name, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport)	// immediately teleport when result returned
-{
-	mSLURLRegionName = region_name;
-	mSLURLRegionHandle = 0;
-	mSLURL = callback_url;
-	mSLURLCallback = callback;
-	mSLURLTeleport = teleport;
-
-	sendNamedRegionRequest(region_name);
-}
-
-void LLWorldMap::sendHandleRegionRequest(U64 region_handle, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport)	// immediately teleport when result returned
-{
-	mSLURLRegionName.clear();
-	mSLURLRegionHandle = region_handle;
-	mSLURL = callback_url;
-	mSLURLCallback = callback;
-	mSLURLTeleport = teleport;
-
-	U32 global_x;
-	U32 global_y;
-	from_region_handle(region_handle, &global_x, &global_y);
-	U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
-	U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
-	
-	sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
-}
-
-// public
-void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
-{
-	S32 layer = mCurrentMap;
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_MapBlockRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	U32 flags = layer;
-	flags |= (return_nonexistent ? 0x10000 : 0);
-	msg->addU32Fast(_PREHASH_Flags, flags);
-	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-	msg->nextBlockFast(_PREHASH_PositionData);
-	msg->addU16Fast(_PREHASH_MinX, min_x);
-	msg->addU16Fast(_PREHASH_MinY, min_y);
-	msg->addU16Fast(_PREHASH_MaxX, max_x);
-	msg->addU16Fast(_PREHASH_MaxY, max_y);
-	gAgent.sendReliableMessage();
-
-	if (mRequestLandForSale)
-	{
-		msg->newMessageFast(_PREHASH_MapBlockRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-		msg->addU32Fast(_PREHASH_Flags, 2);
-		msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
-		msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
-		msg->nextBlockFast(_PREHASH_PositionData);
-		msg->addU16Fast(_PREHASH_MinX, min_x);
-		msg->addU16Fast(_PREHASH_MinY, min_y);
-		msg->addU16Fast(_PREHASH_MaxX, max_x);
-		msg->addU16Fast(_PREHASH_MaxY, max_y);
-		gAgent.sendReliableMessage();
-	}
-}
-
-// public static
-void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
+// static public
+// Insert an item in the relevant region map
+// returns true if item inserted, false otherwise
+bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2)
 {
-	llinfos << "LLWorldMap::processMapLayerReply from message system" << llendl;
-
-	U32 agent_flags;
-	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
-
-	if (agent_flags != (U32)LLWorldMap::getInstance()->mCurrentMap)
-	{
-		llwarns << "Invalid or out of date map image type returned!" << llendl;
-		return;
-	}
+	// Create an item record for the received object
+	LLItemInfo new_item((F32)x_world, (F32)y_world, name, uuid);
 
-	LLUUID image_id;
-	//U32 left, right, top, bottom;
+	// Compute a region handle based on the objects coordinates
+	LLVector3d	pos((F32)x_world, (F32)y_world, 40.0);
+	U64 handle = to_region_handle(pos);
 
-	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_LayerData);
-
-	LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
-
-	BOOL adjust = FALSE;
-	for (S32 block=0; block<num_blocks; ++block)
+	// Get the region record for that handle or NULL if we haven't browsed it yet
+	LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+	if (siminfo == NULL)
 	{
-		LLWorldMapLayer new_layer;
-		new_layer.LayerDefined = TRUE;
-		msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block);
-		new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-
-		gGL.getTexUnit(0)->bind(new_layer.LayerImage);
-		new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-		
-		U32 left, right, top, bottom;
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Left, left, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Right, right, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block);
-		msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block);
-
-		new_layer.LayerExtents.mLeft = left;
-		new_layer.LayerExtents.mRight = right;
-		new_layer.LayerExtents.mBottom = bottom;
-		new_layer.LayerExtents.mTop = top;
-
-		F32 x_meters = F32(left*REGION_WIDTH_UNITS);
-		F32 y_meters = F32(bottom*REGION_WIDTH_UNITS);
-		adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters), 
-							   U32(x_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getWidth()),
-							   U32(y_meters+REGION_WIDTH_UNITS*new_layer.LayerExtents.getHeight())) || adjust;
-
-		LLWorldMap::getInstance()->mMapLayers[agent_flags].push_back(new_layer);
+		siminfo = LLWorldMap::getInstance()->createSimInfoFromHandle(handle);
 	}
 
-	LLWorldMap::getInstance()->mMapLoaded[agent_flags] = TRUE;
-	if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
-}
-
-// public static
-void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
-{
-	U32 agent_flags;
-	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
-
-	if ((S32)agent_flags < 0 || agent_flags >= MAP_SIM_IMAGE_TYPES)
+	//LL_INFOS("World Map") << "Process item : type = " << type << LL_ENDL;
+	switch (type)
 	{
-		llwarns << "Invalid map image type returned! " << agent_flags << llendl;
-		return;
-	}
-
-	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
-
-	bool found_null_sim = false;
-
-	BOOL adjust = FALSE;
-	for (S32 block=0; block<num_blocks; ++block)
-	{
-		U16 x_regions;
-		U16 y_regions;
-		std::string name;
-		U8 accesscode;
-		U32 region_flags;
-		U8 water_height;
-		U8 agents;
-		LLUUID image_id;
-		msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
-		msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
-		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
-		msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
-		msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
-
-		U32 x_meters = x_regions * REGION_WIDTH_UNITS;
-		U32 y_meters = y_regions * REGION_WIDTH_UNITS;
-
-		U64 handle = to_region_handle(x_meters, y_meters);
-
-		if (accesscode == 255)
-		{
-			// This region doesn't exist
-			if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
-			{
-				// We were tracking this location, but it doesn't exist
-				LLWorldMap::getInstance()->mInvalidLocation = TRUE;
-			}
-
-			found_null_sim = true;
-		}
-		else
+		case MAP_ITEM_TELEHUB: // telehubs
 		{
-			adjust = LLWorldMap::getInstance()->extendAABB(x_meters, 
-										y_meters, 
-										x_meters+REGION_WIDTH_UNITS,
-										y_meters+REGION_WIDTH_UNITS) || adjust;
-
-// 			llinfos << "Map sim " << name << " image layer " << agent_flags << " ID " << image_id.getString() << llendl;
-			
-			LLSimInfo* siminfo = new LLSimInfo();
-			sim_info_map_t::iterator iter = LLWorldMap::getInstance()->mSimInfoMap.find(handle);
-			if (iter != LLWorldMap::getInstance()->mSimInfoMap.end())
-			{
-				LLSimInfo* oldinfo = iter->second;
-				for (S32 image=0; image<MAP_SIM_IMAGE_TYPES; ++image)
-				{
-					siminfo->mMapImageID[image] = oldinfo->mMapImageID[image];
-				}
-				delete oldinfo;
-			}
-			LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
-
-			siminfo->mHandle = handle;
-			siminfo->mName.assign( name );
-			siminfo->mAccess = accesscode;
-			siminfo->mRegionFlags = region_flags;
-			siminfo->mWaterHeight = (F32) water_height;
-			siminfo->mMapImageID[agent_flags] = image_id;
-
-#ifdef IMMEDIATE_IMAGE_LOAD
-			siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-			siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-#endif
+			/* Merov: we are not using the hub color anymore for display so commenting that out
+			// Telehub color
+			U32 X = x_world / REGION_WIDTH_UNITS;
+			U32 Y = y_world / REGION_WIDTH_UNITS;
+			F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f;
+			F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f;
+			F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f;
+			F32 add_amt = (X % 2) ? 0.15f : -0.15f;
+			add_amt += (Y % 2) ? -0.15f : 0.15f;
+			LLColor4 color(red + add_amt, green + add_amt, blue + add_amt);
+			new_item.setColor(color);
+			*/
 			
-			if (siminfo->mMapImageID[2].notNull())
+			// extra2 specifies whether this is an infohub or a telehub.
+			if (extra2)
 			{
-#ifdef IMMEDIATE_IMAGE_LOAD
-				siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-#endif
+				siminfo->insertInfoHub(new_item);
 			}
 			else
 			{
-				siminfo->mOverlayImage = NULL;
-			}
-
-			if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] >= x_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[0] < x_meters + 256 &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] >= y_meters &&
-				LLWorldMap::getInstance()->mUnknownLocation.mdV[1] < y_meters + 256)
-			{
-				if (siminfo->mAccess == SIM_ACCESS_DOWN)
-				{
-					// We were tracking this location, but it doesn't exist
-					LLWorldMap::getInstance()->mInvalidLocation = true;
-				}
-				else
-				{
-					// We were tracking this location, and it does exist
-					bool is_tracking_dbl = LLWorldMap::getInstance()->mIsTrackingDoubleClick == TRUE;
-					gFloaterWorldMap->trackLocation(LLWorldMap::getInstance()->mUnknownLocation);
-					if (is_tracking_dbl)
-					{
-						LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
-						gAgent.teleportViaLocation( pos_global );
-					}
-				}
+				siminfo->insertTeleHub(new_item);
 			}
+			break;
 		}
-				
-		if(LLWorldMap::getInstance()->mSLURLCallback != NULL)
+		case MAP_ITEM_PG_EVENT: // events
+		case MAP_ITEM_MATURE_EVENT:
+		case MAP_ITEM_ADULT_EVENT:
 		{
-			// Server returns definitive capitalization, SLURL might not have that.
-			if ((LLStringUtil::compareInsensitive(LLWorldMap::getInstance()->mSLURLRegionName, name)==0)
-				|| (LLWorldMap::getInstance()->mSLURLRegionHandle == handle))
+			std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:["
+					                   +LLTrans::getString ("TimeMin")+"] ["
+									   +LLTrans::getString ("TimeAMPM")+"]";
+			LLSD substitution;
+			substitution["datetime"] = (S32) extra;
+			LLStringUtil::format (timeStr, substitution);				
+			new_item.setTooltip(timeStr);
+
+			// HACK: store Z in extra2
+			new_item.setElevation((F64)extra2);
+			if (type == MAP_ITEM_PG_EVENT)
 			{
-				url_callback_t callback = LLWorldMap::getInstance()->mSLURLCallback;
-
-				LLWorldMap::getInstance()->mSLURLCallback = NULL;
-				LLWorldMap::getInstance()->mSLURLRegionName.clear();
-				LLWorldMap::getInstance()->mSLURLRegionHandle = 0;
-
-				callback(handle, LLWorldMap::getInstance()->mSLURL, image_id, LLWorldMap::getInstance()->mSLURLTeleport);
+				siminfo->insertPGEvent(new_item);
 			}
-		}
-	}
-
-	if(adjust) gFloaterWorldMap->adjustZoomSliderBounds();
-	gFloaterWorldMap->updateSims(found_null_sim);
-}
-
-// public static
-void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
-{
-	U32 type;
-	msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type);
-
-	S32 num_blocks = msg->getNumberOfBlocks("Data");
-
-	for (S32 block=0; block<num_blocks; ++block)
-	{
-		U32 X, Y;
-		std::string name;
-		S32 extra, extra2;
-		LLUUID uuid;
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block);
-		msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block);
-		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
-		msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block);
-		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block);
-		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block);
-
-		F32 world_x = (F32)X;
-		X /= REGION_WIDTH_UNITS;
-		F32 world_y = (F32)Y;
-		Y /= REGION_WIDTH_UNITS;
-		
-		LLItemInfo new_item(world_x, world_y, name, uuid, extra, extra2);
-		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(new_item.mRegionHandle);
-
-		switch (type)
-		{
-			case MAP_ITEM_TELEHUB: // telehubs
+			else if (type == MAP_ITEM_MATURE_EVENT)
 			{
-				// Telehub color, store in extra as 4 U8's
-				U8 *color = (U8 *)&new_item.mExtra;
-
-				F32 red = fmod((F32)X * 0.11f, 1.f) * 0.8f;
-				F32 green = fmod((F32)Y * 0.11f, 1.f) * 0.8f;
-				F32 blue = fmod(1.5f * (F32)(X + Y) * 0.11f, 1.f) * 0.8f;
-				F32 add_amt = (X % 2) ? 0.15f : -0.15f;
-				add_amt += (Y % 2) ? -0.15f : 0.15f;
-				color[0] = U8((red + add_amt) * 255);
-				color[1] = U8((green + add_amt) * 255);
-				color[2] = U8((blue + add_amt) * 255);
-				color[3] = 255;
-				
-				// extra2 specifies whether this is an infohub or a telehub.
-				if (extra2)
-				{
-					LLWorldMap::getInstance()->mInfohubs.push_back(new_item);
-				}
-				else
-				{
-					LLWorldMap::getInstance()->mTelehubs.push_back(new_item);
-				}
-
-				break;
+				siminfo->insertMatureEvent(new_item);
 			}
-			case MAP_ITEM_PG_EVENT: // events
-			case MAP_ITEM_MATURE_EVENT:
-			case MAP_ITEM_ADULT_EVENT:
+			else if (type == MAP_ITEM_ADULT_EVENT)
 			{
-				std::string timeStr = "["+ LLTrans::getString ("TimeHour")+"]:["
-					                   +LLTrans::getString ("TimeMin")+"] ["
-									   +LLTrans::getString ("TimeAMPM")+"]";
-				LLSD substitution;
-				substitution["datetime"] = (S32) extra;
-				LLStringUtil::format (timeStr, substitution);
-				new_item.mToolTip = timeStr;
-
-				// HACK: store Z in extra2
-				new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
-				if (type == MAP_ITEM_PG_EVENT)
-				{
-					LLWorldMap::getInstance()->mPGEvents.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_MATURE_EVENT)
-				{
-					LLWorldMap::getInstance()->mMatureEvents.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_ADULT_EVENT)
-				{
-					LLWorldMap::getInstance()->mAdultEvents.push_back(new_item);
-				}
-
-				break;
+				siminfo->insertAdultEvent(new_item);
 			}
-			case MAP_ITEM_LAND_FOR_SALE: // land for sale
-			case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale 
+			break;
+		}
+		case MAP_ITEM_LAND_FOR_SALE:		// land for sale
+		case MAP_ITEM_LAND_FOR_SALE_ADULT:	// adult land for sale 
+		{
+			std::string tooltip = llformat("%d sq. m. L$%d", extra, extra2);
+			new_item.setTooltip(tooltip);
+			if (type == MAP_ITEM_LAND_FOR_SALE)
 			{
-				new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2);
-				if (type == MAP_ITEM_LAND_FOR_SALE)
-				{
-					LLWorldMap::getInstance()->mLandForSale.push_back(new_item);
-				}
-				else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT)
-				{
-					LLWorldMap::getInstance()->mLandForSaleAdult.push_back(new_item);
-				}
-				break;
+				siminfo->insertLandForSale(new_item);
 			}
-			case MAP_ITEM_CLASSIFIED: // classifieds
+			else if (type == MAP_ITEM_LAND_FOR_SALE_ADULT)
 			{
-				//DEPRECATED: no longer used
-				break;
+				siminfo->insertLandForSaleAdult(new_item);
 			}
-			case MAP_ITEM_AGENT_LOCATIONS: // agent locations
+			break;
+		}
+		case MAP_ITEM_CLASSIFIED: // classifieds
+		{
+			//DEPRECATED: no longer used
+			break;
+		}
+		case MAP_ITEM_AGENT_LOCATIONS: // agent locations
+		{
+// 				LL_INFOS("World Map") << "New Location " << new_item.mName << LL_ENDL;
+			if (extra > 0)
 			{
-				if (!siminfo)
-				{
-					llinfos << "siminfo missing for " << new_item.mPosGlobal.mdV[0] << ", " << new_item.mPosGlobal.mdV[1] << llendl;
-					break;
-				}
-// 				llinfos << "New Location " << new_item.mName << llendl;
-
-				item_info_list_t& agentcounts = LLWorldMap::getInstance()->mAgentLocationsMap[new_item.mRegionHandle];
-
-				// Find the last item in the list with a different name and erase them
-				item_info_list_t::iterator lastiter;
-				for (lastiter = agentcounts.begin(); lastiter!=agentcounts.end(); ++lastiter)
-				{
-					const LLItemInfo& info = *lastiter;
-					if (info.mName == new_item.mName)
-					{
-						break;
-					}
-				}
-				if (lastiter != agentcounts.begin())
-				{
-					agentcounts.erase(agentcounts.begin(), lastiter);
-				}
-				// Now append the new location
-				if (new_item.mExtra > 0)
-				{
-					agentcounts.push_back(new_item);
-				}
-				break;
+				new_item.setCount(extra);
+				siminfo->insertAgentLocation(new_item);
 			}
-			default:
-				break;
-		};
-	}
-}
-
-void LLWorldMap::dump()
-{
-	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
-	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-
-		llinfos << x_pos << "," << y_pos
-			<< " " << info->mName 
-			<< " " << (S32)info->mAccess
-			<< " " << std::hex << info->mRegionFlags << std::dec
-			<< " " << info->mWaterHeight
-			//<< " " << info->mTelehubName
-			//<< " " << info->mTelehubPosition
-			<< llendl;
-
-		if (info->mCurrentImage)
-		{
-			llinfos << "image discard " << (S32)info->mCurrentImage->getDiscardLevel()
-					<< " fullwidth " << info->mCurrentImage->getFullWidth()
-					<< " fullheight " << info->mCurrentImage->getFullHeight()
-					<< " maxvirt " << info->mCurrentImage->getMaxVirtualSize()
-					//<< " maxdisc " << (S32)info->mCurrentImage->getMaxDiscardLevel()
-					<< llendl;
+			break;
 		}
+		default:
+			break;
 	}
+	return true;
 }
 
-
-BOOL LLWorldMap::extendAABB(U32 min_x, U32 min_y, U32 max_x, U32 max_y)
+bool LLWorldMap::isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1)
 {
-	BOOL rv = FALSE;
-	if (min_x < mMinX)
-	{
-		rv = TRUE;
-		mMinX = min_x;
-	}
-	if (min_y < mMinY)
-	{
-		rv = TRUE;
-		mMinY = min_y;
-	}
-	if (max_x > mMaxX)
-	{
-		rv = TRUE;
-		mMaxX = max_x;
-	}
-	if (max_y > mMaxY)
-	{
-		rv = TRUE;
-		mMaxY = max_y;
-	}
-	lldebugs << "World map aabb: (" << mMinX << ", " << mMinY << "), ("
-			 << mMaxX << ", " << mMaxY << ")" << llendl;
-	return rv;
+	if (!mIsTrackingLocation)
+		return false;
+	return ((mTrackingLocation[0] >= x0) && (mTrackingLocation[0] < x1) && (mTrackingLocation[1] >= y0) && (mTrackingLocation[1] < y1));
 }
 
-
-U32 LLWorldMap::getWorldWidth() const
+// Drop priority of all images being fetched by the map
+void LLWorldMap::dropImagePriorities()
 {
-	return mMaxX - mMinX;
-}
-
-
-U32 LLWorldMap::getWorldHeight() const
-{
-	return mMaxY - mMinY;
-}
-
-BOOL LLWorldMap::coveredByTelehub(LLSimInfo* infop)
-{
-	/*if (!mTelehubCoverageMap)
+	// Drop the download of tiles priority to nil
+	mWorldMipmap.dropBoostLevels();
+	// Same for the "land for sale" tiles per region
+	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		return FALSE;
+		LLSimInfo* info = it->second;
+		info->dropImagePriority();
 	}
-	U32 x_pos, y_pos;
-	from_region_handle(infop->mHandle, &x_pos, &y_pos);
-	x_pos /= REGION_WIDTH_UNITS;
-	y_pos /= REGION_WIDTH_UNITS;
-
-	S32 index = x_pos - (mMinX / REGION_WIDTH_UNITS - 1) + (mNeighborMapWidth * (y_pos - (mMinY / REGION_WIDTH_UNITS - 1)));
-	return mTelehubCoverageMap[index] != 0;	*/
-	return FALSE;
 }
 
-void LLWorldMap::updateTelehubCoverage()
+// Load all regions in a given rectangle (in region grid coordinates, i.e. world / 256 meters)
+void LLWorldMap::updateRegions(S32 x0, S32 y0, S32 x1, S32 y1)
 {
-	/*S32 neighbor_width = getWorldWidth() / REGION_WIDTH_UNITS + 2;
-	S32 neighbor_height = getWorldHeight() / REGION_WIDTH_UNITS + 2;
-	if (neighbor_width > mNeighborMapWidth || neighbor_height > mNeighborMapHeight)
-	{
-		mNeighborMapWidth = neighbor_width;
-		mNeighborMapHeight = neighbor_height;
-		delete mNeighborMap;
-		delete mTelehubCoverageMap;
-
-		mNeighborMap = new U8[mNeighborMapWidth * mNeighborMapHeight];
-		mTelehubCoverageMap = new U8[mNeighborMapWidth * mNeighborMapHeight];
-	}
-
-	memset(mNeighborMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8));
-	memset(mTelehubCoverageMap, 0, mNeighborMapWidth * mNeighborMapHeight * sizeof(U8));
+	// Convert those boundaries to the corresponding (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) block coordinates
+	x0 = x0 / MAP_BLOCK_SIZE;
+	x1 = x1 / MAP_BLOCK_SIZE;
+	y0 = y0 / MAP_BLOCK_SIZE;
+	y1 = y1 / MAP_BLOCK_SIZE;
 
-	// leave 1 sim border
-	S32 min_x = (mMinX / REGION_WIDTH_UNITS) - 1;
-	S32 min_y = (mMinY / REGION_WIDTH_UNITS) - 1;
-
- 	std::map<U64, LLSimInfo*>::const_iterator it;
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+	// Load the region info those blocks
+	for (S32 block_x = llmax(x0, 0); block_x <= llmin(x1, MAP_BLOCK_RES-1); ++block_x)
 	{
-		U64 handle = (*it).first;
-		//LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-		x_pos -= min_x;
-		y_pos -= min_y;
-
-		S32 index = x_pos + (mNeighborMapWidth * y_pos);
-		mNeighborMap[index - 1]++;
-		mNeighborMap[index + 1]++;
-		mNeighborMap[index - mNeighborMapWidth]++;
-		mNeighborMap[index + mNeighborMapWidth]++;
-	}
-
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
-	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-		x_pos -= min_x;
-		y_pos -= min_y;
-
-		S32 index = x_pos + (mNeighborMapWidth * y_pos);
-
-		if (!info->mTelehubName.empty() && mNeighborMap[index])
+		for (S32 block_y = llmax(y0, 0); block_y <= llmin(y1, MAP_BLOCK_RES-1); ++block_y)
 		{
-			S32 x_start = llmax(0, S32(x_pos - 5));
-			S32 x_span = llmin(mNeighborMapWidth - 1, (S32)(x_pos + 5)) - x_start + 1;
-			S32 y_start = llmax(0, (S32)y_pos - 5);
-			S32 y_end = llmin(mNeighborMapHeight - 1, (S32)(y_pos + 5));
-			for (S32 y_index = y_start; y_index <= y_end; y_index++)
+			S32 offset = block_x | (block_y * MAP_BLOCK_RES);
+			if (!mMapBlockLoaded[offset])
 			{
-				memset(&mTelehubCoverageMap[x_start + y_index * mNeighborMapWidth], 0xff, sizeof(U8) * x_span);
+ 				//LL_INFOS("World Map") << "Loading Block (" << block_x << "," << block_y << ")" << LL_ENDL;
+				LLWorldMapMessage::getInstance()->sendMapBlockRequest(block_x * MAP_BLOCK_SIZE, block_y * MAP_BLOCK_SIZE, (block_x * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1, (block_y * MAP_BLOCK_SIZE) + MAP_BLOCK_SIZE - 1);
+				mMapBlockLoaded[offset] = true;
 			}
 		}
 	}
+}
 
-	for (it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
+void LLWorldMap::dump()
+{
+	LL_INFOS("World Map") << "LLWorldMap::dump()" << LL_ENDL;
+	for (sim_info_map_t::iterator it = mSimInfoMap.begin(); it != mSimInfoMap.end(); ++it)
 	{
-		U64 handle = (*it).first;
-		//LLSimInfo* info = (*it).second;
-
-		U32 x_pos, y_pos;
-		from_region_handle(handle, &x_pos, &y_pos);
-		x_pos /= REGION_WIDTH_UNITS;
-		y_pos /= REGION_WIDTH_UNITS;
-
-		S32 index = x_pos - min_x + (mNeighborMapWidth * (y_pos - min_y));
-		mTelehubCoverageMap[index] *= mNeighborMap[index];
-	}*/
+		LLSimInfo* info = it->second;
+		if (info)
+		{
+			info->dump();
+		}
+	}
 }
+
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index 366de8f07191e347589ffd53a943d849f4944f11..7e37727b866613564435806a0e0650a7201cf034 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -33,203 +33,243 @@
 #ifndef LL_LLWORLDMAP_H
 #define LL_LLWORLDMAP_H
 
-#include <map>
-#include <string>
-#include <vector>
+#include "llworldmipmap.h"
 #include <boost/function.hpp>
 
-#include "v3math.h"
 #include "v3dmath.h"
-#include "llframetimer.h"
-#include "llmapimagetype.h"
 #include "lluuid.h"
 #include "llpointer.h"
 #include "llsingleton.h"
+#include "llviewerregion.h"
 #include "llviewertexture.h"
-#include "lleventinfo.h"
-#include "v3color.h"
-
-class LLMessageSystem;
-
 
+// Description of objects like hubs, events, land for sale, people and more (TBD).
+// Note: we don't store a "type" in there so we need to store instances of this class in 
+// well known objects (i.e. list of objects which type is "well known").
 class LLItemInfo
 {
 public:
-	LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id, S32 extra = 0, S32 extra2 = 0);
-
-	std::string mName;
-	std::string mToolTip;
-	LLVector3d	mPosGlobal;
-	LLUUID		mID;
-	BOOL		mSelected;
-	S32			mExtra;
-	S32			mExtra2;
-	U64			mRegionHandle;
-};
+	LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id);
+
+	// Setters
+	void setTooltip(std::string& tooltip) { mToolTip = tooltip; }
+	void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; }
+	void setCount(S32 count) { mCount = count; }
+//	void setSelected(bool selected) { mSelected = selected; }
+//	void setColor(LLColor4 color) { mColor = color; }
+
+	// Accessors
+	const LLVector3d& getGlobalPosition() const { return mPosGlobal; } 
+	const std::string& getName() const { return mName; }
+	const std::string& getToolTip() const { return mToolTip; }
+	const LLUUID& getUUID() const { return mID; }
+	S32 getCount() const { return mCount; }
+
+	U64 getRegionHandle() const { return to_region_handle(mPosGlobal); }		// Build the handle on the fly
 
-// Map layers, see indra_constants.h
-// 0 - Prim
-// 1 - Terrain Only
-// 2 - Overlay: Land For Sale
+	bool isName(const std::string& name) const { return (mName == name); }		// True if name same as item's name
+//	bool isSelected() const { return mSelected; }
 
+private:
+	std::string mName;			// Name of the individual item
+	std::string mToolTip;		// Tooltip : typically, something to be displayed to the user when selecting this item
+	LLVector3d	mPosGlobal;		// Global world position
+	LLUUID		mID;			// UUID of the item
+	S32			mCount;			// Number of elements in item (e.g. people count)
+	// Currently not used but might prove useful one day so we comment out 
+//	bool		mSelected;		// Selected or not: updated by the viewer UI, not the simulator or asset DB
+//	LLColor4	mColor;			// Color of the item
+};
+
+// Info per region
+// Such records are stored in a global map hold by the LLWorldMap and indexed by region handles. 
+// To avoid creating too many of them, they are requested in "blocks" corresponding to areas covered by the screen. 
+// Unfortunately, when the screen covers the whole world (zoomed out), that can translate in requesting info for 
+// every sim on the grid... Not good...
+// To avoid this, the code implements a cut-off threshold for overlay graphics and, therefore, all LLSimInfo. 
+// In other words, when zooming out too much, we simply stop requesting LLSimInfo and
+// LLItemInfo and just display the map tiles. 
+// As they are stored in different structures (LLSimInfo and LLWorldMipmap), this strategy is now workable.
 class LLSimInfo
 {
 public:
-	LLSimInfo();
+	LLSimInfo(U64 handle);
 
-	LLVector3d getGlobalPos(LLVector3 local_pos) const;
+	// Convert local region coordinates into world coordinates
+	LLVector3d getGlobalPos(const LLVector3& local_pos) const;
+	// Get the world coordinates of the SW corner of that region
+	LLVector3d getGlobalOrigin() const;
 	LLVector3 getLocalPos(LLVector3d global_pos) const;
 
-public:
-	U64 mHandle;
-	std::string mName;
-
-	F64 mAgentsUpdateTime;
-	BOOL mShowAgentLocations;	// are agents visible?
+	void clearImage();					// Clears the reference to the Land for sale image for that region
+	void dropImagePriority();			// Drops the boost level of the Land for sale image for that region
+	void updateAgentCount(F64 time);	// Send an item request for agent count on that region if time's up
 
-	U8 mAccess;
-	U32 mRegionFlags;
-	F32 mWaterHeight;
+	// Setters
+	void setName(std::string& name) { mName = name; }
+	void setAccess (U32 accesscode) { mAccess = accesscode; }
+	void setRegionFlags (U32 region_flags) { mRegionFlags = region_flags; }
+	void setLandForSaleImage (LLUUID image_id);
+//	void setWaterHeight (F32 water_height) { mWaterHeight = water_height; }
 
-	F32 mAlpha;
+	// Accessors
+	std::string getName() const { return mName; }
+	const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); }
+	const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); }
 
-	// Image ID for the current overlay mode.
-	LLUUID mMapImageID[MAP_SIM_IMAGE_TYPES];
+	const S32 getAgentCount() const;				// Compute the total agents count
+	LLPointer<LLViewerFetchedTexture> getLandForSaleImage();	// Get the overlay image, fetch it if necessary
 
-	// Hold a reference to the currently displayed image.
-	LLPointer<LLViewerFetchedTexture> mCurrentImage;
-	LLPointer<LLViewerFetchedTexture> mOverlayImage;
-};
+	bool isName(const std::string& name) const;
+	bool isDown() { return (mAccess == SIM_ACCESS_DOWN); }
+	bool isPG() { return (mAccess <= SIM_ACCESS_PG); }
 
-#define MAP_BLOCK_RES 256
+	// Debug only
+	void dump() const;	// Print the region info to the standard output
 
-struct LLWorldMapLayer
-{
-	BOOL LayerDefined;
-	LLPointer<LLViewerFetchedTexture> LayerImage;
-	LLUUID LayerImageID;
-	LLRect LayerExtents;
+	// Items lists handling
+	typedef std::vector<LLItemInfo> item_info_list_t;
+	void clearItems();
+
+	void insertTeleHub(const LLItemInfo& item) { mTelehubs.push_back(item); }
+	void insertInfoHub(const LLItemInfo& item) { mInfohubs.push_back(item); }
+	void insertPGEvent(const LLItemInfo& item) { mPGEvents.push_back(item); }
+	void insertMatureEvent(const LLItemInfo& item) { mMatureEvents.push_back(item); }
+	void insertAdultEvent(const LLItemInfo& item) { mAdultEvents.push_back(item); }
+	void insertLandForSale(const LLItemInfo& item) { mLandForSale.push_back(item); }
+	void insertLandForSaleAdult(const LLItemInfo& item) { mLandForSaleAdult.push_back(item); }
+	void insertAgentLocation(const LLItemInfo& item);
+
+	const LLSimInfo::item_info_list_t& getTeleHub() const { return mTelehubs; }
+	const LLSimInfo::item_info_list_t& getInfoHub() const { return mInfohubs; }
+	const LLSimInfo::item_info_list_t& getPGEvent() const { return mPGEvents; }
+	const LLSimInfo::item_info_list_t& getMatureEvent() const { return mMatureEvents; }
+	const LLSimInfo::item_info_list_t& getAdultEvent() const { return mAdultEvents; }
+	const LLSimInfo::item_info_list_t& getLandForSale() const { return mLandForSale; }
+	const LLSimInfo::item_info_list_t& getLandForSaleAdult() const { return mLandForSaleAdult; }
+	const LLSimInfo::item_info_list_t& getAgentLocation() const { return mAgentLocations; }
 
-	LLWorldMapLayer() : LayerDefined(FALSE) { }
+private:
+	U64 mHandle;				// This is a hash of the X and Y world coordinates of the SW corner of the sim
+	std::string mName;			// Region name
+
+	F64 mAgentsUpdateTime;		// Time stamp giving the last time the agents information was requested for that region
+	bool mFirstAgentRequest;	// Init agent request flag
+
+	U32  mAccess;				// Down/up and maturity rating of the region
+	U32 mRegionFlags;			// Tell us if the siminfo has been received (if non 0) and what kind of region it is (Sandbox, allow damage)
+	// Currently not used but might prove useful one day so we comment out 
+//	F32 mWaterHeight;			// Water height on the region (not actively used)
+
+	// Handling the "land for sale / land for auction" overlay image
+	LLUUID mMapImageID;						// Image ID of the overlay image
+	LLPointer<LLViewerFetchedTexture> mOverlayImage;	// Reference to the overlay image
+
+	// Items for this region
+	// Those are data received through item requests (as opposed to block requests for the rest of the data)
+	item_info_list_t mTelehubs;			// List of tele hubs in the region
+	item_info_list_t mInfohubs;			// List of info hubs in the region
+	item_info_list_t mPGEvents;			// List of PG events in the region
+	item_info_list_t mMatureEvents;		// List of Mature events in the region
+	item_info_list_t mAdultEvents;		// List of Adult events in the region (AO)
+	item_info_list_t mLandForSale;		// List of Land for sales in the region
+	item_info_list_t mLandForSaleAdult;	// List of Adult Land for sales in the region (AO)
+	item_info_list_t mAgentLocations;	// List of agents in the region
 };
 
+// We request region data on the world by "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions
+// This is to reduce the number of requests to the asset DB and get things in big "blocks"
+const S32 MAP_MAX_SIZE = 2048;
+const S32 MAP_BLOCK_SIZE = 4;
+const S32 MAP_BLOCK_RES = (MAP_MAX_SIZE / MAP_BLOCK_SIZE);
 
 class LLWorldMap : public LLSingleton<LLWorldMap>
 {
 public:
-	typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)>
-		url_callback_t;
-
 	LLWorldMap();
 	~LLWorldMap();
 
-	// clears the list
+	// Clear all: list of region info, tiles, blocks and items
 	void reset();
 
-	// clear the visible items
-	void eraseItems();
+	void clearImageRefs();					// Clears the image references
+	void dropImagePriorities();				// Drops the priority of the images being fetched
+	void reloadItems(bool force = false);	// Reload the items (people, hub, etc...)
 
-	// Removes references to cached images
-	void clearImageRefs();
+	// Region Map access
+	typedef std::map<U64, LLSimInfo*> sim_info_map_t;
+	const LLWorldMap::sim_info_map_t& getRegionMap() const { return mSimInfoMap; }
+	void updateRegions(S32 x0, S32 y0, S32 x1, S32 y1);		// Requests region info for a rectangle of regions (in grid coordinates)
 
-	// Clears the flags indicating that we've received sim infos
-	// Causes a re-request of the sim info without erasing extisting info
-	void clearSimFlags();
+	// Insert a region and items in the map global instance
+	// Note: x_world and y_world in world coordinates (meters)
+	static bool insertRegion(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 accesscode, U32 region_flags);
+	static bool insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& uuid, U32 type, S32 extra, S32 extra2);
 
-	// Returns simulator information, or NULL if out of range
+	// Get info on sims (region) : note that those methods only search the range of loaded sims (the one that are being browsed)
+	// *not* the entire world. So a NULL return does not mean a down or unexisting region, just an out of range region.
 	LLSimInfo* simInfoFromHandle(const U64 handle);
-
-	// Returns simulator information, or NULL if out of range
 	LLSimInfo* simInfoFromPosGlobal(const LLVector3d& pos_global);
-
-	// Returns simulator information for named sim, or NULL if non-existent
 	LLSimInfo* simInfoFromName(const std::string& sim_name);
 
-	// Gets simulator name for a global position, returns true if it was found
+	// Gets simulator name from a global position, returns true if found
 	bool simNameFromPosGlobal(const LLVector3d& pos_global, std::string& outSimName );
 
-	// Sets the current layer
-	void setCurrentLayer(S32 layer, bool request_layer = false);
-
-	void sendMapLayerRequest();
-	void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
-	void sendNamedRegionRequest(std::string region_name);
-	void sendNamedRegionRequest(std::string region_name, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport);
-	void sendHandleRegionRequest(U64 region_handle, 
-		url_callback_t callback,
-		const std::string& callback_url,
-		bool teleport);
-	void sendItemRequest(U32 type, U64 handle = 0);
-
-	static void processMapLayerReply(LLMessageSystem*, void**);
-	static void processMapBlockReply(LLMessageSystem*, void**);
-	static void processMapItemReply(LLMessageSystem*, void**);
-
-	void dump();
-
-	// Extend the bounding box of the list of simulators. Returns true
-	// if the extents changed.
-	BOOL extendAABB(U32 x_min, U32 y_min, U32 x_max, U32 y_max);
-
-	// build coverage maps for telehub region visualization
-	void updateTelehubCoverage();
-	BOOL coveredByTelehub(LLSimInfo* infop);
-
-	// Bounds of the world, in meters
-	U32 getWorldWidth() const;
-	U32 getWorldHeight() const;
-public:
-	// Map from region-handle to simulator info
-	typedef std::map<U64, LLSimInfo*> sim_info_map_t;
-	sim_info_map_t mSimInfoMap;
+	// Debug only
+	void dump();	// Print the world info to the standard output
 
-	BOOL			mIsTrackingUnknownLocation, mInvalidLocation, mIsTrackingDoubleClick, mIsTrackingCommit;
-	LLVector3d		mUnknownLocation;
+	// Track handling
+	void cancelTracking() { mIsTrackingLocation = false; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false; }
 
-	bool mRequestLandForSale;
+	void setTracking(const LLVector3d& loc) { mIsTrackingLocation = true; mTrackingLocation = loc; mIsTrackingFound = false; mIsInvalidLocation = false; mIsTrackingDoubleClick = false; mIsTrackingCommit = false;}
+	void setTrackingInvalid() { mIsTrackingFound = true; mIsInvalidLocation = true;  }
+	void setTrackingValid()   { mIsTrackingFound = true; mIsInvalidLocation = false; }
+	void setTrackingDoubleClick() { mIsTrackingDoubleClick = true; }
+	void setTrackingCommit() { mIsTrackingCommit = true; }
 
-	typedef std::vector<LLItemInfo> item_info_list_t;
-	item_info_list_t mTelehubs;
-	item_info_list_t mInfohubs;
-	item_info_list_t mPGEvents;
-	item_info_list_t mMatureEvents;
-	item_info_list_t mAdultEvents;
-	item_info_list_t mLandForSale;
-	item_info_list_t mLandForSaleAdult;
-
-	std::map<U64,S32> mNumAgents;
-
-	typedef std::map<U64, item_info_list_t> agent_list_map_t;
-	agent_list_map_t mAgentLocationsMap;
-	
-	std::vector<LLWorldMapLayer>	mMapLayers[MAP_SIM_IMAGE_TYPES];
-	BOOL							mMapLoaded[MAP_SIM_IMAGE_TYPES];
-	BOOL *							mMapBlockLoaded[MAP_SIM_IMAGE_TYPES];
-	S32								mCurrentMap;
-
-	// AABB of the list of simulators
-	U32		mMinX;
-	U32		mMaxX;
-	U32		mMinY;
-	U32		mMaxY;
-
-	U8*		mNeighborMap;
-	U8*		mTelehubCoverageMap;
-	S32		mNeighborMapWidth;
-	S32		mNeighborMapHeight;
+	bool isTracking() { return mIsTrackingLocation; }
+	bool isTrackingValidLocation()   { return mIsTrackingFound && !mIsInvalidLocation; }
+	bool isTrackingInvalidLocation() { return mIsTrackingFound &&  mIsInvalidLocation; }
+	bool isTrackingDoubleClick() { return mIsTrackingDoubleClick; }
+	bool isTrackingCommit() { return mIsTrackingCommit; }
+	bool isTrackingInRectangle(F64 x0, F64 y0, F64 x1, F64 y1);
+
+	LLVector3d getTrackedPositionGlobal() const { return mTrackingLocation; }
+
+	// World Mipmap delegation: currently used when drawing the mipmap
+	void	equalizeBoostLevels();
+	LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true) { return mWorldMipmap.getObjectsTile(grid_x, grid_y, level, load); }
 
 private:
-	LLTimer	mRequestTimer;
-
-	// search for named region for url processing
-	std::string mSLURLRegionName;
-	U64 mSLURLRegionHandle;
-	std::string mSLURL;
-	url_callback_t mSLURLCallback;
-	bool mSLURLTeleport;
+	bool clearItems(bool force = false);	// Clears the item lists
+	void clearSimFlags();					// Clears the block flags indicating that we've already requested region infos
+
+	// Create a region record corresponding to the handle, insert it in the region map and returns a pointer
+	LLSimInfo* createSimInfoFromHandle(const U64 handle);
+
+	// Map from region-handle to region info
+	sim_info_map_t	mSimInfoMap;
+
+	// Holds the tiled mipmap of the world. This is the structure that contains the images used for rendering.
+	LLWorldMipmap	mWorldMipmap;
+
+	// The World is divided in "blocks" of (MAP_BLOCK_SIZE x MAP_BLOCK_SIZE) regions that get requested at once.
+	// This boolean table avoids "blocks" to be requested multiple times. 
+	// Issue: Not sure this scheme is foolproof though as I've seen
+	// cases where a block is never retrieved and, because of this boolean being set, never re-requested
+	bool *			mMapBlockLoaded;		// Telling us if the block of regions has been requested or not
+
+	// Track location data : used while there's nothing tracked yet by LLTracker
+	bool			mIsTrackingLocation;	// True when we're tracking a point
+	bool			mIsTrackingFound;		// True when the tracking position has been found, valid or not
+	bool			mIsInvalidLocation;		// The region is down or the location does not correspond to an existing region
+	bool			mIsTrackingDoubleClick;	// User double clicked to set the location (i.e. teleport when found please...)
+	bool			mIsTrackingCommit;		// User used the search or landmark fields to set the location
+	LLVector3d		mTrackingLocation;		// World global position being tracked
+
+	// General grid items request timing flags (used for events,hubs and land for sale)
+	LLTimer			mRequestTimer;
+	bool			mFirstRequest;
 };
 
 #endif
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6a074d9697fc70402087c999fca59cfae8b12864
--- /dev/null
+++ b/indra/newview/llworldmapmessage.cpp
@@ -0,0 +1,261 @@
+/** 
+ * @file llworldmapmessage.cpp
+ * @brief Handling of the messages to the DB made by and for the world map.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llworldmapmessage.h"
+
+#include "llworldmap.h"
+#include "llagent.h"
+#include "llfloaterworldmap.h"
+
+const U32 LAYER_FLAG = 2;
+
+//---------------------------------------------------------------------------
+// World Map Message Handling
+//---------------------------------------------------------------------------
+
+LLWorldMapMessage::LLWorldMapMessage() :
+	mSLURLRegionName(),
+	mSLURLRegionHandle(0),
+	mSLURL(),
+	mSLURLCallback(0),
+	mSLURLTeleport(false)
+{
+}
+
+LLWorldMapMessage::~LLWorldMapMessage()
+{
+}
+
+void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle)
+{
+	//LL_INFOS("World Map") << "Send item request : type = " << type << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+
+	msg->newMessageFast(_PREHASH_MapItemRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+
+	msg->nextBlockFast(_PREHASH_RequestData);
+	msg->addU32Fast(_PREHASH_ItemType, type);
+	msg->addU64Fast(_PREHASH_RegionHandle, handle); // If zero, filled in on sim
+
+	gAgent.sendReliableMessage();
+}
+
+void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+
+	// Request for region data
+	msg->newMessageFast(_PREHASH_MapNameRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	msg->addU32Fast(_PREHASH_Flags, LAYER_FLAG);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+	msg->nextBlockFast(_PREHASH_NameData);
+	msg->addStringFast(_PREHASH_Name, region_name);
+	gAgent.sendReliableMessage();
+}
+
+void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport)	// immediately teleport when result returned
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendNamedRegionRequest()" << LL_ENDL;
+	mSLURLRegionName = region_name;
+	mSLURLRegionHandle = 0;
+	mSLURL = callback_url;
+	mSLURLCallback = callback;
+	mSLURLTeleport = teleport;
+
+	sendNamedRegionRequest(region_name);
+}
+
+void LLWorldMapMessage::sendHandleRegionRequest(U64 region_handle, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport)	// immediately teleport when result returned
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendHandleRegionRequest()" << LL_ENDL;
+	mSLURLRegionName.clear();
+	mSLURLRegionHandle = region_handle;
+	mSLURL = callback_url;
+	mSLURLCallback = callback;
+	mSLURLTeleport = teleport;
+
+	U32 global_x;
+	U32 global_y;
+	from_region_handle(region_handle, &global_x, &global_y);
+	U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS);
+	U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS);
+	
+	sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true);
+}
+
+void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::sendMapBlockRequest()" << ", min = (" << min_x << ", " << min_y << "), max = (" << max_x << ", " << max_y << "), nonexistent = " << return_nonexistent << LL_ENDL;
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessageFast(_PREHASH_MapBlockRequest);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+	U32 flags = LAYER_FLAG;
+	flags |= (return_nonexistent ? 0x10000 : 0);
+	msg->addU32Fast(_PREHASH_Flags, flags);
+	msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+	msg->addBOOLFast(_PREHASH_Godlike, FALSE); // Filled in on sim
+	msg->nextBlockFast(_PREHASH_PositionData);
+	msg->addU16Fast(_PREHASH_MinX, min_x);
+	msg->addU16Fast(_PREHASH_MinY, min_y);
+	msg->addU16Fast(_PREHASH_MaxX, max_x);
+	msg->addU16Fast(_PREHASH_MaxY, max_y);
+	gAgent.sendReliableMessage();
+}
+
+// public static
+void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
+{
+	U32 agent_flags;
+	msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
+
+	// There's only one flag that we ever use here
+	if (agent_flags != LAYER_FLAG)
+	{
+		llwarns << "Invalid map image type returned! layer = " << agent_flags << llendl;
+		return;
+	}
+
+	S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
+	//LL_INFOS("World Map") << "LLWorldMap::processMapBlockReply(), num_blocks = " << num_blocks << LL_ENDL;
+
+	bool found_null_sim = false;
+
+	for (S32 block=0; block<num_blocks; ++block)
+	{
+		U16 x_regions;
+		U16 y_regions;
+		std::string name;
+		U8 accesscode;
+		U32 region_flags;
+//		U8 water_height;
+//		U8 agents;
+		LLUUID image_id;
+		msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
+		msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
+		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+		msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
+//		msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
+//		msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
+		msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
+
+		U32 x_world = (U32)(x_regions) * REGION_WIDTH_UNITS;
+		U32 y_world = (U32)(y_regions) * REGION_WIDTH_UNITS;
+
+		// Insert that region in the world map, if failure, flag it as a "null_sim"
+		if (!(LLWorldMap::getInstance()->insertRegion(x_world, y_world, name, image_id, (U32)accesscode, region_flags)))
+		{
+			found_null_sim = true;
+		}
+
+		// If we hit a valid tracking location, do what needs to be done app level wise
+		if (LLWorldMap::getInstance()->isTrackingValidLocation())
+		{
+			LLVector3d pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal();
+			if (LLWorldMap::getInstance()->isTrackingDoubleClick())
+			{
+				// Teleport if the user double clicked
+				gAgent.teleportViaLocation(pos_global);
+			}
+			// Update the "real" tracker information
+			gFloaterWorldMap->trackLocation(pos_global);
+		}
+
+		// Handle the SLURL callback if any
+		if(LLWorldMapMessage::getInstance()->mSLURLCallback != NULL)
+		{
+			U64 handle = to_region_handle(x_world, y_world);
+			// Check if we reached the requested region
+			if ((LLStringUtil::compareInsensitive(LLWorldMapMessage::getInstance()->mSLURLRegionName, name)==0)
+				|| (LLWorldMapMessage::getInstance()->mSLURLRegionHandle == handle))
+			{
+				url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
+
+				LLWorldMapMessage::getInstance()->mSLURLCallback = NULL;
+				LLWorldMapMessage::getInstance()->mSLURLRegionName.clear();
+				LLWorldMapMessage::getInstance()->mSLURLRegionHandle = 0;
+
+				callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport);
+			}
+		}
+	}
+	// Tell the UI to update itself
+	gFloaterWorldMap->updateSims(found_null_sim);
+}
+
+// public static
+void LLWorldMapMessage::processMapItemReply(LLMessageSystem* msg, void**)
+{
+	//LL_INFOS("World Map") << "LLWorldMap::processMapItemReply()" << LL_ENDL;
+	U32 type;
+	msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ItemType, type);
+
+	S32 num_blocks = msg->getNumberOfBlocks("Data");
+
+	for (S32 block=0; block<num_blocks; ++block)
+	{
+		U32 X, Y;
+		std::string name;
+		S32 extra, extra2;
+		LLUUID uuid;
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_X, X, block);
+		msg->getU32Fast(_PREHASH_Data, _PREHASH_Y, Y, block);
+		msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+		msg->getUUIDFast(_PREHASH_Data, _PREHASH_ID, uuid, block);
+		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra, extra, block);
+		msg->getS32Fast(_PREHASH_Data, _PREHASH_Extra2, extra2, block);
+
+		LLWorldMap::getInstance()->insertItem(X, Y, name, uuid, type, extra, extra2);
+	}
+}
+
diff --git a/indra/newview/llworldmapmessage.h b/indra/newview/llworldmapmessage.h
new file mode 100644
index 0000000000000000000000000000000000000000..2c8fedcb10e292bac1b8369405f2a7d321b015c6
--- /dev/null
+++ b/indra/newview/llworldmapmessage.h
@@ -0,0 +1,83 @@
+/** 
+ * @file llworldmapmessage.h
+ * @brief Handling of the messages to the DB made by and for the world map.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWORLDMAPMESSAGE_H
+#define LL_LLWORLDMAPMESSAGE_H
+
+// Handling of messages (send and process) as well as SLURL callback if necessary
+class LLMessageSystem;
+
+class LLWorldMapMessage : public LLSingleton<LLWorldMapMessage>
+{
+public:
+	typedef boost::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)>
+		url_callback_t;
+
+	LLWorldMapMessage();
+	~LLWorldMapMessage();
+
+	// Process incoming answers to map stuff requests
+	static void processMapBlockReply(LLMessageSystem*, void**);
+	static void processMapItemReply(LLMessageSystem*, void**);
+
+	// Request data for all regions in a rectangular area. Coordinates in grids (i.e. meters / 256).
+	void sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent = false);
+
+	// Various methods to request LLSimInfo data to the simulator and asset DB
+	void sendNamedRegionRequest(std::string region_name);
+	void sendNamedRegionRequest(std::string region_name, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport);
+	void sendHandleRegionRequest(U64 region_handle, 
+		url_callback_t callback,
+		const std::string& callback_url,
+		bool teleport);
+
+	// Request item data for regions
+	// Note: the handle works *only* when requesting agent count (type = MAP_ITEM_AGENT_LOCATIONS). In that case,
+	// the request will actually be transitting through the spaceserver (all that is done on the sim).
+	// All other values of type do create a global grid request to the asset DB. So no need to try to get, say,
+	// the events for one particular region. For such a request, the handle is ignored.
+	void sendItemRequest(U32 type, U64 handle = 0);
+
+private:
+	// Search for region (by name or handle) for SLURL processing and teleport
+	// None of this relies explicitly on the LLWorldMap instance so better handle it here
+	std::string		mSLURLRegionName;
+	U64				mSLURLRegionHandle;
+	std::string		mSLURL;
+	url_callback_t	mSLURLCallback;
+	bool			mSLURLTeleport;
+};
+
+#endif // LL_LLWORLDMAPMESSAGE_H
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 823db027eeb872e0a1f9f3927200c37b4910e3a8..60b1e5964587e8401b3104b8d6853d34dcdd32c7 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -46,7 +46,6 @@
 #include "llagent.h"
 #include "llcallingcard.h"
 #include "llviewercontrol.h"
-#include "llcylinder.h"
 #include "llfloatermap.h"
 #include "llfloaterworldmap.h"
 #include "llfocusmgr.h"
@@ -57,25 +56,29 @@
 #include "llviewercamera.h"
 #include "llviewertexture.h"
 #include "llviewertexturelist.h"
-#include "llviewermenu.h"
-#include "llviewerparceloverlay.h"
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
-#include "llworldmap.h"
-#include "lltexturefetch.h"
-#include "llappviewer.h"				// Only for constants!
 #include "lltrans.h"
 
 #include "llglheaders.h"
 
+// Basically a C++ implementation of the OCEAN_COLOR defined in mapstitcher.py 
+// Please ensure consistency between those 2 files (TODO: would be better to get that color from an asset source...)
+// # Constants
+// OCEAN_COLOR = "#1D475F"
+const F32 OCEAN_RED   = (F32)(0x1D)/255.f;
+const F32 OCEAN_GREEN = (F32)(0x47)/255.f;
+const F32 OCEAN_BLUE  = (F32)(0x5F)/255.f;
+
 const F32 GODLY_TELEPORT_HEIGHT = 200.f;
 const S32 SCROLL_HINT_WIDTH = 65;
 const F32 BIG_DOT_RADIUS = 5.f;
 BOOL LLWorldMapView::sHandledLastClick = FALSE;
 
-LLUIImagePtr LLWorldMapView::sAvatarYouSmallImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarSmallImage = NULL;
-LLUIImagePtr LLWorldMapView::sAvatarLargeImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarYouImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL;
+LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;
 LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL;
 
@@ -93,35 +96,34 @@ LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL;
 LLUIImagePtr LLWorldMapView::sForSaleImage = NULL;
 LLUIImagePtr LLWorldMapView::sForSaleAdultImage = NULL;
 
-F32 LLWorldMapView::sThresholdA = 48.f;
-F32 LLWorldMapView::sThresholdB = 96.f;
 F32 LLWorldMapView::sPanX = 0.f;
 F32 LLWorldMapView::sPanY = 0.f;
 F32 LLWorldMapView::sTargetPanX = 0.f;
 F32 LLWorldMapView::sTargetPanY = 0.f;
 S32 LLWorldMapView::sTrackingArrowX = 0;
 S32 LLWorldMapView::sTrackingArrowY = 0;
-F32 LLWorldMapView::sPixelsPerMeter = 1.f;
-F32 CONE_SIZE = 0.6f;
+bool LLWorldMapView::sVisibleTilesLoaded = false;
+F32 LLWorldMapView::sMapScale = 128.f;
 
 std::map<std::string,std::string> LLWorldMapView::sStringsMap;
 
-#define SIM_NULL_MAP_SCALE 1 // width in pixels, where we start drawing "null" sims
-#define SIM_MAP_AGENT_SCALE 2 // width in pixels, where we start drawing agents
-#define SIM_MAP_SCALE 1 // width in pixels, where we start drawing sim tiles
-
-// Updates for agent locations.
-#define AGENTS_UPDATE_TIME 60.0 // in seconds
+// Fetch and draw info thresholds
+const F32 DRAW_TEXT_THRESHOLD = 96.f;		// Don't draw text under that resolution value (res = width region in meters)
+const S32 DRAW_SIMINFO_THRESHOLD = 3;		// Max level for which we load or display sim level information (level in LLWorldMipmap sense)
+const S32 DRAW_LANDFORSALE_THRESHOLD = 2;	// Max level for which we load or display land for sale picture data (level in LLWorldMipmap sense)
 
+// When on, draw an outline for each mipmap tile gotten from S3
+#define DEBUG_DRAW_TILE 0
 
 
 void LLWorldMapView::initClass()
 {
-	sAvatarYouSmallImage =	LLUI::getUIImage("map_avatar_you_8.tga");
-	sAvatarSmallImage = 	LLUI::getUIImage("map_avatar_8.tga");
-	sAvatarLargeImage = 	LLUI::getUIImage("map_avatar_16.tga");
-	sAvatarAboveImage = 	LLUI::getUIImage("map_avatar_above_8.tga");
-	sAvatarBelowImage = 	LLUI::getUIImage("map_avatar_below_8.tga");
+	sAvatarSmallImage =		LLUI::getUIImage("map_avatar_8.tga");
+	sAvatarYouImage =		LLUI::getUIImage("map_avatar_16.tga");
+	sAvatarYouLargeImage =	LLUI::getUIImage("map_avatar_you_32.tga");
+	sAvatarLevelImage =		LLUI::getUIImage("map_avatar_32.tga");
+	sAvatarAboveImage =		LLUI::getUIImage("map_avatar_above_32.tga");
+	sAvatarBelowImage =		LLUI::getUIImage("map_avatar_below_32.tga");
 
 	sHomeImage =			LLUI::getUIImage("map_home.tga");
 	sTelehubImage = 		LLUI::getUIImage("map_telehub.tga");
@@ -145,9 +147,10 @@ void LLWorldMapView::initClass()
 // static
 void LLWorldMapView::cleanupClass()
 {
-	sAvatarYouSmallImage = NULL;
 	sAvatarSmallImage = NULL;
-	sAvatarLargeImage = NULL;
+	sAvatarYouImage = NULL;
+	sAvatarYouLargeImage = NULL;
+	sAvatarLevelImage = NULL;
 	sAvatarAboveImage = NULL;
 	sAvatarBelowImage = NULL;
 
@@ -167,7 +170,7 @@ void LLWorldMapView::cleanupClass()
 
 LLWorldMapView::LLWorldMapView()
 :	LLPanel(),
-	mBackgroundColor( LLColor4( 4.f/255.f, 4.f/255.f, 75.f/255.f, 1.f ) ),
+	mBackgroundColor( LLColor4( OCEAN_RED, OCEAN_GREEN, OCEAN_BLUE, 1.f ) ),
 	mItemPicked(FALSE),
 	mPanning( FALSE ),
 	mMouseDownPanX( 0 ),
@@ -176,7 +179,8 @@ LLWorldMapView::LLWorldMapView()
 	mMouseDownY( 0 ),
 	mSelectIDStart(0)
 {
-	sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS;
+	//LL_INFOS("World Map") << "Creating the Map -> LLWorldMapView::LLWorldMapView()" << LL_ENDL;
+
 	clearLastClick();
 }
 
@@ -215,6 +219,7 @@ BOOL LLWorldMapView::postBuild()
 
 LLWorldMapView::~LLWorldMapView()
 {
+	//LL_INFOS("World Map") << "Destroying the map -> LLWorldMapView::~LLWorldMapView()" << LL_ENDL;
 	cleanupTextures();
 }
 
@@ -228,14 +233,14 @@ void LLWorldMapView::cleanupTextures()
 // static
 void LLWorldMapView::setScale( F32 scale )
 {
-	if (scale != gMapScale)
+	if (scale != sMapScale)
 	{
-		F32 old_scale = gMapScale;
+		F32 old_scale = sMapScale;
 
-		gMapScale = scale;
-		if (gMapScale == 0.f)
+		sMapScale = scale;
+		if (sMapScale <= 0.f)
 		{
-			gMapScale = 0.1f;
+			sMapScale = 0.1f;
 		}
 
 		F32 ratio = (scale / old_scale);
@@ -243,8 +248,7 @@ void LLWorldMapView::setScale( F32 scale )
 		sPanY *= ratio;
 		sTargetPanX = sPanX;
 		sTargetPanY = sPanY;
-
-		sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS;
+		sVisibleTilesLoaded = false;
 	}
 }
 
@@ -256,6 +260,7 @@ void LLWorldMapView::translatePan( S32 delta_x, S32 delta_y )
 	sPanY += delta_y;
 	sTargetPanX = sPanX;
 	sTargetPanY = sPanY;
+	sVisibleTilesLoaded = false;
 }
 
 
@@ -269,18 +274,22 @@ void LLWorldMapView::setPan( S32 x, S32 y, BOOL snap )
 		sPanX = sTargetPanX;
 		sPanY = sTargetPanY;
 	}
+	sVisibleTilesLoaded = false;
 }
 
+bool LLWorldMapView::showRegionInfo()
+{
+	return (LLWorldMipmap::scaleToLevel(sMapScale) <= DRAW_SIMINFO_THRESHOLD ? true : false);
+}
 
 ///////////////////////////////////////////////////////////////////////////////////
 // HELPERS
 
 BOOL is_agent_in_region(LLViewerRegion* region, LLSimInfo* info)
 {
-	return ((region && info) && (info->mName == region->getName()));
+	return (region && info && info->isName(region->getName()));
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////////
 
 void LLWorldMapView::draw()
@@ -292,7 +301,7 @@ void LLWorldMapView::draw()
 	F64 current_time = LLTimer::getElapsedSeconds();
 
 	mVisibleRegions.clear();
-	
+
 	// animate pan if necessary
 	sPanX = lerp(sPanX, sTargetPanX, LLCriticalDamp::getInterpolant(0.1f));
 	sPanY = lerp(sPanY, sTargetPanY, LLCriticalDamp::getInterpolant(0.1f));
@@ -303,10 +312,12 @@ void LLWorldMapView::draw()
 	const F32 half_height = F32(height) / 2.0f;
 	LLVector3d camera_global = gAgent.getCameraPositionGlobal();
 
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+
 	LLLocalClipRect clip(getLocalRect());
 	{
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	
+
 		glMatrixMode(GL_MODELVIEW);
 
 		// Clear the background alpha to 0
@@ -319,307 +330,59 @@ void LLWorldMapView::draw()
 	}
 
 	gGL.flush();
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setColorMask(true, true);
-	gGL.setSceneBlendType(LLRender::BT_ALPHA);
-
-	F32 layer_alpha = 1.f;
-
-	// Draw one image per layer
-	for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap].size(); ++layer_idx)
-	{
-		if (!LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx].LayerDefined)
-		{
-			continue;
-		}
-		LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[LLWorldMap::getInstance()->mCurrentMap][layer_idx];
-		LLViewerFetchedTexture *current_image = layer->LayerImage;
-
-		if (current_image->isMissingAsset())
-		{
-			continue; // better to draw nothing than the missing asset image
-		}
-		
-		LLVector3d origin_global((F64)layer->LayerExtents.mLeft * REGION_WIDTH_METERS, (F64)layer->LayerExtents.mBottom * REGION_WIDTH_METERS, 0.f);
-
-		// Find x and y position relative to camera's center.
-		LLVector3d rel_region_pos = origin_global - camera_global;
-		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale;
-		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale;
-
-		F32 pix_width = gMapScale*(layer->LayerExtents.getWidth() + 1);
-		F32 pix_height = gMapScale*(layer->LayerExtents.getHeight() + 1);
-
-		// When the view isn't panned, 0,0 = center of rectangle
-		F32 bottom =	sPanY + half_height + relative_y;
-		F32 left =		sPanX + half_width + relative_x;
-		F32 top =		bottom + pix_height;
-		F32 right =		left + pix_width;
-		F32 pixel_area = pix_width*pix_height;
-		// discard layers that are outside the rectangle
-		// and discard small layers
-		if (top < 0.f ||
-			bottom > height ||
-			right < 0.f ||
-			left > width ||
-			(pixel_area < 4*4))
-		{
-			current_image->setBoostLevel(0);
-			continue;
-		}
-		
-		current_image->setBoostLevel(LLViewerTexture::BOOST_MAP);
-		current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY]));
-		
-		if (!current_image->hasGLTexture())
-		{
-			continue; // better to draw nothing than the default image
-		}
-
-// 		LLTextureView::addDebugImage(current_image);
-		
-		// Draw using the texture.  If we don't clamp we get artifact at
-		// the edge.
-		gGL.getTexUnit(0)->bind(current_image);
-
-		// Draw map image into RGB
-		//gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-		gGL.flush();
-		gGL.setColorMask(true, false);
-		gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
-
-		gGL.begin(LLRender::QUADS);
-			gGL.texCoord2f(0.0f, 1.0f);
-			gGL.vertex3f(left, top, -1.0f);
-			gGL.texCoord2f(0.0f, 0.0f);
-			gGL.vertex3f(left, bottom, -1.0f);
-			gGL.texCoord2f(1.0f, 0.0f);
-			gGL.vertex3f(right, bottom, -1.0f);
-			gGL.texCoord2f(1.0f, 1.0f);
-			gGL.vertex3f(right, top, -1.0f);
-		gGL.end();
-
-		// draw an alpha of 1 where the sims are visible
-		gGL.flush();
-		gGL.setColorMask(false, true);
-		gGL.color4f(1.f, 1.f, 1.f, 1.f);
-
-		gGL.begin(LLRender::QUADS);
-			gGL.texCoord2f(0.0f, 1.0f);
-			gGL.vertex2f(left, top);
-			gGL.texCoord2f(0.0f, 0.0f);
-			gGL.vertex2f(left, bottom);
-			gGL.texCoord2f(1.0f, 0.0f);
-			gGL.vertex2f(right, bottom);
-			gGL.texCoord2f(1.0f, 1.0f);
-			gGL.vertex2f(right, top);
-		gGL.end();
-	}
 
+#if 1
+	// Draw the image tiles
+	drawMipmap(width, height);
 	gGL.flush();
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setColorMask(true, true);
 
-	// there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code?
-	F32 sim_alpha = 1.f;
-
-	// Draw one image per region, centered on the camera position.
-	const S32 MAX_SIMULTANEOUS_TEX = 100;
-	const S32 MAX_REQUEST_PER_TICK = 5;
-	const S32 MIN_REQUEST_PER_TICK = 1;
-	S32 textures_requested_this_tick = 0;
-
-	for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
-		 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+	// Draw per sim overlayed information (names, mature, offline...)
+	for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
+		 it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
 	{
-		U64 handle = (*it).first;
-		LLSimInfo* info = (*it).second;
+		U64 handle = it->first;
+		LLSimInfo* info = it->second;
 
-		LLViewerFetchedTexture* simimage = info->mCurrentImage;
-		LLViewerFetchedTexture* overlayimage = info->mOverlayImage;
-
-		if (gMapScale < SIM_MAP_SCALE)
-		{
-			if (simimage != NULL) simimage->setBoostLevel(0);
-			if (overlayimage != NULL) overlayimage->setBoostLevel(0);
-			continue;
-		}
-		
 		LLVector3d origin_global = from_region_handle(handle);
-		LLVector3d camera_global = gAgent.getCameraPositionGlobal();
 
 		// Find x and y position relative to camera's center.
 		LLVector3d rel_region_pos = origin_global - camera_global;
-		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale;
-		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale;
+		F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale;
+		F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale;
 
+		// Coordinates of the sim in pixels in the UI panel
 		// When the view isn't panned, 0,0 = center of rectangle
-		F32 bottom =	sPanY + half_height + relative_y;
-		F32 left =		sPanX + half_width + relative_x;
-		F32 top =		bottom + gMapScale ;
-		F32 right =		left + gMapScale ;
-
-		// Switch to world map texture (if available for this region) if either:
-		// 1. Tiles are zoomed out small enough, or
-		// 2. Sim's texture has not been loaded yet
-		F32 map_scale_cutoff = SIM_MAP_SCALE;
-		if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) > 0)
-		{
-			map_scale_cutoff = SIM_NULL_MAP_SCALE;
-		}
-
-		info->mShowAgentLocations = (gMapScale >= SIM_MAP_AGENT_SCALE);
-
-		bool sim_visible =
-			(gMapScale >= map_scale_cutoff) &&
-			(simimage != NULL) &&
-			(simimage->hasGLTexture());
-
-		if (sim_visible)
-		{
-			// Fade in
-			if (info->mAlpha < 0.0f)
-				info->mAlpha = 1.f; // don't fade initially
-			else
-				info->mAlpha = lerp(info->mAlpha, 1.f, LLCriticalDamp::getInterpolant(0.15f));
-		}
-		else
-		{
-			// Fade out
-			if (info->mAlpha < 0.0f)
-				info->mAlpha = 0.f; // don't fade initially
-			else
-				info->mAlpha = lerp(info->mAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));
-		}
-
-		// discard regions that are outside the rectangle
-		// and discard small regions
-		if (top < 0.f ||
-			bottom > height ||
-			right < 0.f ||
-			left > width )
+		F32 bottom =    sPanY + half_height + relative_y;
+		F32 left =      sPanX + half_width + relative_x;
+		F32 top =       bottom + sMapScale ;
+		F32 right =     left + sMapScale ;
+
+		// Discard if region is outside the screen rectangle (not visible on screen)
+		if ((top < 0.f)   || (bottom > height) ||
+			(right < 0.f) || (left > width)       )
 		{
-			if (simimage != NULL) simimage->setBoostLevel(0);
-			if (overlayimage != NULL) overlayimage->setBoostLevel(0);
+			// Drop the "land for sale" fetching priority since it's outside the view rectangle
+			info->dropImagePriority();
 			continue;
 		}
 
-		if (info->mCurrentImage.isNull())
-		{
-			if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) ||
-				((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) &&
-				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
-			{
-				textures_requested_this_tick++;
-				info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-                info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-				simimage = info->mCurrentImage;
-				gGL.getTexUnit(0)->bind(simimage);
-			}
-		}
-		if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull())
-		{
-			if ((textures_requested_this_tick < MIN_REQUEST_PER_TICK) ||
-				((LLAppViewer::getTextureFetch()->getNumRequests() < MAX_SIMULTANEOUS_TEX) &&
-				 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
-			{
-				textures_requested_this_tick++;
-				info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
-				info->mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP);
-				overlayimage = info->mOverlayImage;
-				gGL.getTexUnit(0)->bind(overlayimage);
-			}
-		}
+		// This list is used by other methods to know which regions are indeed displayed on screen
 
 		mVisibleRegions.push_back(handle);
-		// See if the agents need updating
-		if (current_time - info->mAgentsUpdateTime > AGENTS_UPDATE_TIME)
-		{
-			LLWorldMap::getInstance()->sendItemRequest(MAP_ITEM_AGENT_LOCATIONS, info->mHandle);
-			info->mAgentsUpdateTime = current_time;
-		}
-		
-		// Bias the priority escalation for images nearer
-		LLVector3d center_global = origin_global;
-		center_global.mdV[VX] += 128.0;
-		center_global.mdV[VY] += 128.0;
-
-		S32 draw_size = llround(gMapScale);
-		if (simimage != NULL)
-		{
-			simimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
-			simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
-		}
-
-		if (overlayimage != NULL)
-		{
-			overlayimage->setBoostLevel(LLViewerTexture::BOOST_MAP);
-			overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
-		}
-			
-// 		LLTextureView::addDebugImage(simimage);
 
-		if (sim_visible && info->mAlpha > 0.001f)
+		// Update the agent count for that region if we're not too zoomed out already
+		if (level <= DRAW_SIMINFO_THRESHOLD)
 		{
-			// Draw using the texture.  If we don't clamp we get artifact at
-			// the edge.
-			LLGLSUIDefault gls_ui;
-			if (simimage != NULL)
-				gGL.getTexUnit(0)->bind(simimage);
-
-			gGL.setSceneBlendType(LLRender::BT_ALPHA);
-			F32 alpha = sim_alpha * info->mAlpha;
-			gGL.color4f(1.f, 1.0f, 1.0f, alpha);
-
-			gGL.begin(LLRender::QUADS);
-				gGL.texCoord2f(0.f, 1.f);
-				gGL.vertex3f(left, top, 0.f);
-				gGL.texCoord2f(0.f, 0.f);
-				gGL.vertex3f(left, bottom, 0.f);
-				gGL.texCoord2f(1.f, 0.f);
-				gGL.vertex3f(right, bottom, 0.f);
-				gGL.texCoord2f(1.f, 1.f);
-				gGL.vertex3f(right, top, 0.f);
-			gGL.end();
-
-			if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->hasGLTexture())
-			{
-				gGL.getTexUnit(0)->bind(overlayimage);
-				gGL.color4f(1.f, 1.f, 1.f, alpha);
-				gGL.begin(LLRender::QUADS);
-					gGL.texCoord2f(0.f, 1.f);
-					gGL.vertex3f(left, top, -0.5f);
-					gGL.texCoord2f(0.f, 0.f);
-					gGL.vertex3f(left, bottom, -0.5f);
-					gGL.texCoord2f(1.f, 0.f);
-					gGL.vertex3f(right, bottom, -0.5f);
-					gGL.texCoord2f(1.f, 1.f);
-					gGL.vertex3f(right, top, -0.5f);
-				gGL.end();
-			}
-			
-			if ((info->mRegionFlags & REGION_FLAGS_NULL_LAYER) == 0)
-			{
-				// draw an alpha of 1 where the sims are visible (except NULL sims)
-				gGL.flush();
-				gGL.setSceneBlendType(LLRender::BT_REPLACE);
-				gGL.setColorMask(false, true);
-				gGL.color4f(1.f, 1.f, 1.f, 1.f);
-
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				gGL.begin(LLRender::QUADS);
-					gGL.vertex2f(left, top);
-					gGL.vertex2f(left, bottom);
-					gGL.vertex2f(right, bottom);
-					gGL.vertex2f(right, top);
-				gGL.end();
-
-				gGL.flush();
-				gGL.setColorMask(true, true);
-			}
+			info->updateAgentCount(current_time);
 		}
 
-		if (info->mAccess == SIM_ACCESS_DOWN)
+		if (info->isDown())
 		{
 			// Draw a transparent red square over down sims
 			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
@@ -633,18 +396,15 @@ void LLWorldMapView::draw()
 				gGL.vertex2f(right, top);
 			gGL.end();
 		}
-
-		// As part of the AO project, we no longer want to draw access indicators;
-		// it's too complicated to get all the rules straight and will only 
+        // As part of the AO project, we no longer want to draw access indicators;
+		// it's too complicated to get all the rules straight and will only
 		// cause confusion.
 		/**********************
-		 // If this is mature, and you are not, draw a line across it
-		if (info->mAccess != SIM_ACCESS_DOWN
-			&& info->mAccess > SIM_ACCESS_PG
-			&& gAgent.isTeen())
+        else if (!info->isPG() && gAgent.isTeen())
 		{
+			// If this is a mature region, and you are not, draw a line across it
 			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
-			
+
 			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			gGL.color3f(1.f, 0.f, 0.f);
 			gGL.begin(LLRender::LINES);
@@ -655,68 +415,67 @@ void LLWorldMapView::draw()
 			gGL.end();
 		}
 		 **********************/
-
-		// Draw the region name in the lower left corner
-		LLFontGL* font = LLFontGL::getFontSansSerifSmall();
-
-		std::string mesg;
-		if (gMapScale < sThresholdA)
+		else if (gSavedSettings.getBOOL("MapShowLandForSale") && (level <= DRAW_LANDFORSALE_THRESHOLD))
 		{
+			// Draw the overlay image "Land for Sale / Land for Auction"
+			LLViewerFetchedTexture* overlayimage = info->getLandForSaleImage();
+			if (overlayimage)
+			{
+				// Inform the fetch mechanism of the size we need
+				S32 draw_size = llround(sMapScale);
+				overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY]));
+				// Draw something whenever we have enough info
+				if (overlayimage->hasGLTexture())
+				{
+					gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
+					gGL.getTexUnit(0)->bind(overlayimage);
+					gGL.color4f(1.f, 1.f, 1.f, 1.f);
+					gGL.begin(LLRender::QUADS);
+						gGL.texCoord2f(0.f, 1.f);
+						gGL.vertex3f(left, top, -0.5f);
+						gGL.texCoord2f(0.f, 0.f);
+						gGL.vertex3f(left, bottom, -0.5f);
+						gGL.texCoord2f(1.f, 0.f);
+						gGL.vertex3f(right, bottom, -0.5f);
+						gGL.texCoord2f(1.f, 1.f);
+						gGL.vertex3f(right, top, -0.5f);
+					gGL.end();
+				}
+			}
 		}
-		else if (gMapScale < sThresholdB)
+		else
 		{
-			//	mesg = llformat( info->mAgents);
+			// If we're not displaying the "land for sale", drop its fetching priority
+			info->dropImagePriority();
 		}
-		else
+
+		// Draw the region name in the lower left corner
+		if (sMapScale >= DRAW_TEXT_THRESHOLD)
 		{
-			//mesg = llformat("%d / %s (%s)",
-			//			info->mAgents,
-			//			info->mName.c_str(),
-			//			LLViewerRegion::accessToShortString(info->mAccess).c_str() );
-			if (info->mAccess == SIM_ACCESS_DOWN)
+			LLFontGL* font = LLFontGL::getFontSansSerifSmall();
+			std::string mesg;
+			if (info->isDown())
 			{
-				mesg = llformat( "%s (%s)", info->mName.c_str(), sStringsMap["offline"].c_str());
+				mesg = llformat( "%s (%s)", info->getName().c_str(), sStringsMap["offline"].c_str());
 			}
 			else
 			{
-				mesg = info->mName;
+				mesg = info->getName();
 			}
-		}
-
-		if (!mesg.empty())
-		{
-			font->renderUTF8(
-				mesg, 0,
-				llfloor(left + 3), 
-				llfloor(bottom + 2),
-				LLColor4::white,
-				LLFontGL::LEFT,
-				LLFontGL::BASELINE,
-				LLFontGL::NORMAL,
-				LLFontGL::DROP_SHADOW);
-			
-			// If map texture is still loading,
-			// display "Loading" placeholder text.
-			if ((simimage != NULL) &&
-				simimage->getDiscardLevel() != 1 &&
-				simimage->getDiscardLevel() != 0)
+			if (!mesg.empty())
 			{
 				font->renderUTF8(
-					sStringsMap["loading"], 0,
-					llfloor(left + 18), 
-					llfloor(top - 25),
+					mesg, 0,
+					llfloor(left + 3), llfloor(bottom + 2),
 					LLColor4::white,
-					LLFontGL::LEFT,
-					LLFontGL::BASELINE,
-					LLFontGL::NORMAL,
-					LLFontGL::DROP_SHADOW);			
+					LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW);
 			}
 		}
 	}
-	// #endif used to be here
+	#endif
 
 
-	// there used to be an #if 1 here, but it was uncommented; perhaps marking a block of code?
+	#if 1
 	// Draw background rectangle
 	LLGLSUIDefault gls_ui;
 	{
@@ -726,69 +485,49 @@ void LLWorldMapView::draw()
 		gGL.color4fv( mBackgroundColor.mV );
 		gl_rect_2d(0, height, width, 0);
 	}
-	
+
 	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
-	// Infohubs
-	if (gSavedSettings.getBOOL("MapShowInfohubs"))   //(gMapScale >= sThresholdB)
+	// Draw item infos if we're not zoomed out too much and there's something to draw
+	if ((level <= DRAW_SIMINFO_THRESHOLD) && (gSavedSettings.getBOOL("MapShowInfohubs") || 
+											  gSavedSettings.getBOOL("MapShowTelehubs") ||
+											  gSavedSettings.getBOOL("MapShowLandForSale") || 
+											  gSavedSettings.getBOOL("MapShowEvents") || 
+											  gSavedSettings.getBOOL("ShowMatureEvents") ||
+											  gSavedSettings.getBOOL("ShowAdultEvents")))
 	{
-		drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage);
+		drawItems();
 	}
 
-	// Telehubs
-	if (gSavedSettings.getBOOL("MapShowTelehubs"))   //(gMapScale >= sThresholdB)
-	{
-		drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage);
-	}
-
-	// Home Sweet Home
+	// Draw the Home location (always)
 	LLVector3d home;
 	if (gAgent.getHomePosGlobal(&home))
 	{
 		drawImage(home, sHomeImage);
 	}
 
-	if (gSavedSettings.getBOOL("MapShowLandForSale"))
-	{
-		drawGenericItems(LLWorldMap::getInstance()->mLandForSale, sForSaleImage);
-		// for 1.23, we're showing normal land and adult land in the same UI; you don't
-		// get a choice about which ones you want. If you're currently asking for adult
-		// content and land you'll get the adult land.
-		if (gAgent.canAccessAdult())
-		{
-			drawGenericItems(LLWorldMap::getInstance()->mLandForSaleAdult, sForSaleAdultImage);
-		}
-	}
-	
-	if (gSavedSettings.getBOOL("MapShowEvents") ||
-		gSavedSettings.getBOOL("ShowMatureEvents") ||
-		gSavedSettings.getBOOL("ShowAdultEvents") )
-	{
-		drawEvents();
-	}
-
-	// Now draw your avatar after all that other stuff.
+	// Draw the current agent after all that other stuff.
 	LLVector3d pos_global = gAgent.getPositionGlobal();
-	drawImage(pos_global, sAvatarLargeImage);
+	drawImage(pos_global, sAvatarYouImage);
 
 	LLVector3 pos_map = globalPosToView(pos_global);
 	if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY])))
 	{
-		drawTracking(pos_global, 
-			lerp(LLColor4::yellow, LLColor4::orange, 0.4f), 
-			TRUE, 
-			"You are here", 
-			"", 
-			llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking
+		drawTracking(pos_global,
+					 lerp(LLColor4::yellow, LLColor4::orange, 0.4f),
+					 TRUE,
+					 "You are here",
+					 "",
+					 llround(LLFontGL::getFontSansSerifSmall()->getLineHeight())); // offset vertically by one line, to avoid overlap with target tracking
 	}
 
-	// Show your viewing angle
+	// Draw the current agent viewing angle
 	drawFrustum();
 
 	// Draw icons for the avatars in each region.
-	// Drawn after your avatar so you can see nearby people.
-	if (gSavedSettings.getBOOL("MapShowPeople"))
+	// Drawn this after the current agent avatar so one can see nearby people
+	if (gSavedSettings.getBOOL("MapShowPeople") && (level <= DRAW_SIMINFO_THRESHOLD))
 	{
 		drawAgents();
 	}
@@ -798,9 +537,9 @@ void LLWorldMapView::draw()
 	if ( LLTracker::TRACKING_AVATAR == tracking_status )
 	{
 		drawTracking( LLAvatarTracker::instance().getGlobalPos(), map_track_color, TRUE, LLTracker::getLabel(), "" );
-	} 
-	else if ( LLTracker::TRACKING_LANDMARK == tracking_status 
-			 || LLTracker::TRACKING_LOCATION == tracking_status )
+	}
+	else if ( LLTracker::TRACKING_LANDMARK == tracking_status
+			  || LLTracker::TRACKING_LOCATION == tracking_status )
 	{
 		// While fetching landmarks, will have 0,0,0 location for a while,
 		// so don't draw. JC
@@ -810,31 +549,33 @@ void LLWorldMapView::draw()
 			drawTracking( pos_global, map_track_color, TRUE, LLTracker::getLabel(), LLTracker::getToolTip() );
 		}
 	}
-	else if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+	else if (LLWorldMap::getInstance()->isTracking())
 	{
-		if (LLWorldMap::getInstance()->mInvalidLocation)
+		if (LLWorldMap::getInstance()->isTrackingInvalidLocation())
 		{
-			// We know this location to be invalid
+			// We know this location to be invalid, draw a blue circle
 			LLColor4 loading_color(0.0, 0.5, 1.0, 1.0);
-			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("InvalidLocation"), "");
+			drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("InvalidLocation"), "");
 		}
 		else
 		{
+			// We don't know yet what that location is, draw a throbing blue circle
 			double value = fmod(current_time, 2);
-			value = 0.5 + 0.5*cos(value * 3.14159f);
+			value = 0.5 + 0.5*cos(value * F_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
-			drawTracking( LLWorldMap::getInstance()->mUnknownLocation, loading_color, TRUE, getString("Loading"), "");
+			drawTracking( LLWorldMap::getInstance()->getTrackedPositionGlobal(), loading_color, TRUE, getString("Loading"), "");
 		}
 	}
-	// #endif used to be here
-	
+	#endif
+
 	// turn off the scissor
 	LLGLDisable no_scissor(GL_SCISSOR_TEST);
-	
+
 	updateDirections();
 
 	LLView::draw();
 
+	// Get sim info for all sims in view
 	updateVisibleBlocks();
 } // end draw()
 
@@ -845,36 +586,182 @@ void LLWorldMapView::setVisible(BOOL visible)
 	LLPanel::setVisible(visible);
 	if (!visible)
 	{
-		for (S32 map = 0; map < MAP_SIM_IMAGE_TYPES; map++)
+		// Drop the download of tiles and images priority to nil if we hide the map
+		LLWorldMap::getInstance()->dropImagePriorities();
+	}
+}
+
+void LLWorldMapView::drawMipmap(S32 width, S32 height)
+{
+	// Compute the level of the mipmap to use for the current scale level
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+	// Set the tile boost level so that unused tiles get to 0
+	LLWorldMap::getInstance()->equalizeBoostLevels();
+
+	// Render whatever we already have loaded if we haven't the current level
+	// complete and use it as a background (scaled up or scaled down)
+	if (!sVisibleTilesLoaded)
+	{
+		// Note: the (load = false) parameter avoids missing tiles to be fetched (i.e. we render what we have, no more)
+		// Check all the lower res levels and render them in reverse order (worse to best)
+		// We need to traverse all the levels as the user can zoom in very fast
+		for (S32 l = LLWorldMipmap::MAP_LEVELS; l > level; l--)
 		{
-			for (U32 layer_idx=0; layer_idx<LLWorldMap::getInstance()->mMapLayers[map].size(); ++layer_idx)
-			{
-				if (LLWorldMap::getInstance()->mMapLayers[map][layer_idx].LayerDefined)
-				{
-					LLWorldMapLayer *layer = &LLWorldMap::getInstance()->mMapLayers[map][layer_idx];
-					layer->LayerImage->setBoostLevel(0);
-				}
-			}
+			drawMipmapLevel(width, height, l, false);
 		}
-		for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
-			 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
+		// Skip the current level, as we'll do it anyway here under...
+
+		// Just go one level down in res as it can really get too much stuff 
+		// when zooming out and too small to see anyway...
+		if (level > 1)
 		{
-			LLSimInfo* info = (*it).second;
-			if (info->mCurrentImage.notNull())
+			drawMipmapLevel(width, height, level - 1, false);
+		}
+	}
+	else
+	{
+		//LL_INFOS("World Map") << "Render complete, don't draw background..." << LL_ENDL;
+	}
+
+	// Render the current level
+	sVisibleTilesLoaded = drawMipmapLevel(width, height, level);
+
+	return;
+}
+
+// Return true if all the tiles required to render that level have been fetched or are truly missing
+bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load)
+{
+	// Check input level
+	llassert (level > 0);
+	if (level <= 0)
+		return false;
+
+	// Count tiles hit and completed
+	S32 completed_tiles = 0;
+	S32 total_tiles = 0;
+
+	// Size in meters (global) of each tile of that level
+	S32 tile_width = LLWorldMipmap::MAP_TILE_SIZE * (1 << (level - 1));
+	// Dimension of the screen in meter at that scale
+	LLVector3d pos_SW = viewPosToGlobal(0, 0);
+	LLVector3d pos_NE = viewPosToGlobal(width, height);
+	// Add external band of tiles on the outskirt so to hit the partially displayed tiles right and top
+	pos_NE[VX] += tile_width;
+	pos_NE[VY] += tile_width;
+
+	// Iterate through the tiles on screen: we just need to ask for one tile every tile_width meters
+	U32 grid_x, grid_y;
+	for (F64 index_y = pos_SW[VY]; index_y < pos_NE[VY]; index_y += tile_width)
+	{
+		for (F64 index_x = pos_SW[VX]; index_x < pos_NE[VX]; index_x += tile_width)
+		{
+			// Compute the world coordinates of the current point
+			LLVector3d pos_global(index_x, index_y, pos_SW[VZ]);
+			// Convert to the mipmap level coordinates for that point (i.e. which tile to we hit)
+			LLWorldMipmap::globalToMipmap(pos_global[VX], pos_global[VY], level, &grid_x, &grid_y);
+			// Get the tile. Note: NULL means that the image does not exist (so it's considered "complete" as far as fetching is concerned)
+			LLPointer<LLViewerFetchedTexture> simimage = LLWorldMap::getInstance()->getObjectsTile(grid_x, grid_y, level, load);
+			if (simimage)
 			{
-				info->mCurrentImage->setBoostLevel(0);
+				// Checks that the image has a valid texture
+				if (simimage->hasGLTexture())
+				{
+					// Increment the number of completly fetched tiles
+					completed_tiles++;
+
+					// Convert those coordinates (SW corner of the mipmap tile) into world (meters) coordinates
+					pos_global[VX] = grid_x * REGION_WIDTH_METERS;
+					pos_global[VY] = grid_y * REGION_WIDTH_METERS;
+					// Now to screen coordinates for SW corner of that tile
+					LLVector3 pos_screen = globalPosToView (pos_global);
+					F32 left   = pos_screen[VX];
+					F32 bottom = pos_screen[VY];
+					// Compute the NE corner coordinates of the tile now
+					pos_global[VX] += tile_width;
+					pos_global[VY] += tile_width;
+					pos_screen = globalPosToView (pos_global);
+					F32 right  = pos_screen[VX];
+					F32 top    = pos_screen[VY];
+
+					// Draw the tile
+					LLGLSUIDefault gls_ui;
+					gGL.getTexUnit(0)->bind(simimage.get());
+					simimage->setAddressMode(LLTexUnit::TAM_CLAMP);
+
+					gGL.setSceneBlendType(LLRender::BT_ALPHA);
+					gGL.color4f(1.f, 1.0f, 1.0f, 1.0f);
+
+					gGL.begin(LLRender::QUADS);
+						gGL.texCoord2f(0.f, 1.f);
+						gGL.vertex3f(left, top, 0.f);
+						gGL.texCoord2f(0.f, 0.f);
+						gGL.vertex3f(left, bottom, 0.f);
+						gGL.texCoord2f(1.f, 0.f);
+						gGL.vertex3f(right, bottom, 0.f);
+						gGL.texCoord2f(1.f, 1.f);
+						gGL.vertex3f(right, top, 0.f);
+					gGL.end();
+#if DEBUG_DRAW_TILE
+					drawTileOutline(level, top, left, bottom, right);
+#endif // DEBUG_DRAW_TILE
+				}
+				//else
+				//{
+				//	Waiting for a tile -> the level is not complete
+				//	LL_INFOS("World Map") << "Unfetched tile. level = " << level << LL_ENDL;
+				//}
 			}
-			if (info->mOverlayImage.notNull())
+			else
 			{
-				info->mOverlayImage->setBoostLevel(0);
+				// Unexistent tiles are counted as "completed"
+				completed_tiles++;
 			}
+			// Increment the number of tiles in that level / screen
+			total_tiles++;
 		}
 	}
+	return (completed_tiles == total_tiles);
+}
+
+// Draw lines (rectangle outline and cross) to visualize the position of the tile
+// Used for debug only
+void LLWorldMapView::drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right)
+{
+	gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
+	
+	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	if (level == 1)
+		gGL.color3f(1.f, 0.f, 0.f);		// red
+	else if (level == 2)
+		gGL.color3f(0.f, 1.f, 0.f);		// green
+	else if (level == 3)
+		gGL.color3f(0.f, 0.f, 1.f);		// blue
+	else if (level == 4)
+		gGL.color3f(1.f, 1.f, 0.f);		// yellow
+	else if (level == 5)
+		gGL.color3f(1.f, 0.f, 1.f);		// magenta
+	else if (level == 6)
+		gGL.color3f(0.f, 1.f, 1.f);		// cyan
+	else if (level == 7)
+		gGL.color3f(1.f, 1.f, 1.f);		// white
+	else
+		gGL.color3f(0.f, 0.f, 0.f);		// black
+	gGL.begin(LLRender::LINE_STRIP);
+		gGL.vertex2f(left, top);
+		gGL.vertex2f(right, bottom);
+		gGL.vertex2f(left, bottom);
+		gGL.vertex2f(right, top);
+		gGL.vertex2f(left, top);
+		gGL.vertex2f(left, bottom);
+		gGL.vertex2f(right, bottom);
+		gGL.vertex2f(right, top);
+	gGL.end();
 }
 
-void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image)
+void LLWorldMapView::drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image)
 {
-	LLWorldMap::item_info_list_t::const_iterator e;
+	LLSimInfo::item_info_list_t::const_iterator e;
 	for (e = items.begin(); e != items.end(); ++e)
 	{
 		drawGenericItem(*e, image);
@@ -883,7 +770,7 @@ void LLWorldMapView::drawGenericItems(const LLWorldMap::item_info_list_t& items,
 
 void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)
 {
-	drawImage(item.mPosGlobal, image);
+	drawImage(item.getGlobalPosition(), image);
 }
 
 
@@ -906,137 +793,91 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i
 	}
 }
 
-
-void LLWorldMapView::drawAgents()
+void LLWorldMapView::drawItems()
 {
-	static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);
-	static LLUIColor map_avatar_friend_color = LLUIColorTable::instance().getColor("MapAvatarFriendColor", LLColor4::white);
-	
-	F32 agents_scale = (gMapScale * 0.9f) / 256.f;
+	bool mature_enabled = gAgent.canAccessMature();
+	bool adult_enabled = gAgent.canAccessAdult();
+
+    BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents");
+	BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents");
 
 	for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 	{
 		U64 handle = *iter;
-		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
-		if (siminfo && (siminfo->mAccess == SIM_ACCESS_DOWN))
+		LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if ((info == NULL) || (info->isDown()))
 		{
 			continue;
 		}
-		LLWorldMap::agent_list_map_t::iterator counts_iter = LLWorldMap::getInstance()->mAgentLocationsMap.find(handle);
-		if (siminfo && siminfo->mShowAgentLocations && counts_iter != LLWorldMap::getInstance()->mAgentLocationsMap.end())
+		// Infohubs
+		if (gSavedSettings.getBOOL("MapShowInfohubs"))
 		{
-			// Show Individual agents (or little stacks where real agents are)
-			LLWorldMap::item_info_list_t& agentcounts = counts_iter->second;
-			S32 sim_agent_count = 0;
-			for (LLWorldMap::item_info_list_t::iterator iter = agentcounts.begin();
-				 iter != agentcounts.end(); ++iter)
-			{
-				const LLItemInfo& info = *iter;
-				S32 agent_count = info.mExtra;
-				sim_agent_count += info.mExtra;
-				// Here's how we'd choose the color if info.mID were available but it's not being sent:
-				//LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? map_avatar_friend_color : map_avatar_color;
-				drawImageStack(info.mPosGlobal, sAvatarSmallImage, agent_count, 3.f, map_avatar_color);
-			}
-			LLWorldMap::getInstance()->mNumAgents[handle] = sim_agent_count; // override mNumAgents for this sim
+			drawGenericItems(info->getInfoHub(), sInfohubImage);
 		}
-		else
+		// Telehubs
+		if (gSavedSettings.getBOOL("MapShowTelehubs"))
+		{
+			drawGenericItems(info->getTeleHub(), sTelehubImage);
+		}
+		// Land for sale
+		if (gSavedSettings.getBOOL("MapShowLandForSale"))
 		{
-			// Show agent 'stack' at center of sim
-			S32 num_agents = LLWorldMap::getInstance()->mNumAgents[handle];
-			if (num_agents > 0)
+			drawGenericItems(info->getLandForSale(), sForSaleImage);
+			// for 1.23, we're showing normal land and adult land in the same UI; you don't
+			// get a choice about which ones you want. If you're currently asking for adult
+			// content and land you'll get the adult land.
+			if (gAgent.canAccessAdult())
 			{
-				LLVector3d region_center = from_region_handle(handle);
-				region_center[VX] += REGION_WIDTH_METERS / 2;
-				region_center[VY] += REGION_WIDTH_METERS / 2;
-				// Reduce the stack size as you zoom out - always display at lease one agent where there is one or more
-				S32 agent_count = (S32)(((num_agents-1) * agents_scale + (num_agents-1) * 0.1f)+.1f) + 1;
-				drawImageStack(region_center, sAvatarSmallImage, agent_count, 3.f, map_avatar_color);
+				drawGenericItems(info->getLandForSaleAdult(), sForSaleAdultImage);
 			}
 		}
+		// PG Events
+		if (gSavedSettings.getBOOL("MapShowEvents"))
+		{
+			drawGenericItems(info->getPGEvent(), sEventImage);
+		}
+		// Mature Events
+		if (show_mature)
+		{
+			drawGenericItems(info->getMatureEvent(), sEventMatureImage);
+		}
+		// Adult Events
+		if (show_adult)
+		{
+			drawGenericItems(info->getAdultEvent(), sEventAdultImage);
+		}
 	}
 }
 
-
-void LLWorldMapView::drawEvents()
+void LLWorldMapView::drawAgents()
 {
-	bool mature_enabled = gAgent.canAccessMature();
-	bool adult_enabled = gAgent.canAccessAdult();
-
-	BOOL show_pg = gSavedSettings.getBOOL("MapShowEvents");
-    BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents");
-	BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents");
+	static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);
 
-    // First the non-selected events
-    LLWorldMap::item_info_list_t::const_iterator e;
-	if (show_pg)
+	for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 	{
-		for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
+		U64 handle = *iter;
+		LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+		if ((siminfo == NULL) || (siminfo->isDown()))
 		{
-			if (!e->mSelected)
-			{
-				drawGenericItem(*e, sEventImage);   
-			}
+			continue;
 		}
-	}
-    if (show_mature)
-    {
-        for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
-        {
-            if (!e->mSelected)
-            {
-                drawGenericItem(*e, sEventMatureImage);       
-            }
-        }
-    }
-	if (show_adult)
-    {
-        for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e)
-        {
-            if (!e->mSelected)
-            {
-                drawGenericItem(*e, sEventAdultImage);       
-            }
-        }
-    }
-    // Then the selected events
-	if (show_pg)
-	{
-		for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e)
+		LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAgentLocation().begin();
+		while (it != siminfo->getAgentLocation().end())
 		{
-			if (e->mSelected)
-			{
-				drawGenericItem(*e, sEventImage);
-			}
+			// Show Individual agents (or little stacks where real agents are)
+
+			// Here's how we'd choose the color if info.mID were available but it's not being sent:
+			// LLColor4 color = (agent_count == 1 && is_agent_friend(info.mID)) ? friend_color : avatar_color;
+			drawImageStack(it->getGlobalPosition(), sAvatarSmallImage, it->getCount(), 3.f, map_avatar_color);
+			++it;
 		}
 	}
-    if (show_mature)
-    {
-        for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e)
-        {
-            if (e->mSelected)
-            {
-                drawGenericItem(*e, sEventMatureImage);       
-            }
-        }
-    }
-	if (show_adult)
-    {
-        for (e = LLWorldMap::getInstance()->mAdultEvents.begin(); e != LLWorldMap::getInstance()->mAdultEvents.end(); ++e)
-        {
-            if (e->mSelected)
-            {
-                drawGenericItem(*e, sEventAdultImage);       
-            }
-        }
-    }
 }
 
-
 void LLWorldMapView::drawFrustum()
 {
 	// Draw frustum
-	F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS;
+	F32 meters_to_pixels = sMapScale/ REGION_WIDTH_METERS;
 
 	F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
 	F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
@@ -1077,8 +918,8 @@ LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos )
 	LLVector3 pos_local;
 	pos_local.setVec(relative_pos_global);  // convert to floats from doubles
 
-	pos_local.mV[VX] *= sPixelsPerMeter;
-	pos_local.mV[VY] *= sPixelsPerMeter;
+	pos_local.mV[VX] *= sMapScale / REGION_WIDTH_METERS;
+	pos_local.mV[VY] *= sMapScale / REGION_WIDTH_METERS;
 	// leave Z component in meters
 
 
@@ -1162,7 +1003,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
 
 	LLVector3 pos_local( (F32)x, (F32)y, 0.f );
 
-	pos_local *= ( REGION_WIDTH_METERS / gMapScale );
+	pos_local *= ( REGION_WIDTH_METERS / sMapScale );
 	
 	LLVector3d pos_global;
 	pos_global.setVec( pos_local );
@@ -1183,23 +1024,20 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
 BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 {
 	LLVector3d pos_global = viewPosToGlobal(x, y);
-
+	U64 handle = to_region_handle(pos_global);
 	std::string tooltip_msg;
 
-	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
+	LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
 	if (info)
 	{
 		LLViewerRegion *region = gAgent.getRegion();
 
-		std::string message = 
-			llformat("%s (%s)",
-					 info->mName.c_str(),
-					 LLViewerRegion::accessToString(info->mAccess).c_str());
+		std::string message = llformat("%s (%s)", info->getName().c_str(), info->getAccessString().c_str());
 
-		if (info->mAccess != SIM_ACCESS_DOWN)
+		if (!info->isDown())
 		{
-			S32 agent_count = LLWorldMap::getInstance()->mNumAgents[info->mHandle];			
-			if (region && region->getHandle() == info->mHandle)
+			S32 agent_count = info->getAgentCount();			
+			if (region && (region->getHandle() == handle))
 			{
 				++agent_count; // Bump by 1 if we're here
 			}
@@ -1208,6 +1046,8 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 			// zoomed out, so don't display anything about the count. JC
 			if (agent_count > 0)
 			{
+				// Merov: i18n horror!!! Even using gettext(), concatenating strings is not localizable. 
+				// The singular/plural switch form here under might make no sense in some languages. Don't do that.
 				message += llformat("\n%d ", agent_count);
 
 				if (agent_count == 1)
@@ -1223,7 +1063,7 @@ BOOL LLWorldMapView::handleToolTip( S32 x, S32 y, MASK mask )
 		tooltip_msg.assign( message );
 
 		// Optionally show region flags
-		std::string region_flags = LLViewerRegion::regionFlagsToString(info->mRegionFlags);
+		std::string region_flags = info->getFlagsString();
 
 		if (!region_flags.empty())
 		{
@@ -1263,6 +1103,9 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
 	}
 	else
 	{
+		// Draw V indicator for above or below
+		// *TODO: Replace this vector drawing with icons
+		
 		F32 left =		x_pixels - dot_radius;
 		F32 right =		x_pixels + dot_radius;
 		F32 center = (left + right) * 0.5f;
@@ -1271,13 +1114,14 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
 
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 		gGL.color4fv( color.mV );
-		LLUI::setLineWidth(1.5f);
-		F32 h_bar = relative_z > HEIGHT_THRESHOLD ? top : bottom; // horizontal bar Y
+		LLUI::setLineWidth(3.0f);
+		F32 point = relative_z > HEIGHT_THRESHOLD ? top : bottom; // Y pos of the point of the V
+		F32 back = relative_z > HEIGHT_THRESHOLD ? bottom : top; // Y pos of the ends of the V
 		gGL.begin( LLRender::LINES );
-			gGL.vertex2f(center, top);
-			gGL.vertex2f(left, h_bar);
-			gGL.vertex2f(right, h_bar);
-			gGL.vertex2f(right, bottom);
+			gGL.vertex2f(left, back);
+			gGL.vertex2f(center, point);
+			gGL.vertex2f(center, point);
+			gGL.vertex2f(right, back);
 		gGL.end();
 		LLUI::setLineWidth(1.0f);
 	}
@@ -1292,7 +1136,7 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
 								F32 dot_radius)
 {
 	const F32 HEIGHT_THRESHOLD = 7.f;
-	LLUIImagePtr dot_image = sAvatarSmallImage;
+	LLUIImagePtr dot_image = sAvatarLevelImage;
 	if(relative_z < -HEIGHT_THRESHOLD) 
 	{
 		dot_image = sAvatarBelowImage; 
@@ -1301,10 +1145,12 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
 	{ 
 		dot_image = sAvatarAboveImage;
 	}
-	dot_image->draw(
-		llround(x_pixels) - dot_image->getWidth()/2,
-		llround(y_pixels) - dot_image->getHeight()/2, 
-		color);
+	S32 dot_width = llround(dot_radius * 2.f);
+	dot_image->draw(llround(x_pixels - dot_radius),
+					llround(y_pixels - dot_radius),
+					dot_width,
+					dot_width,
+					color);
 }
 
 // Pass relative Z of 0 to draw at same level.
@@ -1565,7 +1411,7 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent )
 
 bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track)
 {
-	LLVector3 pos_view = globalPosToView(item.mPosGlobal);
+	LLVector3 pos_view = globalPosToView(item.getGlobalPosition());
 	S32 item_x = llround(pos_view.mV[VX]);
 	S32 item_y = llround(pos_view.mV[VY]);
 
@@ -1574,12 +1420,12 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
 	if (y < item_y - BIG_DOT_RADIUS) return false;
 	if (y > item_y + BIG_DOT_RADIUS) return false;
 
-	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.mRegionHandle);
+	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(item.getRegionHandle());
 	if (sim_info)
 	{
 		if (track)
 		{
-			gFloaterWorldMap->trackLocation(item.mPosGlobal);
+			gFloaterWorldMap->trackLocation(item.getGlobalPosition());
 		}
 	}
 
@@ -1588,8 +1434,8 @@ bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bo
 		gFloaterWorldMap->trackGenericItem(item);
 	}
 
-	item.mSelected = TRUE;
-	*id = item.mID;
+//	item.setSelected(true);
+	*id = item.getUUID();
 
 	return true;
 }
@@ -1612,108 +1458,116 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
 
 	*hit_type = 0; // hit nothing
 
-	LLWorldMap::getInstance()->mIsTrackingUnknownLocation = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingDoubleClick = FALSE;
-	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
+	LLWorldMap::getInstance()->cancelTracking();
 
-	LLWorldMap::item_info_list_t::iterator it;
-
-	// clear old selected stuff
-	for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
+	S32 level = LLWorldMipmap::scaleToLevel(sMapScale);
+	// If the zoom level is not too far out already, test hits
+	if (level <= DRAW_SIMINFO_THRESHOLD)
 	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-	for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
-	{
-		(*it).mSelected = FALSE;
-	}
-
-	// Select event you clicked on
-	if (gSavedSettings.getBOOL("MapShowEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mPGEvents.begin(); it != LLWorldMap::getInstance()->mPGEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_PG_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
-	if (gSavedSettings.getBOOL("ShowMatureEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_MATURE_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
-	if (gSavedSettings.getBOOL("ShowAdultEvents"))
-	{
-		for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it)
-		{
-			LLItemInfo& event = *it;
-
-			if (checkItemHit(x, y, event, id, false))
-			{
-				*hit_type = MAP_ITEM_ADULT_EVENT;
-				mItemPicked = TRUE;
-				gFloaterWorldMap->trackEvent(event);
-				return;
-			}
-		}
-	}
-
-	if (gSavedSettings.getBOOL("MapShowLandForSale"))
-	{
-		for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
-		{
-			LLItemInfo& land = *it;
+		bool show_mature = gAgent.canAccessMature() && gSavedSettings.getBOOL("ShowMatureEvents");
+		bool show_adult = gAgent.canAccessAdult() && gSavedSettings.getBOOL("ShowAdultEvents");
 
-			if (checkItemHit(x, y, land, id, true))
-			{
-				*hit_type = MAP_ITEM_LAND_FOR_SALE;
-				mItemPicked = TRUE;
-				return;
-			}
-		}
-		
-		for (it = LLWorldMap::getInstance()->mLandForSaleAdult.begin(); it != LLWorldMap::getInstance()->mLandForSaleAdult.end(); ++it)
+		// Test hits if trackable data are displayed, otherwise, we don't even bother
+		if (gSavedSettings.getBOOL("MapShowEvents") || show_mature || show_adult || gSavedSettings.getBOOL("MapShowLandForSale"))
 		{
-			LLItemInfo& land = *it;
-
-			if (checkItemHit(x, y, land, id, true))
+			// Iterate through the visible regions
+			for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
 			{
-				*hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT;
-				mItemPicked = TRUE;
-				return;
+				U64 handle = *iter;
+				LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
+				if ((siminfo == NULL) || (siminfo->isDown()))
+				{
+					continue;
+				}
+				// If on screen check hits with the visible item lists
+				if (gSavedSettings.getBOOL("MapShowEvents"))
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getPGEvent().begin();
+					while (it != siminfo->getPGEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_PG_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (show_mature)
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getMatureEvent().begin();
+					while (it != siminfo->getMatureEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_MATURE_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (show_adult)
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getAdultEvent().begin();
+					while (it != siminfo->getAdultEvent().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, false))
+						{
+							*hit_type = MAP_ITEM_ADULT_EVENT;
+							mItemPicked = TRUE;
+							gFloaterWorldMap->trackEvent(event);
+							return;
+						}
+						++it;
+					}
+				}
+				if (gSavedSettings.getBOOL("MapShowLandForSale"))
+				{
+					LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSale().begin();
+					while (it != siminfo->getLandForSale().end())
+					{
+						LLItemInfo event = *it;
+						if (checkItemHit(x, y, event, id, true))
+						{
+							*hit_type = MAP_ITEM_LAND_FOR_SALE;
+							mItemPicked = TRUE;
+							return;
+						}
+						++it;
+					}
+					// for 1.23, we're showing normal land and adult land in the same UI; you don't
+					// get a choice about which ones you want. If you're currently asking for adult
+					// content and land you'll get the adult land.
+					if (gAgent.canAccessAdult())
+					{
+						LLSimInfo::item_info_list_t::const_iterator it = siminfo->getLandForSaleAdult().begin();
+						while (it != siminfo->getLandForSaleAdult().end())
+						{
+							LLItemInfo event = *it;
+							if (checkItemHit(x, y, event, id, true))
+							{
+								*hit_type = MAP_ITEM_LAND_FOR_SALE_ADULT;
+								mItemPicked = TRUE;
+								return;
+							}
+							++it;
+						}
+					}
+				}
 			}
 		}
 	}
-	// If we get here, we haven't clicked on an icon
 
+	// If we get here, we haven't clicked on anything
 	gFloaterWorldMap->trackLocation(pos_global);
 	mItemPicked = FALSE;
-
 	*id = LLUUID::null;
 	return;
 }
@@ -1774,59 +1628,36 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
 	return FALSE;
 }
 
-U32 LLWorldMapView::updateBlock(S32 block_x, S32 block_y)
+void LLWorldMapView::updateVisibleBlocks()
 {
-	U32 blocks_requested = 0;
-	S32 offset = block_x | (block_y * MAP_BLOCK_RES);
-	if (!LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset])
+	if (LLWorldMipmap::scaleToLevel(sMapScale) > DRAW_SIMINFO_THRESHOLD)
 	{
-// 		llinfos << "Loading Block (" << block_x << "," << block_y << ")" << llendl;
-		LLWorldMap::getInstance()->sendMapBlockRequest(block_x << 3, block_y << 3, (block_x << 3) + 7, (block_y << 3) + 7);
-		LLWorldMap::getInstance()->mMapBlockLoaded[LLWorldMap::getInstance()->mCurrentMap][offset] = TRUE;
-		blocks_requested++;
+		// If we're zoomed out too much, we just don't load all those sim info: too much!
+		return;
 	}
-	return blocks_requested;
-}
 
-U32 LLWorldMapView::updateVisibleBlocks()
-{
-	if (gMapScale < SIM_MAP_SCALE)
-	{
-		// We don't care what is loaded if we're zoomed out
-		return 0;
-	}
+	// Load the blocks visible in the current World Map view
 
+	// Get the World Map view coordinates and boundaries
 	LLVector3d camera_global = gAgent.getCameraPositionGlobal();
-	
-	F32 pixels_per_region = gMapScale;
 	const S32 width = getRect().getWidth();
 	const S32 height = getRect().getHeight();
-	// Convert pan to sim coordinates
-	S32 world_center_x_lo = S32(((-sPanX - width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
-	S32 world_center_x_hi = S32(((-sPanX + width/2) / pixels_per_region) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
-	S32 world_center_y_lo = S32(((-sPanY - height/2) / pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
-	S32 world_center_y_hi = S32(((-sPanY + height/2)/ pixels_per_region) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
-	
-	// Find the corresponding 8x8 block
-	S32 world_block_x_lo = world_center_x_lo >> 3;
-	S32 world_block_x_hi = world_center_x_hi >> 3;
-	S32 world_block_y_lo = world_center_y_lo >> 3;
-	S32 world_block_y_hi = world_center_y_hi >> 3;
-	
-	U32 blocks_requested = 0;
-	const U32 max_blocks_requested = 9;
+	const F32 half_width = F32(width) / 2.0f;
+	const F32 half_height = F32(height) / 2.0f;
 
-	for (S32 block_x = llmax(world_block_x_lo, 0); block_x <= llmin(world_block_x_hi, MAP_BLOCK_RES-1); ++block_x)
-	{
-		for (S32 block_y = llmax(world_block_y_lo, 0); block_y <= llmin(world_block_y_hi, MAP_BLOCK_RES-1); ++block_y)
-		{
-			blocks_requested += updateBlock(block_x, block_y);
-			if (blocks_requested >= max_blocks_requested)
-				return blocks_requested;
-		}
-	}
-	return blocks_requested;
-} 
+	// Compute center into sim grid coordinates
+	S32 world_center_x = S32((-sPanX / sMapScale) + (camera_global.mdV[0] / REGION_WIDTH_METERS));
+	S32 world_center_y = S32((-sPanY / sMapScale) + (camera_global.mdV[1] / REGION_WIDTH_METERS));
+
+	// Compute the boundaries into sim grid coordinates
+	S32 world_left   = world_center_x - S32(half_width  / sMapScale) - 1;
+	S32 world_right  = world_center_x + S32(half_width  / sMapScale) + 1;
+	S32 world_bottom = world_center_y - S32(half_height / sMapScale) - 1;
+	S32 world_top    = world_center_y + S32(half_height / sMapScale) + 1;
+
+	//LL_INFOS("World Map") << "LLWorldMapView::updateVisibleBlocks() : sMapScale = " << sMapScale << ", left = " << world_left << ", right = " << world_right << ", bottom  = " << world_bottom << ", top = " << world_top << LL_ENDL;
+	LLWorldMap::getInstance()->updateRegions(world_left, world_bottom, world_right, world_top);
+}
 
 BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
 {
@@ -1915,16 +1746,16 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
 			}
 		default:
 			{
-				if (LLWorldMap::getInstance()->mIsTrackingUnknownLocation)
+				if (LLWorldMap::getInstance()->isTracking())
 				{
-					LLWorldMap::getInstance()->mIsTrackingDoubleClick = TRUE;
+					LLWorldMap::getInstance()->setTrackingDoubleClick();
 				}
 				else
 				{
 					// Teleport if we got a valid location
 					LLVector3d pos_global = viewPosToGlobal(x,y);
 					LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global);
-					if (sim_info && sim_info->mAccess != SIM_ACCESS_DOWN)
+					if (sim_info && !sim_info->isDown())
 					{
 						gAgent.teleportViaLocation( pos_global );
 					}
diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h
index 66793f01018cd9e1e52161dd9a6216593c8b8525..9eecacb2d83e284076a854459d7fbd532b78b193 100644
--- a/indra/newview/llworldmapview.h
+++ b/indra/newview/llworldmapview.h
@@ -30,27 +30,23 @@
  * $/LicenseInfo$
  */
 
-// Global map of the world.
+// View of the global map of the world
+
+// The data (model) for the global map (a singleton, unique to the application instance) is 
+// in LLWorldMap and is typically accessed using LLWorldMap::getInstance()
 
 #ifndef LL_LLWORLDMAPVIEW_H
 #define LL_LLWORLDMAPVIEW_H
 
 #include "llpanel.h"
-#include "v3math.h"
-#include "v3dmath.h"
-#include "v4color.h"
-#include "llviewertexture.h"
-#include "llmapimagetype.h"
 #include "llworldmap.h"
-
-class LLItemInfo;
+#include "v4color.h"
 
 const S32 DEFAULT_TRACKING_ARROW_SIZE = 16;
 
-class LLColor4;
-class LLColor4U;
-class LLCoordGL;
-class LLViewerTexture;
+class LLUUID;
+class LLVector3d;
+class LLVector3;
 class LLTextBox;
 
 
@@ -77,22 +73,26 @@ class LLWorldMapView : public LLPanel
 	bool			checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track);
 	void			handleClick(S32 x, S32 y, MASK mask, S32* hit_type, LLUUID* id);
 
-	// Scale and pan are shared across all instances.
+	// Scale and pan are shared across all instances! (i.e. Terrain and Objects maps are always registered)
 	static void		setScale( F32 scale );
 	static void		translatePan( S32 delta_x, S32 delta_y );
 	static void		setPan( S32 x, S32 y, BOOL snap = TRUE );
+	// Return true if the current scale level is above the threshold for accessing region info
+	static bool		showRegionInfo();
 
 	LLVector3		globalPosToView(const LLVector3d& global_pos);
 	LLVector3d		viewPosToGlobal(S32 x,S32 y);
 
 	virtual void	draw();
-	void			drawGenericItems(const LLWorldMap::item_info_list_t& items, LLUIImagePtr image);
+	void			drawGenericItems(const LLSimInfo::item_info_list_t& items, LLUIImagePtr image);
 	void			drawGenericItem(const LLItemInfo& item, LLUIImagePtr image);
 	void			drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color = LLColor4::white);
 	void			drawImageStack(const LLVector3d& global_pos, LLUIImagePtr image, U32 count, F32 offset, const LLColor4& color);
 	void			drawAgents();
-	void			drawEvents();
+	void			drawItems();
 	void			drawFrustum();
+	void			drawMipmap(S32 width, S32 height);
+	bool			drawMipmapLevel(S32 width, S32 height, S32 level, bool load = true);
 
 	static void		cleanupTextures();
 
@@ -108,7 +108,7 @@ class LLWorldMapView : public LLPanel
 									F32 y_pixels, 
 									const LLColor4& color,
 									F32 relative_z = 0.f,
-									F32 dot_radius = 3.f);
+									F32 dot_radius = 5.f);
 
 	static void		drawTrackingCircle( const LLRect& rect, S32 x, S32 y, 
 										const LLColor4& color, 
@@ -129,9 +129,7 @@ class LLWorldMapView : public LLPanel
 	static void		clearLastClick() { sHandledLastClick = FALSE; }
 
 	// if the view changes, download additional sim info as needed
-	// return value is number of blocks newly requested.
-	U32				updateBlock(S32 block_x, S32 block_y);
-	U32				updateVisibleBlocks();
+	void			updateVisibleBlocks();
 
 protected:
 	void			setDirectionPos( LLTextBox* text_box, F32 rotation );
@@ -140,11 +138,13 @@ class LLWorldMapView : public LLPanel
 public:
 	LLColor4		mBackgroundColor;
 
-	static LLUIImagePtr	sAvatarYouSmallImage;
 	static LLUIImagePtr	sAvatarSmallImage;
-	static LLUIImagePtr	sAvatarLargeImage;
+	static LLUIImagePtr	sAvatarYouImage;
+	static LLUIImagePtr	sAvatarYouLargeImage;
+	static LLUIImagePtr	sAvatarLevelImage;
 	static LLUIImagePtr	sAvatarAboveImage;
 	static LLUIImagePtr	sAvatarBelowImage;
+
 	static LLUIImagePtr	sTelehubImage;
 	static LLUIImagePtr	sInfohubImage;
 	static LLUIImagePtr	sHomeImage;
@@ -157,9 +157,7 @@ class LLWorldMapView : public LLPanel
 	static LLUIImagePtr	sForSaleImage;
 	static LLUIImagePtr	sForSaleAdultImage;
 
-	static F32		sThresholdA;
-	static F32		sThresholdB;
-	static F32		sPixelsPerMeter;		// world meters to map pixels
+	static F32		sMapScale;				// scale = size of a region in pixels
 
 	BOOL			mItemPicked;
 
@@ -169,6 +167,7 @@ class LLWorldMapView : public LLPanel
 	static F32		sTargetPanY;		// in pixels
 	static S32		sTrackingArrowX;
 	static S32		sTrackingArrowY;
+	static bool		sVisibleTilesLoaded;
 
 	// Are we mid-pan from a user drag?
 	BOOL			mPanning;
@@ -191,10 +190,14 @@ class LLWorldMapView : public LLPanel
 	static BOOL		sHandledLastClick;
 	S32				mSelectIDStart;
 
+	// Keep the list of regions that are displayed on screen. Avoids iterating through the whole region map after draw().
 	typedef std::vector<U64> handle_list_t;
 	handle_list_t mVisibleRegions; // set every frame
 
 	static std::map<std::string,std::string> sStringsMap;
+
+private:
+	void drawTileOutline(S32 level, F32 top, F32 left, F32 bottom, F32 right);
 };
 
 #endif
diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8d3165b98c65eb47d8d91759aee9cef25571d7bc
--- /dev/null
+++ b/indra/newview/llworldmipmap.cpp
@@ -0,0 +1,275 @@
+/** 
+ * @file llworldmipmap.cpp
+ * @brief Data storage for the S3 mipmap of the entire world.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llworldmipmap.h"
+
+#include "llviewertexturelist.h"
+#include "math.h"	// log()
+
+// Turn this on to output tile stats in the standard output
+#define DEBUG_TILES_STAT 0
+
+LLWorldMipmap::LLWorldMipmap() :
+	mCurrentLevel(0)
+{
+}
+
+LLWorldMipmap::~LLWorldMipmap()
+{
+	reset();
+}
+
+// Delete all sublevel maps and clean them
+void LLWorldMipmap::reset()
+{
+	for (int level = 0; level < MAP_LEVELS; level++)
+	{
+		mWorldObjectsMipMap[level].clear();
+	}
+}
+
+// This method should be called before each use of the mipmap (typically, before each draw), so that to let
+// the boost level of unused tiles to drop to 0 (BOOST_NONE).
+// Tiles that are accessed have had their boost level pushed to BOOST_MAP_VISIBLE so we can identify them.
+// The result of this strategy is that if a tile is not used during 2 consecutive loops, its boost level drops to 0.
+void LLWorldMipmap::equalizeBoostLevels()
+{
+#if DEBUG_TILES_STAT
+	S32 nb_missing = 0;
+	S32 nb_tiles = 0;
+	S32 nb_visible = 0;
+#endif // DEBUG_TILES_STAT
+	// For each level
+	for (S32 level = 0; level < MAP_LEVELS; level++)
+	{
+		sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level];
+		// For each tile
+		for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++)
+		{
+			LLPointer<LLViewerFetchedTexture> img = iter->second;
+			S32 current_boost_level = img->getBoostLevel();
+			if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE)
+			{
+				// If level was BOOST_MAP_VISIBLE, the tile has been used in the last draw so keep it high
+				img->setBoostLevel(LLViewerTexture::BOOST_MAP);
+			}
+			else
+			{
+				// If level was BOOST_MAP only (or anything else...), the tile wasn't used in the last draw 
+				// so we drop its boost level to BOOST_NONE.
+				img->setBoostLevel(LLViewerTexture::BOOST_NONE);
+			}
+#if DEBUG_TILES_STAT
+			// Increment some stats if compile option on
+			nb_tiles++;
+			if (current_boost_level == LLViewerTexture::BOOST_MAP_VISIBLE)
+			{
+				nb_visible++;
+			}
+			if (img->isMissingAsset())
+			{
+				nb_missing++;
+			}
+#endif // DEBUG_TILES_STAT
+		}
+	}
+#if DEBUG_TILES_STAT
+	LL_INFOS("World Map") << "LLWorldMipmap tile stats : total requested = " << nb_tiles << ", visible = " << nb_visible << ", missing = " << nb_missing << LL_ENDL;
+#endif // DEBUG_TILES_STAT
+}
+
+// This method should be used when the mipmap is not actively used for a while, e.g., the map UI is hidden
+void LLWorldMipmap::dropBoostLevels()
+{
+	// For each level
+	for (S32 level = 0; level < MAP_LEVELS; level++)
+	{
+		sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level];
+		// For each tile
+		for (sublevel_tiles_t::iterator iter = level_mipmap.begin(); iter != level_mipmap.end(); iter++)
+		{
+			LLPointer<LLViewerFetchedTexture> img = iter->second;
+			img->setBoostLevel(LLViewerTexture::BOOST_NONE);
+		}
+	}
+}
+
+LLPointer<LLViewerFetchedTexture> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 1);
+
+	// If the *loading* level changed, cleared the new level from "missed" tiles
+	// so that we get a chance to reload them
+	if (load && (level != mCurrentLevel))
+	{
+		cleanMissedTilesFromLevel(level);
+		mCurrentLevel = level;
+	}
+
+	// Build the region handle
+	U64 handle = convertGridToHandle(grid_x, grid_y);
+
+	// Check if the image is around already
+	sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1];
+	sublevel_tiles_t::iterator found = level_mipmap.find(handle);
+
+	// If not there and load on, go load it
+	if (found == level_mipmap.end())
+	{
+		if (load)
+		{
+			// Load it 
+			LLPointer<LLViewerFetchedTexture> img = loadObjectsTile(grid_x, grid_y, level);
+			// Insert the image in the map
+			level_mipmap.insert(sublevel_tiles_t::value_type( handle, img ));
+			// Find the element again in the map (it's there now...)
+			found = level_mipmap.find(handle);
+		}
+		else
+		{
+			// Return with NULL if not found and we're not trying to load
+			return NULL;
+		}
+	}
+
+	// Get the image pointer and check if this asset is missing
+	LLPointer<LLViewerFetchedTexture> img = found->second;
+	if (img->isMissingAsset())
+	{
+		// Return NULL if asset missing
+		return NULL;
+	}
+	else
+	{
+		// Boost the tile level so to mark it's in use *if* load on
+		if (load)
+		{
+			img->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE);
+		}
+		return img;
+	}
+}
+
+LLPointer<LLViewerFetchedTexture> LLWorldMipmap::loadObjectsTile(U32 grid_x, U32 grid_y, S32 level)
+{
+	// Get the grid coordinates
+//	std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/%d/%05d/%05d/map-%d-%d-%d-objects.jpg",
+	std::string imageurl = llformat("http://map.secondlife.com.s3.amazonaws.com/map-%d-%d-%d-objects.jpg",
+									level, grid_x, grid_y, level, grid_x, grid_y);
+
+	// DO NOT COMMIT!! DEBUG ONLY!!!
+	// Use a local jpeg for every tile to test map speed without S3 access
+	//imageurl = "file://C:\\Develop\\mapserver-distribute-3\\indra\\build-vc80\\mapserver\\relwithdebinfo\\regions\\00995\\01001\\region-995-1001-prims.jpg";
+	// END DEBUG
+	//LL_INFOS("World Map") << "LLWorldMipmap::loadObjectsTile(), URL = " << imageurl << LL_ENDL;
+
+	LLPointer<LLViewerFetchedTexture> img = LLViewerTextureManager::getFetchedTextureFromUrl(imageurl, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
+	img->setBoostLevel(LLViewerTexture::BOOST_MAP);
+
+	// Return the smart pointer
+	return img;
+}
+
+// This method is used to clean up a level from tiles marked as "missing".
+// The idea is to allow tiles that have been improperly marked missing to be reloaded when retraversing the level again.
+// When zooming in and out rapidly, some tiles are never properly loaded and, eventually marked missing.
+// This creates "blue" areas in a subresolution that never got a chance to reload if we don't clean up the level.
+void LLWorldMipmap::cleanMissedTilesFromLevel(S32 level)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 0);
+
+	// This happens when the object is first initialized
+	if (level == 0)
+	{
+		return;
+	}
+
+	// Iterate through the subresolution level and suppress the tiles that are marked as missing
+	// Note: erasing in a map while iterating through it is bug prone. Using a postfix increment is mandatory here.
+	sublevel_tiles_t& level_mipmap = mWorldObjectsMipMap[level-1];
+	sublevel_tiles_t::iterator it = level_mipmap.begin();
+	while (it != level_mipmap.end())
+	{
+		LLPointer<LLViewerFetchedTexture> img = it->second;
+		if (img->isMissingAsset())
+		{
+			level_mipmap.erase(it++);
+		}
+		else
+		{
+			++it;
+		}
+	}
+	return;
+}
+
+// static methods
+// Compute the level in the world mipmap (between 1 and MAP_LEVELS, as in the URL) given the scale (size of a sim in screen pixels)
+S32 LLWorldMipmap::scaleToLevel(F32 scale)
+{
+	// If scale really small, picks up the higest level there is (lowest resolution)
+	if (scale <= F32_MIN)
+		return MAP_LEVELS;
+	// Compute the power of two resolution level knowing the base level
+	S32 level = llfloor((log(REGION_WIDTH_METERS/scale)/log(2.0f)) + 1.0f);
+	// Check bounds and return the value
+	if (level > MAP_LEVELS)
+		return MAP_LEVELS;
+	else if (level < 1)
+		return 1;
+	else
+		return level;
+}
+
+// Convert world coordinates to mipmap grid coordinates at a given level (between 1 and MAP_LEVELS)
+void LLWorldMipmap::globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y)
+{
+	// Check the input data
+	llassert(level <= MAP_LEVELS);
+	llassert(level >= 1);
+
+	// Convert world coordinates into grid coordinates
+	*grid_x = lltrunc(global_x/REGION_WIDTH_METERS);
+	*grid_y = lltrunc(global_y/REGION_WIDTH_METERS);
+	// Compute the valid grid coordinates at that level of the mipmap
+	S32 regions_in_tile = 1 << (level - 1);
+	*grid_x = *grid_x - (*grid_x % regions_in_tile);
+	*grid_y = *grid_y - (*grid_y % regions_in_tile);
+}
+
+
diff --git a/indra/newview/llworldmipmap.h b/indra/newview/llworldmipmap.h
new file mode 100644
index 0000000000000000000000000000000000000000..ecf10034686870590c26325f5c9a49bfccc63b5d
--- /dev/null
+++ b/indra/newview/llworldmipmap.h
@@ -0,0 +1,100 @@
+/** 
+ * @file llworldmipmap.h
+ * @brief Data storage for the S3 mipmap of the entire world.
+ *
+ * $LicenseInfo:firstyear=2003&license=viewergpl$
+ * 
+ * Copyright (c) 2003-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWORLDMIPMAP_H
+#define LL_LLWORLDMIPMAP_H
+
+#include <map>
+
+#include "llmemory.h"			// LLPointer
+#include "indra_constants.h"	// REGION_WIDTH_UNITS
+#include "llregionhandle.h"		// to_region_handle()
+
+class LLViewerFetchedTexture;
+
+// LLWorldMipmap : Mipmap handling of all the tiles used to render the world at any resolution.
+// This class provides a clean structured access to the hierarchy of tiles stored in the 
+// Amazon S3 repository and abstracts its directory/file structure.
+// The interface of this class though still assumes that the caller knows the general level/tiles
+// structure (at least, that it exists...) but doesn't requite the caller to know the details of it.
+// IOW, you need to know that rendering levels exists as well as grid coordinates for regions, 
+// but you can ignore where those tiles are located, how to get them, etc...
+// The class API gives you back LLPointer<LLViewerFetchedTexture> per tile.
+
+// See llworldmipmapview.cpp for the implementation of a class who knows how to render an LLWorldMipmap.
+
+// Implementation notes:
+// - On the S3 servers, the tiles are rendered in 2 flavors: Objects and Terrain.
+// - For the moment, LLWorldMipmap implements access only to the Objects tiles.
+class LLWorldMipmap
+{
+public:
+	// Parameters of the mipmap
+	static const S32 MAP_LEVELS = 8;		// Number of subresolution levels computed by the mapserver
+	static const S32 MAP_TILE_SIZE = 256;	// Width in pixels of the tiles computed by the mapserver
+
+	LLWorldMipmap();
+	~LLWorldMipmap();
+
+	// Clear up the maps and release all image handles
+	void	reset();
+	// Manage the boost levels between loops (typically draw() loops)
+	void	equalizeBoostLevels();
+	// Drop the boost levels to none (used when hiding the map)
+	void	dropBoostLevels();
+	// Get the tile smart pointer, does the loading if necessary
+	LLPointer<LLViewerFetchedTexture> getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load = true);
+
+	// Helper functions: those are here as they depend solely on the topology of the mipmap though they don't access it
+	// Convert sim scale (given in sim width in display pixels) into a mipmap level
+	static S32  scaleToLevel(F32 scale);
+	// Convert world coordinates to mipmap grid coordinates at a given level
+	static void globalToMipmap(F64 global_x, F64 global_y, S32 level, U32* grid_x, U32* grid_y);
+
+private:
+	// Get a handle (key) from grid coordinates
+	U64		convertGridToHandle(U32 grid_x, U32 grid_y) { return to_region_handle(grid_x * REGION_WIDTH_UNITS, grid_y * REGION_WIDTH_UNITS); }
+	// Load the relevant tile from S3
+	LLPointer<LLViewerFetchedTexture> loadObjectsTile(U32 grid_x, U32 grid_y, S32 level);
+	// Clear a level from its "missing" tiles
+	void cleanMissedTilesFromLevel(S32 level);
+
+	// The mipmap is organized by resolution level (MAP_LEVELS of them). Each resolution level is an std::map
+	// using a region_handle as a key and storing a smart pointer to the image as a value.
+	typedef std::map<U64, LLPointer<LLViewerFetchedTexture> > sublevel_tiles_t;
+	sublevel_tiles_t mWorldObjectsMipMap[MAP_LEVELS];
+//	sublevel_tiles_t mWorldTerrainMipMap[MAP_LEVELS];
+
+	S32 mCurrentLevel;		// The level last accessed by a getObjectsTile()
+};
+
+#endif // LL_LLWORLDMIPMAP_H
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index f13bb73acfe4f47ea68ab0022d425e323f996861..2cda9dda01fca132d09aac644e4bc25f2748bcf3 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -512,8 +512,10 @@ void LLPipeline::destroyGL()
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
 void LLPipeline::resizeScreenTexture()
 {
+	LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
 	if (gPipeline.canUseVertexShaders() && assertInitialized())
 	{
 		GLuint resX = gViewerWindow->getWorldViewWidth();
@@ -1470,6 +1472,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera
 	F32 dist = lookAt.length();
 
 	//ramp down distance for nearby objects
+	//shrink dist by dist/16.
 	if (dist < 16.f)
 	{
 		dist /= 16.f;
@@ -1480,7 +1483,7 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera
 	//get area of circle around node
 	F32 app_angle = atanf(size.length()/dist);
 	F32 radius = app_angle*LLDrawable::sCurPixelAngle;
-	return radius*radius * 3.14159f;
+	return radius*radius * F_PI;
 }
 
 void LLPipeline::grabReferences(LLCullResult& result)
@@ -3011,15 +3014,6 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 
 	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:ForceVBO");
 	
-	//by bao
-	//fake vertex buffer updating
-	//to guaranttee at least updating one VBO buffer every frame
-	//to walk around the bug caused by ATI card --> DEV-3855
-	//
-	if(forceVBOUpdate)
-		gSky.mVOSkyp->updateDummyVertexBuffer() ;
-
-
 	// Initialize lots of GL state to "safe" values
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 433070ce343994999732af519451ce2f844d5c6a..38291e45c933417911212e67d2d4b758bd2287c7 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -134,8 +134,8 @@ TOOLMEDIAOPEN           CURSOR                  "toolmediaopen.cur"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,0,3256
- PRODUCTVERSION 2,0,0,3256
+ FILEVERSION 2,0,0,200030
+ PRODUCTVERSION 2,0,0,200030
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -152,12 +152,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Linden Lab"
             VALUE "FileDescription", "Second Life"
-            VALUE "FileVersion", "2.0.0.3256"
+            VALUE "FileVersion", "2.0.0.200030"
             VALUE "InternalName", "Second Life"
             VALUE "LegalCopyright", "Copyright © 2001-2008, Linden Research, Inc."
             VALUE "OriginalFilename", "SecondLife.exe"
             VALUE "ProductName", "Second Life"
-            VALUE "ProductVersion", "2.0.0.3256"
+            VALUE "ProductVersion", "2.0.0.200030"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 1e0da1316285f7e2e48bde1a9247f9f126c79788..7e19a80c1096965d3aff5cd96bd96b43e1ed3fb3 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -70,7 +70,7 @@
 	 value="1 1 0 1" />
 	<color
 	 name="Unused?"
-	 value="1 0 1 1" />
+	 value="1 0.5 0 1" />
 	<color
 	 name="Transparent"
 	 value="0 0 0 0" />
@@ -651,7 +651,7 @@
 	 value="0 0 0 .33" />
     <color
      name="TimeTextColor"
-     reference="LtGray_50" />
+     reference="LtGray" />
     <color
      name="TitleBarFocusColor"
      reference="White_10" />
diff --git a/indra/newview/skins/default/html/da/loading/loading.html b/indra/newview/skins/default/html/da/loading/loading.html
index cdad5702b9851f457a48ed564a4533bb7ff5e33a..5f3426eb609306458ed1b8138b2cee9b5b23bee9 100644
--- a/indra/newview/skins/default/html/da/loading/loading.html
+++ b/indra/newview/skins/default/html/da/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Indlæser...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Indlæser...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/de/loading/loading.html b/indra/newview/skins/default/html/de/loading/loading.html
index 3eddbc24f5e9ae6510ed3cd31e133aa0c2ebd1a3..44a621b2164c6df52c8f42e513a2db51b24397bf 100644
--- a/indra/newview/skins/default/html/de/loading/loading.html
+++ b/indra/newview/skins/default/html/de/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Wird geladen...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Wird geladen...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/en-us/loading/loading.html b/indra/newview/skins/default/html/en-us/loading/loading.html
index 34e5c84c4d476b1e6a53db45664eef533017aea6..1c62d2f73e0e7ee72773a83e0437bfd62a4c0706 100644
--- a/indra/newview/skins/default/html/en-us/loading/loading.html
+++ b/indra/newview/skins/default/html/en-us/loading/loading.html
@@ -1,9 +1,9 @@
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;loading...
-		</td>
-	</tr>
-</table>
-</body>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;loading...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/es/loading/loading.html b/indra/newview/skins/default/html/es/loading/loading.html
index f03284ba8ca4d27794bf9217b1ab619ef5cb4c2a..c4260b34c08cea4189b3ea5bed809364ad19d597 100644
--- a/indra/newview/skins/default/html/es/loading/loading.html
+++ b/indra/newview/skins/default/html/es/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Cargando...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Cargando...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/fr/loading/loading.html b/indra/newview/skins/default/html/fr/loading/loading.html
index 23c0ef03bc4ee5a7a2b316455598fe0d430da1af..b3953448e97ab1b65350fc922deec3b784369e70 100644
--- a/indra/newview/skins/default/html/fr/loading/loading.html
+++ b/indra/newview/skins/default/html/fr/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Chargement...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Chargement...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/hu/loading/loading.html b/indra/newview/skins/default/html/hu/loading/loading.html
index ade91f76c28b706a7617af45d4b32bcce7f8e96e..ab15a073bae471441748b9112fc1fa3e96903b9f 100644
--- a/indra/newview/skins/default/html/hu/loading/loading.html
+++ b/indra/newview/skins/default/html/hu/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Betöltés folyamatban...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Betöltés folyamatban...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/it/loading/loading.html b/indra/newview/skins/default/html/it/loading/loading.html
index 0f9af31f6ef880ee8128ad7b19d1d276c594e047..ab37e41f0453bacafde9c57af2ddd15dd57c40f5 100644
--- a/indra/newview/skins/default/html/it/loading/loading.html
+++ b/indra/newview/skins/default/html/it/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Attendi...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Attendi...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/ja/loading/loading.html b/indra/newview/skins/default/html/ja/loading/loading.html
index 069dc5d12fffac9f361599f97d127db049b12954..35cf74a35f936d5afb971af79a9286cc6f92f6ef 100644
--- a/indra/newview/skins/default/html/ja/loading/loading.html
+++ b/indra/newview/skins/default/html/ja/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;ロード中...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;ロード中...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/nl/loading/loading.html b/indra/newview/skins/default/html/nl/loading/loading.html
index 39a8691f3f95053245cd4460d6bc017d3f1faf99..0215bd7e47228e86a3bf8fbb5796a9ef7f8b903b 100644
--- a/indra/newview/skins/default/html/nl/loading/loading.html
+++ b/indra/newview/skins/default/html/nl/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Laden...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Laden...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/pl/loading/loading.html b/indra/newview/skins/default/html/pl/loading/loading.html
index 515890c2d5cad0801b487db19048d834a61cef85..50f3dfb0c5b18b900f449807c2ee80a463ca1c3e 100644
--- a/indra/newview/skins/default/html/pl/loading/loading.html
+++ b/indra/newview/skins/default/html/pl/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Ładowanie...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Ładowanie...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/pt/loading/loading.html b/indra/newview/skins/default/html/pt/loading/loading.html
index 635ea62406e12733ed1d6ef4a089b111a53787a7..a83e1123d0f6088510d21df187a13cd9424e1e52 100644
--- a/indra/newview/skins/default/html/pt/loading/loading.html
+++ b/indra/newview/skins/default/html/pt/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Carregando...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Carregando...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/ru/loading/loading.html b/indra/newview/skins/default/html/ru/loading/loading.html
index dcc0d73c1acfd4e26fce52c806351ccc37ffcf20..892c0b9f7fb045d3c856b40ff7883d6950b702a6 100644
--- a/indra/newview/skins/default/html/ru/loading/loading.html
+++ b/indra/newview/skins/default/html/ru/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Загрузка...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Загрузка...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/tr/loading/loading.html b/indra/newview/skins/default/html/tr/loading/loading.html
index e7812e7c8e66e913fd9eeb9fcd8ce6bfea6eb548..1ac07bff3403b87bcff4f970c8a7b193a8a44a17 100644
--- a/indra/newview/skins/default/html/tr/loading/loading.html
+++ b/indra/newview/skins/default/html/tr/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Yükleniyor...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Yükleniyor...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/uk/loading/loading.html b/indra/newview/skins/default/html/uk/loading/loading.html
index 0f67994635083f8e43bcaa2f3ca13d209c55c697..3b5b8679b43d88c8342cba5aa0437eb4bfa91fbe 100644
--- a/indra/newview/skins/default/html/uk/loading/loading.html
+++ b/indra/newview/skins/default/html/uk/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Завантаж...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;Завантаж...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/html/zh/loading/loading.html b/indra/newview/skins/default/html/zh/loading/loading.html
index 462ea291d9658b33fe6560ac511072b09b952ba3..d1d5d25c927538a41b42ee4eb01c6924bb652d8a 100644
--- a/indra/newview/skins/default/html/zh/loading/loading.html
+++ b/indra/newview/skins/default/html/zh/loading/loading.html
@@ -1,10 +1,10 @@
-<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
-<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
-<table width="100%" height="100%" border="0">
-	<tr>
-		<td align="center" valign="middle" style="font-size:0.8em;">
-			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;请等待...
-		</td>
-	</tr>
-</table>
-</body>
+<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
+<table width="100%" height="100%" border="0">
+	<tr>
+		<td align="center" valign="middle" style="font-size:0.8em;">
+			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>&nbsp;&nbsp;&nbsp;请等待...
+		</td>
+	</tr>
+</table>
+</body>
diff --git a/indra/newview/skins/default/textures/Blank.png b/indra/newview/skins/default/textures/Blank.png
new file mode 100644
index 0000000000000000000000000000000000000000..f38e9f9100c290bd0e9a0419810c2d0149562c8e
Binary files /dev/null and b/indra/newview/skins/default/textures/Blank.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cfe2e850e614f131b343dec26aa23b3542720c0
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb5d85e4100c3865a7c0f0afa1f49e622defa49d
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b509867805cdfb55be8c3a1f976ee94612bab9b
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..9876aa456cf1282e74a459ba3ec0173a9c1fc75b
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..f481fed88cbcf322624217a3aa058806cb4846db
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png
new file mode 100644
index 0000000000000000000000000000000000000000..d58b4ff9904f774cad3344fecbf79b06e5350fb9
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e7389899218710977c298873d66ecfbff197989
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
new file mode 100644
index 0000000000000000000000000000000000000000..98f1f04b9a70d6eeb129a0f0355d220518b03d33
Binary files /dev/null and b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
index 6f2726c3e672a87918a50007e5dfe978051dbdd4..d7ec04237b53b2b2634210381b1a423a401375d6 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png and b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png differ
diff --git a/indra/newview/skins/default/textures/default_profile_picture.j2c b/indra/newview/skins/default/textures/default_profile_picture.j2c
index c53a22e8165c6e9fb1e6039644b113273a9b79b4..f21742cf09ba3fd83547aa2a2eec4136c725d62d 100644
Binary files a/indra/newview/skins/default/textures/default_profile_picture.j2c and b/indra/newview/skins/default/textures/default_profile_picture.j2c differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png
new file mode 100644
index 0000000000000000000000000000000000000000..b65dc1929df4bb77e27d4cf15e82bd7d18b9c9ae
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Inv_Alpha.png differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a632197eb530c75502ff25b823b9bf0dbcee18dc
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png differ
diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga
new file mode 100644
index 0000000000000000000000000000000000000000..04539c2cc4f002c9c1c4724215e5b7cf08cfb177
Binary files /dev/null and b/indra/newview/skins/default/textures/inv_folder_inbox.tga differ
diff --git a/indra/newview/skins/default/textures/map_avatar_32.tga b/indra/newview/skins/default/textures/map_avatar_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..aebeab409366d632722c33328566919423f383fb
Binary files /dev/null and b/indra/newview/skins/default/textures/map_avatar_32.tga differ
diff --git a/indra/newview/skins/default/textures/map_avatar_above_32.tga b/indra/newview/skins/default/textures/map_avatar_above_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..65bd0561a784cf0402f9978b95e31b45f7127c5b
Binary files /dev/null and b/indra/newview/skins/default/textures/map_avatar_above_32.tga differ
diff --git a/indra/newview/skins/default/textures/map_avatar_below_32.tga b/indra/newview/skins/default/textures/map_avatar_below_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..496c44b369a473a38831885aab44c5b0d7e5a939
Binary files /dev/null and b/indra/newview/skins/default/textures/map_avatar_below_32.tga differ
diff --git a/indra/newview/skins/default/textures/map_avatar_you_32.tga b/indra/newview/skins/default/textures/map_avatar_you_32.tga
new file mode 100644
index 0000000000000000000000000000000000000000..782207efd6c28747686bcaf4355e2fe7388dbe94
Binary files /dev/null and b/indra/newview/skins/default/textures/map_avatar_you_32.tga differ
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4f126f9692110c2f8ecb9f6c80e85c05d947e65
Binary files /dev/null and b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index fa65c760fd9cc7d151dc526c8712d7550557084f..0b2effe90a9b633159dd076faf4bf2143498c9bb 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -27,6 +27,8 @@
   <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />
   <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" />
 
+  <texture name="Blank" file_name="Blank.png" preload="false" />
+
   <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
 
   <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
@@ -49,6 +51,16 @@
   <texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
   <texture name="Cam_Pan_Over" file_name="bottomtray/CCam_Pan_Over.png" preload="false" />
   <texture name="Cam_Pan_Press" file_name="bottomtray/Cam_Pan_Press.png" preload="false" />
+
+  <texture name="Cam_Preset_Back_Off" file_name="bottomtray/Cam_Preset_Back_Off.png" preload="false" />
+  <texture name="Cam_Preset_Back_On" file_name="bottomtray/Cam_Preset_Back_On.png" preload="false" />
+  <texture name="Cam_Preset_Eye_Off" file_name="bottomtray/Cam_Preset_Eye_Off.png" preload="false" />
+  <texture name="Cam_Preset_Eye_On" file_name="bottomtray/Cam_Preset_Eye_On.png" preload="false" />
+  <texture name="Cam_Preset_Front_Off" file_name="bottomtray/Cam_Preset_Front_Off.png" preload="false" />
+  <texture name="Cam_Preset_Front_On" file_name="bottomtray/Cam_Preset_Front_On.png" preload="false" />
+  <texture name="Cam_Preset_Side_Off" file_name="bottomtray/Cam_Preset_Side_Off.png" preload="false" />
+  <texture name="Cam_Preset_Side_On" file_name="bottomtray/Cam_Preset_Side_On.png" preload="false" />
+
   <texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" />
   <texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
   <texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" />
@@ -67,7 +79,9 @@
   <texture name="ComboButton_Over" file_name="widgets/ComboButton_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="Container" file_name="containers/Container.png" preload="false" />
 
   <texture name="DisclosureArrow_Closed_Off" file_name="widgets/DisclosureArrow_Closed_Off.png" preload="true" />
@@ -89,6 +103,7 @@
   <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
   <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
   <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" />
+  <texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" />
 
   <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
   <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
@@ -233,6 +248,8 @@
   <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" />
   <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" />
 
+  <texture name="Notices_Unread" file_name="bottomtray/Notices_Unread.png" preload="true" />
+
   <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" />
   <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" />
   <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" />
@@ -396,6 +413,10 @@
   <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" />
   <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" />
   <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" />
+  <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" />
+  <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" />
+  <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" />
+  <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" />
   <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" />
   <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" />
   <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" />
@@ -488,9 +509,6 @@
 
   <!--WARNING OLD ART *do not use*-->
 
- <texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" />
-  <texture name="Banner_YouAreHere" file_name="Banner_YouAreHere.png" preload="false" />
-
   <texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
   <texture name="btn_chatbar_selected.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
 
@@ -535,15 +553,6 @@
   <texture name="move_down_in.tga" preload="false" />
   <texture name="move_down_out.tga" preload="false" />
 
-  <texture name="tool_grab.tga" />
-  <texture name="tool_grab_active.tga" />
-
-  <texture name="tool_face.tga" />
-  <texture name="tool_face_active.tga" />
-
-  <texture name="tool_create.tga" />
-  <texture name="tool_create_active.tga" />
-
   <texture name="up_arrow.tga" file_name="up_arrow.png" />
   <texture name="down_arrow.tga" file_name="down_arrow.png" />
 
@@ -608,56 +617,8 @@
   <texture name="icon_popular.tga" />
   <texture name="icon_top_pick.tga" />
 
-  <texture name="inv_folder_animation.tga" />
-  <texture name="inv_folder_bodypart.tga" />
-  <texture name="inv_folder_callingcard.tga" />
-  <texture name="inv_folder_clothing.tga" />
-  <texture name="inv_folder_current_outfit.tga" />
-  <texture name="inv_folder_gesture.tga" />
-  <texture name="inv_folder_landmark.tga" />
-  <texture name="inv_folder_lostandfound.tga" />
-  <texture name="inv_folder_my_outfits.tga" />
   <texture name="inv_folder_mesh.tga"/>
-  <texture name="inv_folder_notecard.tga" />
-  <texture name="inv_folder_object.tga" />
-  <texture name="inv_folder_outfit.tga" />
-  <texture name="inv_folder_plain_closed.tga" />
-  <texture name="inv_folder_script.tga" />
-  <texture name="inv_folder_snapshot.tga" />
-  <texture name="inv_folder_sound.tga" />
-  <texture name="inv_folder_texture.tga" />
-  <texture name="inv_folder_trash.tga" />
-
-  <texture name="inv_item_animation.tga" />
-  <texture name="inv_item_skin.tga" />
-  <texture name="inv_item_callingcard_offline.tga" />
-  <texture name="inv_item_callingcard_online.tga" />
-  <texture name="inv_item_eyes.tga" />
-  <texture name="inv_item_gesture.tga" />
-  <texture name="inv_item_gloves.tga" />
-  <texture name="inv_item_hair.tga" />
-  <texture name="inv_item_jacket.tga" />
-  <texture name="inv_item_landmark.tga" />
-  <texture name="inv_item_landmark_visited.tga" />
-  <texture name="inv_item_linkitem.tga" />
-  <texture name="inv_item_linkfolder.tga" />
   <texture name="inv_item_mesh.tga"/>
-  <texture name="inv_item_notecard.tga" />
-  <texture name="inv_item_object.tga" />
-  <texture name="inv_item_object_multi.tga" />
-  <texture name="inv_item_pants.tga" />
-  <texture name="inv_item_script.tga" />
-  <texture name="inv_item_shape.tga" />
-  <texture name="inv_item_shirt.tga" />
-  <texture name="inv_item_shoes.tga" />
-  <texture name="inv_item_skirt.tga" />
-  <texture name="inv_item_snapshot.tga" />
-  <texture name="inv_item_socks.tga" />
-  <texture name="inv_item_sound.tga" />
-  <texture name="inv_item_texture.tga" />
-  <texture name="inv_item_underpants.tga" />
-  <texture name="inv_item_undershirt.tga" />
-
   <texture name="lag_status_critical.tga" />
   <texture name="lag_status_good.tga" />
   <texture name="lag_status_warning.tga" />
@@ -684,37 +645,6 @@
   <texture name="notify_next.png" preload="true" />
   <texture name="notify_box_icon.tga" />
 
-  <texture name="object_cone.tga" />
-  <texture name="object_cone_active.tga" />
-  <texture name="object_cube.tga" />
-  <texture name="object_cube_active.tga" />
-  <texture name="object_cylinder.tga" />
-  <texture name="object_cylinder_active.tga" />
-  <texture name="object_grass.tga" />
-  <texture name="object_grass_active.tga" />
-  <texture name="object_hemi_cone.tga" />
-  <texture name="object_hemi_cone_active.tga" />
-  <texture name="object_hemi_cylinder.tga" />
-  <texture name="object_hemi_cylinder_active.tga" />
-  <texture name="object_hemi_sphere.tga" />
-  <texture name="object_hemi_sphere_active.tga" />
-  <texture name="object_prism.tga" />
-  <texture name="object_prism_active.tga" />
-  <texture name="object_pyramid.tga" />
-  <texture name="object_pyramid_active.tga" />
-  <texture name="object_ring.tga" />
-  <texture name="object_ring_active.tga" />
-  <texture name="object_sphere.tga" />
-  <texture name="object_sphere_active.tga" />
-  <texture name="object_tetrahedron.tga" />
-  <texture name="object_tetrahedron_active.tga" />
-  <texture name="object_torus.tga" />
-  <texture name="object_torus_active.tga" />
-  <texture name="object_tree.tga" />
-  <texture name="object_tree_active.tga" />
-  <texture name="object_tube.tga" />
-  <texture name="object_tube_active.tga" />
-
   <texture name="pixiesmall.j2c" use_mips="true" />
   <texture name="script_error.j2c" use_mips="true" />
   <texture name="silhouette.j2c" use_mips="true" />
@@ -730,11 +660,6 @@
   <texture name="status_no_push.tga" />
   <texture name="status_no_scripts.tga" />
 
-  <texture name="tool_dozer.tga" />
-  <texture name="tool_dozer_active.tga" />
-  <texture name="tool_zoom.tga" />
-  <texture name="tool_zoom_active.tga" />
-
   <texture name="icn_active-speakers-dot-lvl0.tga" />
   <texture name="icn_active-speakers-dot-lvl1.tga" />
   <texture name="icn_active-speakers-dot-lvl2.tga" />
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png
new file mode 100644
index 0000000000000000000000000000000000000000..2330cb420bbefe64451c1a403c4b9b878aa7ee0e
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png differ
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7b5c2e1d414f053f82f6bf80536c166e0897bfc
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png differ
diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml
index 81d4d3fdfdb8a1af1072eacc2c13c708bdfc72ba..f0c9c45d041c4fd85fc321548c5f4da93673e810 100644
--- a/indra/newview/skins/default/xui/da/floater_about.xml
+++ b/indra/newview/skins/default/xui/da/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Om [APP_NAME]">
+<floater name="floater_about" title="OM [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml
index c4cf722159cd1fae241e1be41e8c0b620876d1ac..cb5d618dde2945f9ae972c265b74bd179299e795 100644
--- a/indra/newview/skins/default/xui/da/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Om land">
+<floater name="floaterland" title="OM LAND">
 	<tab_container name="landtab">
 		<panel label="Generelt" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/da/floater_auction.xml b/indra/newview/skins/default/xui/da/floater_auction.xml
index f981242f8a9c85cf03f8a021f34340cdd6c11c10..8f793557bea3afae907f65fbf8ebe20d53b9f60d 100644
--- a/indra/newview/skins/default/xui/da/floater_auction.xml
+++ b/indra/newview/skins/default/xui/da/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Start Linden land salg">
+<floater name="floater_auction" title="START LINDEN LAND SALG">
 	<check_box label="Vis også gul aftegning af område" name="fence_check" />
 	<button label="Foto" label_selected="Foto" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
index f93f0a35254541415bd6fe8c05705a9e5343b2eb..0ddb6e9dbe5e74149047730d21665d072df57c36 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Vælg beboer">
+<floater name="avatarpicker" title="VÆLG BEBOER">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Søg" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
index e3a736b200d46ae5da252d7084cb42c374c04885..27bfa367f65b58fc1a83a8c036f5dfd8d1c5b905 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="avatar_texture_debug" title="Avatar teksturer">
+<floater name="avatar_texture_debug" title="AVATAR TEKSTURER">
 	<text name="baked_label">
 		Faste teksturer
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml
index 318a23df4c026962f71bdbd0bf7c5f614441be83..18bc7aeb31ddccbe0e90486ef9a905ab95d446c5 100644
--- a/indra/newview/skins/default/xui/da/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/da/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="beacons" title="Pejlelys">
+<floater name="beacons" title="PEJLELYS">
 	<panel name="beacons_panel">
 		<check_box label="Kun scriptede objekter med &quot;rør&quot;" name="touch_only" />
 		<check_box label="Scriptede objekter" name="scripted" />
diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml
index 3b3e14ad6428b614ac7ff38ec648a42f7696482f..7eb0d4c035c7e88f404c535a4013e097f6c0ff4f 100644
--- a/indra/newview/skins/default/xui/da/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Gitter indstillinger">
+<floater name="build options floater" title="GITTER INDSTILLINGER">
 	<spinner label="Gitter enhed (meter)" name="GridResolution" width="200" label_width="136"/>
 	<spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" width="200" label_width="136"/>
 	<check_box label="Aktiver låsning til under-enheder" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
index 77ae7fe060892097cdce8ca386abb61f6a23bdd5..9cf44d64791c5284e559718d2948021dcacc3231 100644
--- a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Masse-ændring af rettigheder på indhold">
+<floater name="floaterbulkperms" title="MASSE-ÆNDRING AF RETTIGHEDER PÅ INDHOLD">
 	<text name="applyto">
 		Indholdstyper
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml
index 62a1cd9e5c817a4a0f39017b6c354c53e76b2420..704e6c36085c9489ae66b015cc5a41383f7c7611 100644
--- a/indra/newview/skins/default/xui/da/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/da/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Bump, skub &amp; slag">
+<floater name="floater_bumps" title="BUMP, SKUB &amp; SLAG">
 	<string name="none_detected">
 		Ingen registreret
 	</string>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml
index c9df548747abcb0dd83f9283180fca67fd03eb91..8dccf32304d23ea030a3e8264dabce55c5123cb6 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Køb indhold">
+<floater name="floater_buy_contents" title="KØB INDHOLD">
 	<text name="contains_text">
 		[NAME] indeholder:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
index 1c5876572b51b05757dc7b3921e3e39d64287d6e..a2b6dec91c5f05331e2bcf156f27ef8010eabc51 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Køb valuta">
+<floater name="buy currency" title="KØB VALUTA">
 	<text name="info_buying">
 		Køber valuta:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml
index 1d42ffb45a856bbdac9819fef141671816d9cd7d..71e6eaa7f7d4f1d765113feacbee5f660d7c0c36 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Køb land">
+<floater name="buy land" title="KØB LAND">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml
index f0e22c8eeea83174e210233d290a44430f663b7e..266753902ba257ab0021a1a9f5a278513ce32e14 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Køb kopi af objekt">
+<floater name="contents" title="KØB KOPI AF OBJEKT">
 	<text name="contents_text">
 		og dets indhold:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml
index 01c5bf33672be653e1f661ab29eac0d9170472d5..9f02f281db3e9da28359664a83d7ff984f834b5b 100644
--- a/indra/newview/skins/default/xui/da/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/da/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupper">
+<floater name="groups" title="GRUPPER">
 	<text name="groupdesc">
 		Vælg en gruppe:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_color_picker.xml b/indra/newview/skins/default/xui/da/floater_color_picker.xml
index c8e1fc813b4d85409a50e4c1f62af001cd2febe2..d0a47b76e032cf55b95eb0ac66289f64f5e0f18f 100644
--- a/indra/newview/skins/default/xui/da/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Farve vælger">
+<floater name="ColorPicker" title="FARVE VÆLGER">
 	<text name="r_val_text">
 		Rød:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml
index b434bea1ced72cd681515639f874819c26990968..b2409f168228cab44f0a29705c5b1fd1629e1719 100644
--- a/indra/newview/skins/default/xui/da/floater_customize.xml
+++ b/indra/newview/skins/default/xui/da/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Appearance" width="509">
+<floater name="floater customize" title="APPEARANCE" width="509">
 	<tab_container name="customize tab container" width="507">
 		<placeholder label="Krops Dele" name="body_parts_placeholder"/>
 		<panel label="Kropsbygning" name="Shape">
diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
index 0ca7874c37b7a0f5d0faad182139812646e34969..94cf4546e3199856500c8c6d0040f199e6e077c3 100644
--- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Dag cyklus opsætning">
+<floater name="Day Cycle Floater" title="DAG CYKLUS OPSÆTNING">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Dag cyklus" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml
index 28afd7c459bcdd9e734ec76f5a64f503dbe15ed3..5e53a697f2f4c69fbb5435d73c9714b88af7c8c4 100644
--- a/indra/newview/skins/default/xui/da/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="Stemme chat indstillinger" />
+<floater name="floater_device_settings" title="STEMME CHAT INDSTILLINGER" />
diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml
index 907771c67a2c9f4900408d2fd900c58dcb9ab003..6c5b6d3b6b14512072e1b08ea2a86dc711c79ce9 100644
--- a/indra/newview/skins/default/xui/da/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Redigering af omgivelser">
+<floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER">
 	<text name="EnvTimeText">
 		Tid på dagen
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_font_test.xml b/indra/newview/skins/default/xui/da/floater_font_test.xml
index 7d8ef1b310566220ac5a97ab2387fdf888db5483..591d07188cf83cdae7ccd3541ca6b924b77c4824 100644
--- a/indra/newview/skins/default/xui/da/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/da/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Font test">
+<floater name="contents" title="FONT TEST">
 	<text name="linea">
 		OverrideTest, skal vises her som fonten &apos;Times&apos;. (Fra default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_gesture.xml b/indra/newview/skins/default/xui/da/floater_gesture.xml
index 800693ea8c38e4e30709b90685ebdf96aa48acc3..11ecc8bd9a8975786cc9f736d5a743fb8abe5f02 100644
--- a/indra/newview/skins/default/xui/da/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/da/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktive bevægelser">
+<floater name="gestures" title="AKTIVE BEVÆGELSER">
 	<text name="help_label">
 		Dobbelt-klik på en bevægelse for at afspille animation og lyd.
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
index dcc1b8d2e8e6b00c664c56903f8240e838f02a4a..fc1231ceef095a7165464090414c33b03b9d3bd9 100644
--- a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Hardware opsætning">
+<floater name="Hardware Settings Floater" title="HARDWARE OPSÆTNING">
 	<text name="Filtering:">
 		Filtrering:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_hud.xml b/indra/newview/skins/default/xui/da/floater_hud.xml
index 0f11e2346da2ae942bb38cd89aed9cf05d767418..18584e57cae309d8edb33e491140bcfee4697031 100644
--- a/indra/newview/skins/default/xui/da/floater_hud.xml
+++ b/indra/newview/skins/default/xui/da/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Tutorial" />
+<floater name="floater_hud" title="TUTORIAL" />
diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml
index 56c3f6f78446f8a936c26e5ae358a00b6c67b5a4..0610e9408fba63c22a524419414c4fce97c01957 100644
--- a/indra/newview/skins/default/xui/da/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/da/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecér objekter">
+<floater name="inspect" title="INSPECÉR OBJEKTER">
 	<scroll_list name="object_list" tool_tip="Vælg et objekt fra listen for at markere det">
 		<column label="Objekt navn" name="object_name"/>
 		<column label="Objekt ejer" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml
index 0b931bd7f46aba72afac0e3e2dc972ce718e04e3..8bfe7164d0c14c5101af4520cc92fc4a49d64713 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory" title="Beholdning">
+<floater name="Inventory" title="BEHOLDNING">
 	<search_editor label="Skriv her for at søge" name="inventory search editor" />
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle ting" name="All Items" />
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
index 9f28440fb0c162b9961d88e4595ab278a74ff627..fbcf202c54d0dd932a68bdc018bdc60d3c8c0e3e 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Egenskaber for Objekt i Beholdning">
+<floater name="item properties" title="EGENSKABER FOR OBJEKT I BEHOLDNING">
 	<text name="LabelItemNameTitle">
 		Navn:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
index 60a7d78aead06f12d4d47cb5da58ace3b46e6b9c..af2910fe589690b40dfefa5086675a4ff3be6ee8 100644
--- a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="Animation" name="check_animation" />
 	<check_box label="Visitkort" name="check_calling_card" />
 	<check_box label="Tøj" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml
index 280650a04b2b8136f4cbec17084ef1b86f1113ef..4954b7b619eb5a2c69fd3504b6a42156eb28aaf4 100644
--- a/indra/newview/skins/default/xui/da/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/da/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick opsætning">
+<floater name="Joystick" title="JOYSTICK OPSÆTNING">
 	<check_box name="enable_joystick" label="Aktiver Joystick:"/>
 	<spinner label="X akse mapping" name="JoystickAxis1"/>
 	<spinner label="Y akse mapping" name="JoystickAxis2"/>
diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
index 7e7c2dc0d3eb4558662e482069489b5ca1f5b4ac..bcf15ea926209cbb2f38c69892375be46d28ef9e 100644
--- a/indra/newview/skins/default/xui/da/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Lag måler">
+<floater name="floater_lagmeter" title="LAG MÃ…LER">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/>
 	<text name="client">
 		Klient:
diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
index bd623e7b75726127cc0b86eae650403b95af503a..39c906eb183836cab5aa20033e26bf6977094bf1 100644
--- a/indra/newview/skins/default/xui/da/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mit land">
+<floater name="land holdings floater" title="MIT LAND">
 	<scroll_list name="parcel list">
 		<column label="Navn" name="name"/>
 		<column label="Region" name="location"/>
diff --git a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
index 112dc70e45231d9a79d1c9552e118b3a3af2afc5..cfc5fb8860bce9887b96acf78b4eaee55a462f87 100644
--- a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Script: Nyt script">
+<floater name="script ed float" title="SCRIPT: NYT SCRIPT">
 	<button label="Nulstil" label_selected="Reset" name="Reset" />
 	<check_box label="Kører" name="running" />
 	<check_box label="Mono" name="mono" />
diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
index d345409859118315a03f0e0a7a85737011bb37fa..ebc86c5c732cebf69d225fe9eeb0c9469f54003b 100644
--- a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Følg markøreren" name="lock_check" />
 	<combo_box label="LÃ¥s" name="history_combo" left_delta="114" width="70"/>
 	<button label="Tilbage" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_media_browser.xml b/indra/newview/skins/default/xui/da/floater_media_browser.xml
index 50004cfa0c1532e631796c3f54e6c37096e5bfe8..47667973ba32aa7d88d233fed92299b8d4911d21 100644
--- a/indra/newview/skins/default/xui/da/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/da/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Medie vælger">
+<floater name="floater_about" title="MEDIE VÆLGER">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Tilbage" name="back" />
diff --git a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
index 6d5b5bc0cec2ea0259409ce546d56bac21edf0f7..e7ad821d408c2b5f5e7b081741441ff96f9d0fc9 100644
--- a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Memory Leaking Simulation">
+<floater name="MemLeak" title="MEMORY LEAKING SIMULATION">
 	<spinner label="Leaking Speed (bytes per frame):" name="leak_speed" />
 	<spinner label="Max Leaked Memory (MB):" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/da/floater_mute_object.xml b/indra/newview/skins/default/xui/da/floater_mute_object.xml
index e64557b177ecd1053fc577cfdb60603a1be55f61..4145918b495a775ff7e63c170b46b7b5e6a5268a 100644
--- a/indra/newview/skins/default/xui/da/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Bloker objekt via navn">
+<floater name="mute by name" title="BLOKER OBJEKT VIA NAVN">
 	<text name="message">
 		Blokering via navn har ikke betydning for lyde.
 Du skal skrive det præcise navn på objektet.
diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml
index 687266a08a1b3804491c615baf612af2324f68c7..54b401076cde75f4587c1142ba58262a0e355a54 100644
--- a/indra/newview/skins/default/xui/da/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/da/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakter">
+<floater name="floater_my_friends" title="KONTAKTER">
 	<tab_container name="friends_and_groups">
 		<panel label="Venner" name="friends_panel" />
 		<panel label="Grupper" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml
index d37e3177fa11d096c6cb0a95d730243ceac385c0..5875b7a967fffeddd3fbf7a34e1ec8e46a5151b8 100644
--- a/indra/newview/skins/default/xui/da/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/da/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Objekt indhold">
+<floater name="objectcontents" title="OBJEKT INDHOLD">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
index f4b9b0a664e3e786a9294ce5a9a49ee3f0df4380..69a8d3af94ffb979d5859576c3a6b740dd8dd105 100644
--- a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Standard tilladelser ved hentning">
+<floater name="perm prefs" title="STANDARD TILLADELSER VED HENTNING">
 	<panel label="Tilladelser" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Del med gruppe" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml
index 24d45062ae74a81d1904c1fa977b5787429aa3ec..cd61e7ac9756d78942ff86d4d64bdc5f66c94f30 100644
--- a/indra/newview/skins/default/xui/da/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/da/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="E-mail billede">
+<floater name="Postcard" title="E-MAIL BILLEDE">
 	<text name="to_label">
 		Send til:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml
index 26e932e3ccb63d0e8eb642c897dad45241559172..e251c9ad2c6cd8c2aca105bdfda31d3a1f03b3b6 100644
--- a/indra/newview/skins/default/xui/da/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/da/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Indstillinger">
+<floater name="Preferences" title="INDSTILLINGER">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Annullér" label_selected="Annullér" name="Cancel" />
 	<button label="Gem" label_selected="Gem" name="Apply" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
index 6cc4c139f1eb0743632268e70948394e63e5c297..cf2d14b80a4df7b57ab0cc030e95994f7582b519 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Annonce information" />
+<floater name="classified_preview" title="ANNONCE INFORMATION" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml
index f1be35e1c3f7e604036fde1af7ec6f5a4ff0af98..584085fea0bb568776edd98b56e03bdf1b5b45b3 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Event information" />
+<floater name="event_preview" title="EVENT INFORMATION" />
diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
index 68d04d6f9b89c7308d4bb8cefa02843baffd3c70..7258824878d7e0c6c6e40f67c00cc744a6d34bac 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Note:">
+<floater name="preview notecard" title="NOTE:">
 	<button label="Gem" label_selected="Gem" name="Save"/>
 	<text name="desc txt">
 		Beskrivelse:
diff --git a/indra/newview/skins/default/xui/da/floater_region_info.xml b/indra/newview/skins/default/xui/da/floater_region_info.xml
index 9f6e326cf338a5570bc687184dc659b6d4acc7e6..5c95c8ed5efa41c643f1daf2cbf0516ff4eb0bb6 100644
--- a/indra/newview/skins/default/xui/da/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/da/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/Estate" />
+<floater name="regioninfo" title="REGION/ESTATE" />
diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
index 01f152c43adbf2d064bdcebff2ce4b5bcaadc9fe..6f1e2884eb6230bac04a2417900d638d155579e4 100644
--- a/indra/newview/skins/default/xui/da/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Rapportér misbrug">
+<floater name="floater_report_abuse" title="RAPPORTÉR MISBRUG">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Inkludér billede" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/da/floater_script_debug.xml b/indra/newview/skins/default/xui/da/floater_script_debug.xml
index 17e14cd9b958f7b3a93a8319de73db329764cb1e..df60a2e23f1fa5b3abaf95f873ac964262ae9849 100644
--- a/indra/newview/skins/default/xui/da/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Script advarsel/fejl">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]" />
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml
index 6990e8db0eed66a268347261ee8ac62c39d3fd9e..ede277bbd222750e462ef251ff3a06d3cad0f50f 100644
--- a/indra/newview/skins/default/xui/da/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script: Rotation Script">
+<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
 	<text name="desc txt">
 		Beskrivelse:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_script_queue.xml b/indra/newview/skins/default/xui/da/floater_script_queue.xml
index 47dbf534bd0c05cc58293d138d1a1a792baf5b00..3f54c924267892fd0feab278c0a17a457fe39ef6 100644
--- a/indra/newview/skins/default/xui/da/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Nulstil forløb">
+<floater name="queue" title="NULSTIL FORLØB">
 	<button label="Luk" label_selected="Luk" name="close" />
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml
index d4dae8951f3a14b03fcfe5269eccf44fea349f7c..62f311be6e9aeea6ac8b2a992fec9f2bf7c12915 100644
--- a/indra/newview/skins/default/xui/da/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/da/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Script søgning">
+<floater name="script search" title="SCRIPT SØGNING">
 	<check_box label="Store/små bogstaver har ingen betydning" name="case_text" />
 	<button label="Søg" label_selected="Søg" name="search_btn" />
 	<button label="Erstat" label_selected="Erstat" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml
index 87023b4f64076bb8453c862bec39c48ef830db2c..fcbe0abe081d769aca50dcb935705b7e780203ab 100644
--- a/indra/newview/skins/default/xui/da/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/da/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Sælg land">
+<floater name="sell land" title="SÆLG LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
index 60f99deae2e3aa170a017d8f76917bf96b6fd9aa..c1429ed3a3634672166844992f7587ebdc1786d3 100644
--- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Tekniske indstillinger">
+<floater name="settings_debug" title="TEKNISKE INDSTILLINGER">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="TRUE (Valgt)" />
 		<combo_box.item name="FALSE" label="FALSE (Fravalgt)" />
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
index d7a51798907c3d4751a40ed57333f6522614d974..3eed869db4463c7068ea71a7700bb0ce40554d42 100644
--- a/indra/newview/skins/default/xui/da/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Se foto">
+<floater name="Snapshot" title="SE FOTO">
 	<text name="type_label">
 		Hvor skal foto hen?
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
index 606d290e1dba237a4c5c2d761e397994d098c4de..e54bdf4f42c452569f71621f73a6d34d92394c61 100644
--- a/indra/newview/skins/default/xui/da/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Navn:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml
index 0443553d5091e5d802171d0891be32c214c28c66..8c33f3ecb35cad4f90c26c87ccf4a2c09a3764b4 100644
--- a/indra/newview/skins/default/xui/da/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/da/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistik"/>
+<floater name="stats floater" title="STATISTIK"/>
diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml
index cd1fb3383118000d806b982bcc4c1fff379259e6..bf31da95158b7932698638fb77fd49da87b74ee4 100644
--- a/indra/newview/skins/default/xui/da/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/da/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Telehub">
+<floater name="telehub" title="TELEHUB">
 	<text name="status_text_connected">
 		Telehub forbundet til objekt [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
index c35e3aec4c8bb28b7965fc07748f393ef51d8f81..4167e2938aa05369ec05d03ad05a562ec5461718 100644
--- a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="texture picker" title="Vælg: Tekstur">
+<floater name="texture picker" title="VÆLG: TEKSTUR">
 	<string name="choose_picture">
 		Klik for at vælge et billede
 	</string>
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
index e50494ff9eda1598e677b44310ad5b32418489b9..c3287bac84e5c794d6ef5f537232c0f9582ca438 100644
--- a/indra/newview/skins/default/xui/da/floater_tools.xml
+++ b/indra/newview/skins/default/xui/da/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Byg">
+<floater name="toolbox floater" title="" short_title="BYG">
 	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Flyt"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Redigér"/>
diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml
index dc4605cc121f357eed2e14223170c7639ef1afdf..0cfbe77def744c6feb682431c28541b7e3fefcd0 100644
--- a/indra/newview/skins/default/xui/da/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/da/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="top_objects" title="Indlæser...">
+<floater name="top_objects" title="INDLÆSER...">
 	<text name="title_text">
 		Henter...
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml
index 33a10579abb8d823a2ca12c00719edfd8883bf7e..63880b4a6902feeff834d18b443653e486552163 100644
--- a/indra/newview/skins/default/xui/da/floater_water.xml
+++ b/indra/newview/skins/default/xui/da/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Avanceret opsætning af vand">
+<floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND">
 	<text name="KeyFramePresetsText">
 		Vand opsætninger:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
index 9754b1f0743b84b2c5af999dbea4ec4f7cf6828b..4786609b53930b739ba3497ab4e9e6f636dd4d06 100644
--- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Avanceret opsætning for himmel">
+<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL">
 	<text name="KeyFramePresetsText">
 		Faste indstillinger:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml
index d4b58f623298987af4293c5863260a86fc5e14e2..62930716ce4bebe137e195eaa5118a95856a47ad 100644
--- a/indra/newview/skins/default/xui/da/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/da/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Verdenskort">
+<floater name="worldmap" title="VERDENSKORT">
 	<tab_container name="maptab">
 		<panel label="Objekter" name="objects_mapview"/>
 		<panel label="Terræn" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
index 74b7c7dd72642afc93cd8e275bf9a503c1430792..b4d0fa20ef12c59d124e1d6cc58d443110d86e18 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Beboer" />
-   <string name="AcctTypeTrial"
-    value="På prøve" />
-   <string name="AcctTypeCharterMember"
-    value="æresmedlem" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab medarbejder" />
-   <string name="PaymentInfoUsed"
-    value="Betalende medlem" />
-   <string name="PaymentInfoOnFile"
-    value="Registreret betalende" />
-   <string name="NoPaymentInfoOnFile"
-    value="Ingen betalingsinfo" />
-   <string name="AgeVerified"
-    value="Alders-checket" />
-   <string name="NotAgeVerified"
-    value="Ikke alders-checket" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=da
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Optaget autosvar:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Beboer" />
+   <string name="AcctTypeTrial"
+    value="På prøve" />
+   <string name="AcctTypeCharterMember"
+    value="æresmedlem" />
+   <string name="AcctTypeEmployee"
+    value="Linden Lab medarbejder" />
+   <string name="PaymentInfoUsed"
+    value="Betalende medlem" />
+   <string name="PaymentInfoOnFile"
+    value="Registreret betalende" />
+   <string name="NoPaymentInfoOnFile"
+    value="Ingen betalingsinfo" />
+   <string name="AgeVerified"
+    value="Alders-checket" />
+   <string name="NotAgeVerified"
+    value="Ikke alders-checket" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=da
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Partner:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Optaget autosvar:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index d36f5a43f6c613d66b436af2e6ba2fd0b39fe6f5..8522a89ec1cc8a6fc543ff670b12a4ed2996ea8e 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Ãœber [APP_NAME]">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl und vielen anderen.
-
-Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-GL Copyright (C) 1999-2004 Brian Paul.
-Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-ogg/vorbis Copyright (C) 2001, Xiphophorus
-OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
-google-perftools Copyright (c) 2005, Google Inc.
-
-Alle Rechte vorbehalten. Details siehe licenses.txt.
-
-Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<text name="you_are_at">
-		Sie befinden sich in [POSITION]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="ÃœBER [APP_NAME]">
+	<tab_container name="about_tab">
+		<panel label="Danksagung" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl und vielen anderen.
+
+Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="Lizenzen" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+GL Copyright (C) 1999-2004 Brian Paul.
+Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ogg/vorbis Copyright (C) 2001, Xiphophorus
+OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
+google-perftools Copyright (c) 2005, Google Inc.
+
+Alle Rechte vorbehalten. Details siehe licenses.txt.
+
+Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index 853302d15c436aef53572bf8051826799dd6d065..ae0ad2af65dc1e5e370feb78411d3fb689049b35 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -1,494 +1,475 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Land-Info">
-	<tab_container name="landtab">
-		<panel label="Allgemein" name="land_general_panel">
-			<text name="Name:">
-				Name:
-			</text>
-			<text name="Description:">
-				Beschreibung:
-			</text>
-			<text name="LandType">
-				Typ:
-			</text>
-			<text name="LandTypeText">
-				Mainland / Homestead
-			</text>
-			<text name="ContentRating">
-				Einstufung:
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				Eigentümer:
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
-			<text name="Group:">
-				Gruppe:
-			</text>
-			<button label="Einstellen..." label_selected="Einstellen..." name="Set..."/>
-			<check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/>
-			<button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/>
-			<check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/>
-			<text name="For Sale:">
-				Zum Verkauf:
-			</text>
-			<text name="Not for sale.">
-				Nicht zu verkaufen.
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.).
-			</text>
-			<text name="SalePending"/>
-			<button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/>
-			<text name="For sale to">
-				Zum Verkauf an: [BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel." width="210">
-				Objekte sind im Verkauf eingeschlossen.
-			</text>
-			<text name="Selling with no objects in parcel." width="237">
-				Objekte sind im Verkauf nicht eingeschlossen.
-			</text>
-			<button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/>
-			<text name="Claimed:">
-				Gekauft am:
-			</text>
-			<text name="DateClaimText">
-				Dienstag, 15. Aug. 2006, 13:47:25
-			</text>
-			<text name="PriceLabel">
-				Gebiet:
-			</text>
-			<text name="PriceText">
-				4048 qm.
-			</text>
-			<text name="Traffic:">
-				Traffic:
-			</text>
-			<text name="DwellText">
-				0
-			</text>
-			<button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/>
-			<button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
-			<button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
-			<button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/>
-			<button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
-			<button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
-			<panel.string name="new users only">
-				Nur neue Benutzer
-			</panel.string>
-			<panel.string name="anyone">
-				Jeder
-			</panel.string>
-			<panel.string name="area_text">
-				Gebiet:
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA] qm.
-			</panel.string>
-			<panel.string name="auction_id_text">
-				Auktions-ID: [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(In Gruppenbesitz)
-			</panel.string>
-			<panel.string name="profile_text">
-				Profil...
-			</panel.string>
-			<panel.string name="info_text">
-				Info...
-			</panel.string>
-			<panel.string name="public_text">
-				(öffentlich)
-			</panel.string>
-			<panel.string name="none_text">
-				(keiner)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(Wird verkauft)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				Keine Parzelle ausgewählt.
-Öffnen Sie „Welt“ &gt; „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
-			</panel.string>
-		</panel>
-		<panel label="Vertrag" name="land_covenant_panel">
-			<text name="estate_section_lbl">
-				Grundstück:
-			</text>
-			<text name="estate_name_lbl">
-				Name:
-			</text>
-			<text name="estate_name_text">
-				Mainland
-			</text>
-			<text name="estate_owner_lbl">
-				Eigentümer:
-			</text>
-			<text name="estate_owner_text">
-				(keiner)
-			</text>
-			<text_editor name="covenant_editor">
-				Für dieses Grundstück fehlt der Vertrag.
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
-			</text>
-			<text name="region_section_lbl">
-				Region:
-			</text>
-			<text name="region_name_lbl">
-				Name:
-			</text>
-			<text name="region_name_text">
-				leyla
-			</text>
-			<text name="region_landtype_lbl">
-				Typ:
-			</text>
-			<text name="region_landtype_text">
-				Mainland / Homestead
-			</text>
-			<text name="region_maturity_lbl">
-				Einstufung:
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				Wiederverkauf:
-			</text>
-			<text name="resellable_clause">
-				Land in dieser Region kann nicht wiederverkauft werden.
-			</text>
-			<text name="changeable_lbl">
-				Unterteilen:
-			</text>
-			<text name="changeable_clause">
-				Land in dieser Region kann nicht zusammengelegt/geteilt
-werden.
-			</text>
-			<panel.string name="can_resell">
-				Gekauftes Land in dieser Region kann wiederverkauft werden.
-			</panel.string>
-			<panel.string name="can_not_resell">
-				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
-			</panel.string>
-			<panel.string name="can_change">
-				Gekauftes Land in dieser Region kann zusammengelegt und
-geteilt werden.
-			</panel.string>
-			<panel.string name="can_not_change">
-				Gekauftes Land in dieser Region kann nicht zusammengelegt
-und geteilt werden.
-			</panel.string>
-		</panel>
-		<panel label="Objekte" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				Objektbonusfaktor in Region: [BONUS]
-			</text>
-			<text name="Simulator primitive usage:">
-				Primitive in Simulator:
-			</text>
-			<text name="objects_available">
-				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
-			</text>
-			<panel.string name="objects_available_text">
-				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
-			</panel.string>
-			<panel.string name="objects_deleted_text">
-				[COUNT] von [MAX] ([DELETED] werden gelöscht)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				Von Parzelle unterstützte Primitiva:
-			</text>
-			<text left="204" name="object_contrib_text" width="152">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				Primitiva auf Parzelle:
-			</text>
-			<text left="204" name="total_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="14" name="Owned by parcel owner:" width="200">
-				Im Eigentum des Parzellenbesitzers:
-			</text>
-			<text left="204" name="owner_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Set to group:">
-				Der Gruppe zugeordnet:
-			</text>
-			<text left="204" name="group_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Owned by others:" width="128">
-				Im Eigentum anderer:
-			</text>
-			<text left="204" name="other_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
-			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
-			<text left="14" name="Selected / sat upon:" width="140">
-				Ausgewählt/gesessen auf:
-			</text>
-			<text left="204" name="selected_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="4" name="Autoreturn" width="380">
-				Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
-			</text>
-			<line_editor name="clean other time" right="-10" width="56"/>
-			<text name="Object Owners:">
-				Objekteigentümer:
-			</text>
-			<button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/>
-			<button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/>
-			<name_list name="owner list">
-				<column label="Typ" name="type"/>
-				<column label="Name" name="name"/>
-				<column label="Zählen" name="count"/>
-				<column label="Aktuellster" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="Optionen" name="land_options_panel">
-			<text name="allow_label">
-				Anderen Einwohnern gestatten:
-			</text>
-			<check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/>
-			<check_box label="Landmarken erstellen" name="check landmark"/>
-			<check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/>
-			<text name="allow_label2">
-				Objekte erstellen:
-			</text>
-			<check_box label="Alle Einwohner" name="edit objects check"/>
-			<check_box label="Gruppe" name="edit group objects check"/>
-			<text name="allow_label3">
-				Objekteintritt:
-			</text>
-			<check_box label="Alle Einwohner" name="all object entry check"/>
-			<check_box label="Gruppe" name="group object entry check"/>
-			<text name="allow_label4">
-				Skripts ausführen:
-			</text>
-			<check_box label="Alle Einwohner" name="check other scripts"/>
-			<check_box label="Gruppe" name="check group scripts"/>
-			<text name="land_options_label">
-				Landoptionen:
-			</text>
-			<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/>
-			<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
-			<check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
-			<panel.string name="search_enabled_tooltip">
-				Diese Parzelle in Suchergebnissen anzeigen.
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist.
-Nur große Parzellen können in der Suche aufgeführt werden.
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können.
-			</panel.string>
-			<combo_box name="land category with adult">
-				<combo_box.item name="item0" label="Alle Kategorien"
-				/>
-				<combo_box.item name="item1" label="Lindenort"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="Kunst &amp; Kultur"
-				/>
-				<combo_box.item name="item4" label="Business"
-				/>
-				<combo_box.item name="item5" label="Bildung"
-				/>
-				<combo_box.item name="item6" label="Spielen"
-				/>
-				<combo_box.item name="item7" label="Treffpunkt"
-				/>
-				<combo_box.item name="item8" label="Anfängergerecht"
-				/>
-				<combo_box.item name="item9" label="Parks und Natur"
-				/>
-				<combo_box.item name="item10" label="Wohngebiet"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Sonstige"
-				/>
-			</combo_box>
-			<combo_box left="266" name="land category" width="130">
-				<combo_box.item name="item0" label="Alle Kategorien"
-				/>
-				<combo_box.item name="item1" label="Lindenort"
-				/>
-				<combo_box.item name="item3" label="Kunst und Kultur"
-				/>
-				<combo_box.item name="item4" label="Business"
-				/>
-				<combo_box.item name="item5" label="Bildung"
-				/>
-				<combo_box.item name="item6" label="Spielen"
-				/>
-				<combo_box.item name="item7" label="Treffpunkt"
-				/>
-				<combo_box.item name="item8" label="Anfängergerecht"
-				/>
-				<combo_box.item name="item9" label="Parks und Natur"
-				/>
-				<combo_box.item name="item10" label="Wohngebiet"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Sonstige"
-				/>
-			</combo_box>
-			<button label="?" label_selected="?" name="?"/>
-			<check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Mature-Inhalt
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Adult-Inhalt
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“.
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“.
-			</panel.string>
-			<text name="Snapshot:">
-				Foto:
-			</text>
-			<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<text name="landing_point">
-				Landepunkt: [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(keiner)
-			</panel.string>
-			<button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
-			<button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen." width="70"/>
-			<text name="Teleport Routing: ">
-				Teleport-Route:
-			</text>
-			<combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen.">
-				<combo_box.item name="Blocked" label="Blockiert"
-				/>
-				<combo_box.item name="LandingPoint" label="Landepunkt"
-				/>
-				<combo_box.item name="Anywhere" label="Ãœberall"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				Kein Stoßen
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				Kein Stoßen (regional)
-			</panel.string>
-		</panel>
-		<panel label="Medien" name="land_media_panel">
-			<text name="with media:">
-				Medientyp:
-			</text>
-			<combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/>
-			<text name="at URL:">
-				Medien-URL:
-			</text>
-			<button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/>
-			<text name="Description:">
-				Inhalt:
-			</text>
-			<line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/>
-			<text name="Media texture:">
-				Textur
-ersetzen:
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<text name="replace_texture_help">
-				(Objekte mit dieser Textur zeigen nach Anklicken
-des Abspielen-Pfeils den Film oder die Webseite an.)
-			</text>
-			<text name="Options:">
-				Medien-
-Optionen:
-			</text>
-			<check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/>
-			<check_box label="Als Schleife wiedergeben" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab.  Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/>
-			<check_box label="Medien-URL verstecken" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
-			<check_box label="Musik-URL verstecken" name="hide_music_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Musik-URL sehen können."/>
-			<text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen.">
-				Größe:
-			</text>
-			<spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
-			<spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
-			<text name="pixels">
-				Pixel
-			</text>
-			<text name="MusicURL:">
-				Musik-URL:
-			</text>
-			<text name="Sound:">
-				Sound:
-			</text>
-			<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
-			<button label="?" label_selected="?" left="418" name="?"/>
-			<text name="Voice settings:">
-				Voice:
-			</text>
-			<check_box label="Voice-Chat aktivieren" name="parcel_enable_voice_channel"/>
-			<check_box label="Voice-Chat aktivieren (vom Grundstück festgelegt)" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="Voice-Chat auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="Zugang" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				Zugang zu dieser Parzelle
-			</text>
-			<check_box label="Freien Zugang erlauben" name="public_access"/>
-			<text name="Only Allow">
-				Zugang verweigern für:
-			</text>
-			<check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
-			<check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersprüfung verbannen. Weitere Informationen finden Sie auf support.secondlife.com."/>
-			<panel.string name="estate_override">
-				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
-			</panel.string>
-			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
-			<check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="Jeden"
-				/>
-				<combo_box.item name="Group" label="Gruppe"
-				/>
-			</combo_box>
-			<spinner label="Preis in L$:" name="PriceSpin"/>
-			<spinner label="Online-Zeit:" name="HoursSpin"/>
-			<text label="Immer erlauben" name="AllowedText">
-				Zulässige Einwohner
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/>
-			<button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/>
-			<text label="Verbannen" name="BanCheck">
-				Verbannte Einwohner
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/>
-			<button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="LAND-INFO">
+	<floater.string name="Minutes">
+		[MINUTES] Minuten
+	</floater.string>
+	<floater.string name="Minute">
+		Minute
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] Sekunden
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="Allgemein" name="land_general_panel">
+			<panel.string name="new users only">
+				Nur neue Benutzer
+			</panel.string>
+			<panel.string name="anyone">
+				Jeder
+			</panel.string>
+			<panel.string name="area_text">
+				Gebiet:
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA] qm.
+			</panel.string>
+			<panel.string name="auction_id_text">
+				Auktions-ID: [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(In Gruppenbesitz)
+			</panel.string>
+			<panel.string name="profile_text">
+				Profil...
+			</panel.string>
+			<panel.string name="info_text">
+				Info...
+			</panel.string>
+			<panel.string name="public_text">
+				(öffentlich)
+			</panel.string>
+			<panel.string name="none_text">
+				(keiner)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(Wird verkauft)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				Keine Parzelle ausgewählt.
+Öffnen Sie „Welt“ &gt; „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
+			</panel.string>
+			<text name="Name:">
+				Name:
+			</text>
+			<text name="Description:">
+				Beschreibung:
+			</text>
+			<text name="LandType">
+				Typ:
+			</text>
+			<text name="LandTypeText">
+				Mainland / Homestead
+			</text>
+			<text name="ContentRating">
+				Einstufung:
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				Eigentümer:
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
+			<text name="Group:">
+				Gruppe:
+			</text>
+			<button label="Einstellen..." label_selected="Einstellen..." name="Set..."/>
+			<check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/>
+			<button label="Übertragen..." label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/>
+			<check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/>
+			<text name="For Sale:">
+				Zum Verkauf:
+			</text>
+			<text name="Not for sale.">
+				Nicht zu verkaufen.
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				Preis: [PRICE] L$ ([PRICE_PER_SQM] L$/qm.).
+			</text>
+			<text name="SalePending"/>
+			<button bottom="-222" label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..."/>
+			<text name="For sale to">
+				Zum Verkauf an: [BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel." width="210">
+				Objekte sind im Verkauf eingeschlossen.
+			</text>
+			<text name="Selling with no objects in parcel." width="237">
+				Objekte sind im Verkauf nicht eingeschlossen.
+			</text>
+			<button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/>
+			<text name="Claimed:">
+				Gekauft am:
+			</text>
+			<text name="DateClaimText">
+				Dienstag, 15. Aug. 2006, 13:47:25
+			</text>
+			<text name="PriceLabel">
+				Gebiet:
+			</text>
+			<text name="PriceText">
+				4048 qm.
+			</text>
+			<text name="Traffic:">
+				Traffic:
+			</text>
+			<text name="DwellText">
+				0
+			</text>
+			<button label="Land kaufen..." label_selected="Land kaufen..." name="Buy Land..."/>
+			<button label="Für Gruppe kaufen..." label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
+			<button label="Pass kaufen..." label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
+			<button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/>
+			<button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
+			<button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
+		</panel>
+		<panel label="Vertrag" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				Gekauftes Land in dieser Region kann wiederverkauft werden.
+			</panel.string>
+			<panel.string name="can_not_resell">
+				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
+			</panel.string>
+			<panel.string name="can_change">
+				Gekauftes Land in dieser Region kann zusammengelegt und
+geteilt werden.
+			</panel.string>
+			<panel.string name="can_not_change">
+				Gekauftes Land in dieser Region kann nicht zusammengelegt
+und geteilt werden.
+			</panel.string>
+			<text name="estate_section_lbl">
+				Grundstück:
+			</text>
+			<text name="estate_name_lbl">
+				Name:
+			</text>
+			<text name="estate_name_text">
+				Mainland
+			</text>
+			<text name="estate_owner_lbl">
+				Eigentümer:
+			</text>
+			<text name="estate_owner_text">
+				(keiner)
+			</text>
+			<text_editor name="covenant_editor">
+				Für dieses Grundstück fehlt der Vertrag.
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
+			</text>
+			<text name="region_section_lbl">
+				Region:
+			</text>
+			<text name="region_name_lbl">
+				Name:
+			</text>
+			<text name="region_name_text">
+				leyla
+			</text>
+			<text name="region_landtype_lbl">
+				Typ:
+			</text>
+			<text name="region_landtype_text">
+				Mainland / Homestead
+			</text>
+			<text name="region_maturity_lbl">
+				Einstufung:
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				Wiederverkauf:
+			</text>
+			<text name="resellable_clause">
+				Land in dieser Region kann nicht wiederverkauft werden.
+			</text>
+			<text name="changeable_lbl">
+				Unterteilen:
+			</text>
+			<text name="changeable_clause">
+				Land in dieser Region kann nicht zusammengelegt/geteilt
+werden.
+			</text>
+		</panel>
+		<panel label="Objekte" name="land_objects_panel">
+			<panel.string name="objects_available_text">
+				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
+			</panel.string>
+			<panel.string name="objects_deleted_text">
+				[COUNT] von [MAX] ([DELETED] werden gelöscht)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				Objektbonusfaktor in Region: [BONUS]
+			</text>
+			<text name="Simulator primitive usage:">
+				Primitive in Simulator:
+			</text>
+			<text name="objects_available">
+				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				Von Parzelle unterstützte Primitiva:
+			</text>
+			<text left="204" name="object_contrib_text" width="152">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				Primitiva auf Parzelle:
+			</text>
+			<text left="204" name="total_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="14" name="Owned by parcel owner:" width="200">
+				Im Eigentum des Parzellenbesitzers:
+			</text>
+			<text left="204" name="owner_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Set to group:">
+				Der Gruppe zugeordnet:
+			</text>
+			<text left="204" name="group_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Owned by others:" width="128">
+				Im Eigentum anderer:
+			</text>
+			<text left="204" name="other_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/>
+			<text left="14" name="Selected / sat upon:" width="140">
+				Ausgewählt/gesessen auf:
+			</text>
+			<text left="204" name="selected_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="4" name="Autoreturn" width="380">
+				Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
+			</text>
+			<line_editor name="clean other time" right="-10" width="56"/>
+			<text name="Object Owners:">
+				Objekteigentümer:
+			</text>
+			<button label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh List"/>
+			<button label="Objekte zurückgeben..." label_selected="Objekte zurückgeben..." name="Return objects..."/>
+			<name_list name="owner list">
+				<name_list.columns label="Typ" name="type"/>
+				<name_list.columns label="Name" name="name"/>
+				<name_list.columns label="Zählen" name="count"/>
+				<name_list.columns label="Aktuellster" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="Optionen" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				Diese Parzelle in Suchergebnissen anzeigen.
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist.
+Nur große Parzellen können in der Suche aufgeführt werden.
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können.
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Mature-Inhalt
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Adult-Inhalt
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“.
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“.
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(keiner)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				Kein Stoßen
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				Kein Stoßen (regional)
+			</panel.string>
+			<text name="allow_label">
+				Anderen Einwohnern gestatten:
+			</text>
+			<check_box label="Terrain bearbeiten" name="edit land check" tool_tip="Falls aktiviert, kann jeder Ihr Land terraformen. Am besten ist es, wenn Sie diese Option deaktiviert lassen. Sie können Ihr eigenes Land jederzeit bearbeiten."/>
+			<check_box label="Fliegen" name="check fly" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land fliegen. Falls nicht aktiviert, können Einwohner lediglich auf Ihr Land fliegen und dort landen (dann jedoch nicht wieder weiterfliegen) oder über Ihr Land hinweg fliegen."/>
+			<text name="allow_label2">
+				Objekte erstellen:
+			</text>
+			<check_box label="Alle Einwohner" name="edit objects check"/>
+			<check_box label="Gruppe" name="edit group objects check"/>
+			<text name="allow_label3">
+				Objekteintritt:
+			</text>
+			<check_box label="Alle Einwohner" name="all object entry check"/>
+			<check_box label="Gruppe" name="group object entry check"/>
+			<text name="allow_label4">
+				Skripts ausführen:
+			</text>
+			<check_box label="Alle Einwohner" name="check other scripts"/>
+			<check_box label="Gruppe" name="check group scripts"/>
+			<text name="land_options_label">
+				Landoptionen:
+			</text>
+			<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/>
+			<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
+			<check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
+			<combo_box name="land category with adult">
+				<combo_box.item label="Alle Kategorien" name="item0"/>
+				<combo_box.item label="Lindenort" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="Kunst &amp; Kultur" name="item3"/>
+				<combo_box.item label="Business" name="item4"/>
+				<combo_box.item label="Bildung" name="item5"/>
+				<combo_box.item label="Spielen" name="item6"/>
+				<combo_box.item label="Treffpunkt" name="item7"/>
+				<combo_box.item label="Anfängergerecht" name="item8"/>
+				<combo_box.item label="Parks und Natur" name="item9"/>
+				<combo_box.item label="Wohngebiet" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Sonstige" name="item12"/>
+			</combo_box>
+			<combo_box left="266" name="land category" width="130">
+				<combo_box.item label="Alle Kategorien" name="item0"/>
+				<combo_box.item label="Lindenort" name="item1"/>
+				<combo_box.item label="Kunst und Kultur" name="item3"/>
+				<combo_box.item label="Business" name="item4"/>
+				<combo_box.item label="Bildung" name="item5"/>
+				<combo_box.item label="Spielen" name="item6"/>
+				<combo_box.item label="Treffpunkt" name="item7"/>
+				<combo_box.item label="Anfängergerecht" name="item8"/>
+				<combo_box.item label="Parks und Natur" name="item9"/>
+				<combo_box.item label="Wohngebiet" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Sonstige" name="item12"/>
+			</combo_box>
+			<check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/>
+			<text name="Snapshot:">
+				Foto:
+			</text>
+			<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<text name="landing_point">
+				Landepunkt: [LANDING]
+			</text>
+			<button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/>
+			<button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen." width="70"/>
+			<text name="Teleport Routing: ">
+				Teleport-Route:
+			</text>
+			<combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen.">
+				<combo_box.item label="Blockiert" name="Blocked"/>
+				<combo_box.item label="Landepunkt" name="LandingPoint"/>
+				<combo_box.item label="Ãœberall" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="Medien" name="land_media_panel">
+			<text name="with media:">
+				Typ:
+			</text>
+			<combo_box name="media type" tool_tip="Geben Sie einen URL für den Film, die Webseite oder ein anderes Medium ein"/>
+			<text name="at URL:">
+				Start URL:
+			</text>
+			<button label="Einstellen..." label_selected="Einstellen..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				Aktuelle URL:
+			</text>
+			<button label="Zurücksetzen..." label_selected="Zurücksetzen..." name="reset_media_url"/>
+			<check_box label="URL ausblenden" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/>
+			<text name="Description:">
+				Inhalt:
+			</text>
+			<line_editor name="url_description" tool_tip="Text, der neben der Abspielen/Laden-Schaltfläche angezeigt wird"/>
+			<text name="Media texture:">
+				Textur
+ersetzen:
+			</text>
+			<texture_picker label="" name="media texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<text name="replace_texture_help">
+				Objekte, die diese Textur verwenden, werden den Film oder die Webseite anzeigen, nachdem Sie auf den Pfeil (Wiedergabe) klicken.
+
+Wählen Sie das kleine Bild aus, um eine andere Textur auszuwählen.
+			</text>
+			<check_box label="Automatisch skalieren" name="media_auto_scale" tool_tip="Aktivieren Sie diese Option, um den Inhalt für diese Parzelle automatisch zu skalieren. Dies ist eventuell langsamer und die Qualität ist schlechter, aber Sie müssen keine weitere Texturskalierung oder -anpassung vornehmen."/>
+			<text name="media_size" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen.">
+				Größe:
+			</text>
+			<spinner name="media_size_width" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+			<spinner name="media_size_height" tool_tip="Darstellungsgröße von Webmedien, für Standard bei 0 belassen."/>
+			<text name="pixels">
+				Pixel
+			</text>
+			<text name="Options:">
+				Optionen:
+			</text>
+			<check_box label="Schleife" name="media_loop" tool_tip="Spielt das Medium in einer Schleife ab.  Der Abspielvorgang wird immer wieder von vorne fortgesetzt."/>
+		</panel>
+		<panel label="Audio" name="land_audio_panel">
+			<text name="MusicURL:">
+				Musik-URL:
+			</text>
+			<text name="Sound:">
+				Sound:
+			</text>
+			<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
+			<text name="Voice settings:">
+				Voice:
+			</text>
+			<check_box label="Voice aktivieren" name="parcel_enable_voice_channel"/>
+			<check_box label="Voice aktivieren (vom Grundstück eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="Voice auf diese Parzelle beschränken" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="Zugang" name="land_access_panel">
+			<panel.string name="estate_override">
+				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				Zugang zu dieser Parzelle
+			</text>
+			<check_box label="Freien Zugang erlauben" name="public_access"/>
+			<text name="Only Allow">
+				Zugang verweigern für:
+			</text>
+			<check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/>
+			<check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>
+			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/>
+			<check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="Jeden" name="Anyone"/>
+				<combo_box.item label="Gruppe" name="Group"/>
+			</combo_box>
+			<spinner label="Preis in L$:" name="PriceSpin"/>
+			<spinner label="Online-Zeit:" name="HoursSpin"/>
+			<text label="Immer erlauben" name="AllowedText">
+				Zulässige Einwohner
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed"/>
+			<button label="Entfernen" label_selected="Entfernen" name="remove_allowed"/>
+			<text label="Verbannen" name="BanCheck">
+				Verbannte Einwohner
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED] angezeigt, max. [MAX])"/>
+			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_banned"/>
+			<button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
index fbd03ab3d734edb9a65192b169947359cedd9aef..0d56f1ef9f568b8c3c6af1d2f4a469955b12839a 100644
--- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
@@ -1,91 +1,184 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		Name:
-	</text>
-	<line_editor name="name_form"/>
-	<text name="description_label">
-		Beschreibung:
-	</text>
-	<spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/>
-	<check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/>
-	<spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/>
-	<spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/>
-	<text name="hand_label">
-		Handhaltung
-	</text>
-	<combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände.">
-		<combo_box.item name="Spread" label="Dehnen" />
-		<combo_box.item name="Relaxed" label="Entspannt" />
-		<combo_box.item name="PointBoth" label="Beide zeigen" />
-		<combo_box.item name="Fist" label="Faust" />
-		<combo_box.item name="RelaxedLeft" label="Links entspannt" />
-		<combo_box.item name="PointLeft" label="Nach links zeigen" />
-		<combo_box.item name="FistLeft" label="Linke Faust" />
-		<combo_box.item name="RelaxedRight" label="Rechts entspannt" />
-		<combo_box.item name="PointRight" label="Nach rechts zeigen" />
-		<combo_box.item name="FistRight" label="Rechte Faust" />
-		<combo_box.item name="SaluteRight" label="Rechts salutieren" />
-		<combo_box.item name="Typing" label="Tippt" />
-		<combo_box.item name="PeaceRight" label="Friedensrecht" />
-	</combo_box>
-	<text name="emote_label">
-		Ausdruck
-	</text>
-	<combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation.">
-		<combo_box.item name="[None]" label="Keine]" />
-		<combo_box.item name="Aaaaah" label="Aaaaah" />
-		<combo_box.item name="Afraid" label="Ängstlich" />
-		<combo_box.item name="Angry" label="Verärgert" />
-		<combo_box.item name="BigSmile" label="Grinst" />
-		<combo_box.item name="Bored" label="Gelangweilt" />
-		<combo_box.item name="Cry" label="Weinen" />
-		<combo_box.item name="Disdain" label="Verachten" />
-		<combo_box.item name="Embarrassed" label="Verlegen" />
-		<combo_box.item name="Frown" label="Stirnrunzeln" />
-		<combo_box.item name="Kiss" label="Küssen" />
-		<combo_box.item name="Laugh" label="Lachen" />
-		<combo_box.item name="Plllppt" label="Bäääh" />
-		<combo_box.item name="Repulsed" label="Zurückgestoßen" />
-		<combo_box.item name="Sad" label="Traurig" />
-		<combo_box.item name="Shrug" label="Schulterzucken" />
-		<combo_box.item name="Smile" label="Lächeln" />
-		<combo_box.item name="Surprise" label="Ãœberraschung" />
-		<combo_box.item name="Wink" label="Zwinkern" />
-		<combo_box.item name="Worry" label="Sorgenvoll" />
-	</combo_box>
-	<text name="preview_label" width="97">
-		Vorschau während:
-	</text>
-	<combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
-		<combo_box.item name="Standing" label="Stehend" />
-		<combo_box.item name="Walking" label="Geht" />
-		<combo_box.item name="Sitting" label="Sitzt" />
-		<combo_box.item name="Flying" label="Fliegend" />
-	</combo_box>
-	<spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
-	<spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
-	<button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/>
-	<button label="" name="stop_btn" tool_tip="Animation anhalten"/>
-	<slider label="" name="playback_slider"/>
-	<text name="bad_animation_text">
-		Animationsdatei konnte nicht gelesen werden.
-
-Wir empfehlen exportierte BVH-Dateien aus Poser 4.
-	</text>
-	<button label="Abbrechen" name="cancel_btn"/>
-	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
-	<string name="failed_to_initialize">
-		Bewegung konnte nicht initialisiert werden
-	</string>
-	<string name="anim_too_long">
-		Animationsdatei ist [LENGTH] Sekunden lang.
-
-Maximal erlaubt sind [MAX_LENGTH] Sekunden.
-	</string>
-	<string name="failed_file_read">
-		Animationsdatei konnte nicht gelesen werden.
-
-[STATUS]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		Bewegung konnte nicht initialisiert werden
+	</floater.string>
+	<floater.string name="anim_too_long">
+		Animationsdatei ist [LENGTH] Sekunden lang.
+
+Maximal erlaubt sind [MAX_LENGTH] Sekunden.
+	</floater.string>
+	<floater.string name="failed_file_read">
+		Animationsdatei konnte nicht gelesen werden.
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		OK
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		Unvollständige Datei
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		Constraint-Definition kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		BVH-Datei kann nicht geöffnet werden
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		Ungültiger HIERARCHY-Titel.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		ROOT oder JOINT nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		JOINT-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		VERSATZ nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		CHANNELS nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		Kann Rotations-Reihenfolge nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		Kann Rotations-Achse nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		MOTION nicht gefunden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		Anzahl der Bilder kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		Bildzeit kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		Positions-Werte können nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		Kann Rotations-Werte nicht erfassen.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Datei kann nicht geöffnet werden
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Ãœbersetzungstitel kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Übersetzungsnamen können nicht geladen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Ignorier-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Ãœbersetzungs-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Outname-Wert kann nicht gelesen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Ãœbersetzungsmatrix kann nicht geladen werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Mergechild-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Mergeparent-Name nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		Prioritätswert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		Loop-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Easeln-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		easeOut-Wert kann nicht erfasst werden.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Hand-Morph-Wert nicht erfasst.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		Emote-Name kann nicht gelesen werden.
+	</floater.string>
+	<text name="name_label">
+		Name:
+	</text>
+	<line_editor name="name_form"/>
+	<text name="description_label">
+		Beschreibung:
+	</text>
+	<spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können."/>
+	<check_box bottom_delta="-18" label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife."/>
+	<spinner label="In (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen."/>
+	<spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen."/>
+	<text name="hand_label">
+		Handhaltung
+	</text>
+	<combo_box label="" name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände.">
+		<combo_box.item label="Dehnen" name="Spread"/>
+		<combo_box.item label="Entspannt" name="Relaxed"/>
+		<combo_box.item label="Beide zeigen" name="PointBoth"/>
+		<combo_box.item label="Faust" name="Fist"/>
+		<combo_box.item label="Links entspannt" name="RelaxedLeft"/>
+		<combo_box.item label="Nach links zeigen" name="PointLeft"/>
+		<combo_box.item label="Linke Faust" name="FistLeft"/>
+		<combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
+		<combo_box.item label="Nach rechts zeigen" name="PointRight"/>
+		<combo_box.item label="Rechte Faust" name="FistRight"/>
+		<combo_box.item label="Rechts salutieren" name="SaluteRight"/>
+		<combo_box.item label="Tippt" name="Typing"/>
+		<combo_box.item label="Friedensrecht" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		Ausdruck
+	</text>
+	<combo_box label="" name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation.">
+		<combo_box.item label="Keine]" name="[None]"/>
+		<combo_box.item label="Aaaaah" name="Aaaaah"/>
+		<combo_box.item label="Ängstlich" name="Afraid"/>
+		<combo_box.item label="Verärgert" name="Angry"/>
+		<combo_box.item label="Grinst" name="BigSmile"/>
+		<combo_box.item label="Gelangweilt" name="Bored"/>
+		<combo_box.item label="Weinen" name="Cry"/>
+		<combo_box.item label="Verachten" name="Disdain"/>
+		<combo_box.item label="Verlegen" name="Embarrassed"/>
+		<combo_box.item label="Stirnrunzeln" name="Frown"/>
+		<combo_box.item label="Küssen" name="Kiss"/>
+		<combo_box.item label="Lachen" name="Laugh"/>
+		<combo_box.item label="Bäääh" name="Plllppt"/>
+		<combo_box.item label="Zurückgestoßen" name="Repulsed"/>
+		<combo_box.item label="Traurig" name="Sad"/>
+		<combo_box.item label="Schulterzucken" name="Shrug"/>
+		<combo_box.item label="Lächeln" name="Smile"/>
+		<combo_box.item label="Ãœberraschung" name="Surprise"/>
+		<combo_box.item label="Zwinkern" name="Wink"/>
+		<combo_box.item label="Sorgenvoll" name="Worry"/>
+	</combo_box>
+	<text name="preview_label" width="97">
+		Vorschau während:
+	</text>
+	<combo_box label="" left_delta="107" name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
+		<combo_box.item label="Stehend" name="Standing"/>
+		<combo_box.item label="Geht" name="Walking"/>
+		<combo_box.item label="Sitzt" name="Sitting"/>
+		<combo_box.item label="Fliegend" name="Flying"/>
+	</combo_box>
+	<spinner label="Eingang glätten (s)" label_width="105" name="ease_in_time" tool_tip="Einblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+	<spinner bottom_delta="-20" label="Ausgang glätten (s)" label_width="105" left="10" name="ease_out_time" tool_tip="Ausblendungsgeschwindigkeit von Animationen (in Sekunden)." width="175"/>
+	<button bottom_delta="-32" label="" name="play_btn" tool_tip="Animation stoppen/wiedergeben."/>
+	<button label="" name="stop_btn" tool_tip="Animation anhalten"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		Animationsdatei konnte nicht gelesen werden.
+
+Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+	</text>
+	<button label="Abbrechen" name="cancel_btn"/>
+	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml
index 42f6a07dc3710bdfa84dc21b38397f2d84c83715..9d0db766c9e2efa2f41467d61ff8334f76af5b8e 100644
--- a/indra/newview/skins/default/xui/de/floater_auction.xml
+++ b/indra/newview/skins/default/xui/de/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Linden-Landverkauf starten">
+<floater name="floater_auction" title="LINDEN-LANDVERKAUF STARTEN">
 	<check_box label="Gelben Auswahlrahmen einschließen" name="fence_check" />
 	<button label="Foto" label_selected="Foto" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
index c546d91d72c6ebafd859f57e007845ec051d149d..b95b6febd98477c1cc7580e5fd0ff957fa3042ef 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
@@ -1,45 +1,43 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Einwohner auswählen">
-	<tab_container name="ResidentChooserTabs">
-		<panel label="Suchen" name="SearchPanel">
-			<text name="InstructSearchResidentName">
-				Geben Sie einen Teil des Namens des
-Einwohners ein:
-			</text>
-			<line_editor bottom_delta="-36" name="Edit" />
-			<button label="Suchen" label_selected="Suchen" name="Find"/>
-			<scroll_list height="74" name="SearchResults" bottom_delta="-79"/>
-		</panel>
-		<panel label="Visitenkarten" name="CallingCardsPanel">
-			<text name="InstructSelectCallingCard">
-				Wählen Sie eine Visitenkarte:
-			</text>
-		</panel>
-		<panel label="In meiner Nähe" name="NearMePanel">
-			<text name="InstructSelectResident">
-				Einwohner in der Nähe
-auswählen:
-			</text>
-			<button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" name="Refresh" left_delta="10" width="105"/>
-			<slider label="Bereich" name="near_me_range" bottom_delta="-36"/>
-			<text name="meters">
-				Meter
-			</text>
-      <scroll_list bottom_delta="-169" height="159" name="NearMe"  />
-		</panel>
-	</tab_container>
-	<button label="Auswählen" label_selected="Auswählen" name="Select"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<string name="not_found">
-		„[TEXT]“ nicht gefunden
-	</string>
-	<string name="no_one_near">
-		Niemand in der Nähe
-	</string>
-	<string name="no_results">
-		Keine Ergebnisse
-	</string>
-	<string name="searching">
-		Suchen...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="EINWOHNER AUSWÄHLEN">
+	<tab_container name="ResidentChooserTabs">
+		<panel label="Suchen" name="SearchPanel">
+			<text name="InstructSearchResidentName">
+				Geben Sie einen Teil des Namens einer Person ein:
+			</text>
+			<line_editor bottom_delta="-36" name="Edit"/>
+			<button label="Los" label_selected="Los" name="Find"/>
+			<scroll_list bottom_delta="-79" height="74" name="SearchResults"/>
+		</panel>
+		<panel label="Visitenkarten" name="CallingCardsPanel">
+			<text name="InstructSelectCallingCard">
+				Wählen Sie eine Visitenkarte:
+			</text>
+		</panel>
+		<panel label="In meiner Nähe" name="NearMePanel">
+			<text name="InstructSelectResident">
+				Wählen Sie eine Person aus, die sich in der Nähe befindet:
+			</text>
+			<button font="SansSerifSmall" label="Liste aktualisieren" label_selected="Liste aktualisieren" left_delta="10" name="Refresh" width="105"/>
+			<slider bottom_delta="-36" label="Bereich" name="near_me_range"/>
+			<text name="meters">
+				Meter
+			</text>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
+	<string name="not_found">
+		„[TEXT]“ nicht gefunden
+	</string>
+	<string name="no_one_near">
+		Niemand in der Nähe
+	</string>
+	<string name="no_results">
+		Keine Ergebnisse
+	</string>
+	<string name="searching">
+		Suchen...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
index 823d6de78b82b9d1911463390e6c476130e0ae19..3072735c669902f82879061b2d04b8195e6d9205 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Avatar-Texturen">
+<floater name="avatar_texture_debug" title="AVATAR-TEXTUREN">
 	<text name="label">
 		Gebackene Texturen
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
index 0992727e73033852f7ad8c66d8d2282cd1aa6259..bfa3f6e4c93fb7b6414d7ff46bc86fe53a0671fb 100644
--- a/indra/newview/skins/default/xui/de/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/de/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Beacons">
-	<panel name="beacons_panel">
-		<check_box label="Auf Berührung beschränkte Skriptobjekte" name="touch_only"/>
-		<check_box label="Skripting-Objekte" name="scripted"/>
-		<check_box label="Physische Objekte" name="physical"/>
-		<check_box label="Soundquellen" name="sounds"/>
-		<check_box label="Partikelquellen" name="particles"/>
-		<check_box label="Glanzlichter anzeigen" name="highlights"/>
-		<check_box label="Beacons anzeigen" name="beacons"/>
-		<text name="beacon_width_label">
-			Beacon-Breite:
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BEACONS">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			Anzeigen:
+		</text>
+		<check_box label="Beacons" name="beacons"/>
+		<check_box label="Glanzlichter" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="Beacon-Breite">
+			Breite:
+		</text>
+		<text name="label_objects">
+			Für diese Objekte:
+		</text>
+		<check_box label="Physisch" name="physical"/>
+		<check_box label="Skriptobjekte" name="scripted"/>
+		<check_box label="Nur berühren" name="touch_only"/>
+		<check_box label="Soundquellen" name="sounds"/>
+		<check_box label="Partikelquellen" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index de3617ed258fb684ad1e947426eaeed17ae67082..2f510cd75afec2ccfff8b0904b3c7bf0fd566de7 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Rasteroptionen">
-	<spinner label="Rastereinheit (Meter)" name="GridResolution" />
-	<spinner label="Rastergröße (Meter)" name="GridDrawSize" />
-	<check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit" />
-	<check_box label="Querschnitte anzeigen" name="GridCrossSection" />
-	<slider label="Rasterdeckkraft" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="RASTEROPTIONEN">
+	<spinner label="Rastereinheit (Meter)" name="GridResolution"/>
+	<spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
+	<check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
+	<check_box label="Querschnitte anzeigen" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="Rasterdeckkraft">
+		Deckkraft:
+	</text>
+	<slider label="Rasterdeckkraft" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index f058a0ed96725e360875f3c4b040feb5cf09a6f9..1dceb1ad674bbf4ef15d61dc6ab913e120e8f047 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Mehrere Inhaltsberechtigungen ändern">
-	<text name="applyto">
-		Inhaltsarten
-	</text>
-	<check_box label="Animation" name="check_animation"/>
-	<check_box label="Körperteile" name="check_bodypart"/>
-	<check_box label="Kleidung" name="check_clothing"/>
-	<check_box label="Gesten" name="check_gesture"/>
-	<check_box label="Landmarken" name="check_landmark"/>
-	<check_box label="Notizkarten" name="check_notecard"/>
-	<check_box label="Objekte" name="check_object"/>
-	<check_box label="Skripts" name="check_script"/>
-	<check_box label="Sounds" name="check_sound"/>
-	<check_box label="Texturen" name="check_texture"/>
-	<button label="Alle auswählen" label_selected="Alle" name="check_all"/>
-	<button label="Keine" label_selected="Keine" name="check_none"/>
-	<text name="newperms">
-		Neue Berechtigungen
-	</text>
-	<check_box label="Mit Gruppe teilen" name="share_with_group"/>
-	<check_box label="Kopieren allen erlauben" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		Nächster Eigentümer kann:
-	</text>
-	<check_box label="Bearbeiten" name="next_owner_modify"/>
-	<check_box label="Kopieren" name="next_owner_copy"/>
-	<check_box label="Verkaufen/Weggeben" name="next_owner_transfer"/>
-	<button label="Hilfe" name="help"/>
-	<button label="Ãœbernehmen" name="apply"/>
-	<button label="Schließen" name="close"/>
-	<string name="nothing_to_modify_text">
-		Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
-	</string>
-	<string name="status_text">
-		Berechtigungen werden eingestellt auf [NAME]
-	</string>
-	<string name="start_text">
-		Start: Anforderung auf Änderung der Berechtigung...
-	</string>
-	<string name="done_text">
-		Ende: Anforderung auf Änderung der Berechtigung.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Inhalt-Berechtigungen bearbeiten">
+	<floater.string name="nothing_to_modify_text">
+		Auswahl enthält keinen Inhalt, der bearbeitet werden kann.
+	</floater.string>
+	<floater.string name="status_text">
+		Berechtigungen werden eingestellt auf [NAME]
+	</floater.string>
+	<floater.string name="start_text">
+		Start: Anforderung auf Änderung der Berechtigung...
+	</floater.string>
+	<floater.string name="done_text">
+		Ende: Anforderung auf Änderung der Berechtigung.
+	</floater.string>
+	<check_box label="Animation" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="Animation"/>
+	<check_box label="Körperteile" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="Körperteile"/>
+	<check_box label="Kleidung" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="Kleidung"/>
+	<check_box label="Gesten" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="Gesten"/>
+	<check_box label="Notizkarten" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="Notizkarten"/>
+	<check_box label="Objekte" name="check_object"/>
+	<icon name="icon_object" tool_tip="Objekte"/>
+	<check_box label="Skripts" name="check_script"/>
+	<icon name="icon_script" tool_tip="Skripts"/>
+	<check_box label="Sounds" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="Sounds"/>
+	<check_box label="Texturen" name="check_texture"/>
+	<button label="√ Alle" label_selected="Alle" name="check_all"/>
+	<button label="Löschen" label_selected="Keine" name="check_none"/>
+	<text name="newperms">
+		Neue Inhalts-Berechtigungen
+	</text>
+	<text name="GroupLabel">
+		Gruppe:
+	</text>
+	<check_box label="Freigeben" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		Jeder:
+	</text>
+	<check_box label="Kopieren" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		Nächster Eigentümer:
+	</text>
+	<check_box label="Bearbeiten" name="next_owner_modify"/>
+	<check_box label="Kopieren" name="next_owner_copy"/>
+	<check_box initial_value="true" label="Transferieren" name="next_owner_transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+	<button label="OK" name="apply"/>
+	<button label="Abbrechen" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml
index 7b21042c2b3684ca7f5ecfed40d462fc0bafe386..b7909bf02d8d64bb475f64ddd4a4f6374d21db8f 100644
--- a/indra/newview/skins/default/xui/de/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/de/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Rempler, Stöße und Schläge">
+<floater name="floater_bumps" title="REMPLER, STÖßE UND SCHLÄGE">
 	<text name="none_detected">
 		Nicht erkannt
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
index 01858b3c364c61df2a4b6f51816350234a9824a8..47ea6a1bd44352b7e1e53e3cc6e10f8aabd6d751 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Inhalte kaufen" min_width="300">
+<floater name="floater_buy_contents" title="INHALTE KAUFEN" min_width="300">
 	<text name="contains_text">
 		[NAME] enthält:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
index 787f4698540facd96ee26408aad15d53c8fe57ea..05750a17820e9692d4e23a84ca29de9da4ff5637 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Geld kaufen">
+<floater name="buy currency" title="GELD KAUFEN">
 	<text name="info_buying">
 		Kaufe Geld:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml
index e0abf8fae9789acead658e3ab9b840dd3091745f..72a35db78c8b5c11c751eb455df7bb11cd58e4d4 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Land kaufen">
+<floater name="buy land" title="LAND KAUFEN">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml
index 3cfa59ff06d6f9ada2bbc07ea717b93cf8643b50..b1e4476207f5e5c6015390ff9f8fd00ff82476e8 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Objektkopie kaufen">
-	<text name="contents_text">
-		samt Inhalt:
-	</text>
-	<text name="buy_text">
-		[AMOUNT] L$ von [NAME] kaufen?
-	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73" />
-	<button label="Kaufen" label_selected="Kaufen" name="buy_btn" />
-	<text name="title_buy_text">
-		Kaufen
-	</text>
-	<string name="title_buy_copy_text">
-		Kopie kaufen von
-	</string>
-	<text name="no_copy_text">
-		(kein Kopieren)
-	</text>
-	<text name="no_modify_text">
-		(kein Bearbeiten)
-	</text>
-	<text name="no_transfer_text">
-		(kein Transferieren)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="OBJEKTKOPIE KAUFEN">
+	<text name="contents_text">
+		Inhalt:
+	</text>
+	<text name="buy_text">
+		[AMOUNT] L$ von [NAME] kaufen?
+	</text>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73"/>
+	<button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
+	<text name="title_buy_text">
+		Kaufen
+	</text>
+	<string name="title_buy_copy_text">
+		Kopie kaufen von
+	</string>
+	<text name="no_copy_text">
+		(kein Kopieren)
+	</text>
+	<text name="no_modify_text">
+		(kein Bearbeiten)
+	</text>
+	<text name="no_transfer_text">
+		(kein Transferieren)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
index f44db713d8b89f541e42b42fe7b39fc1e312ef21..a0cf6cbecf363b4770d6b5d8747e18b929442f66 100644
--- a/indra/newview/skins/default/xui/de/floater_camera.xml
+++ b/indra/newview/skins/default/xui/de/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		Kamera um Fokus drehen
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		Kamera auf Fokus zoomen
-	</floater.string>
-	<floater.string name="move_tooltip">
-		Kamera nach oben, unten, links und rechts bewegen
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
-		<joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Kamera um Fokus drehen
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Kamera auf Fokus zoomen
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Kamera nach oben, unten, links und rechts bewegen
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
+		<joystick_zoom name="zoom" tool_tip="Kamera auf Fokus zoomen"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus herum kreisen"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="Kamera kreisen"/>
+		<button label="" name="pan_btn" tool_tip="Kamera schwenken"/>
+		<button label="" name="avatarview_btn" tool_tip="Avatarsicht"/>
+		<button label="" name="freecamera_btn" tool_tip="Objekt ansehen"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_choose_group.xml b/indra/newview/skins/default/xui/de/floater_choose_group.xml
index dd29aa7550167c093d4603bb7535b06ce01a0255..398645347bd54fdacf8f9223dd3ed084214b79b0 100644
--- a/indra/newview/skins/default/xui/de/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/de/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Gruppen">
+<floater name="groups" title="GRUPPEN">
 	<text name="groupdesc">
 		Gruppe wählen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml
index fa2f616249d5489e1616d88bea1e3cc6eda16600..4143f634aff406f351cb4011bf2f57fb6598a3fc 100644
--- a/indra/newview/skins/default/xui/de/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_color_picker.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Farbauswahl">
-	<text name="r_val_text">
-		Rot:
-	</text>
-	<text name="g_val_text">
-		Grün:
-	</text>
-	<text name="b_val_text">
-		Blau:
-	</text>
-	<text name="h_val_text">
-		Farbton:
-	</text>
-	<text name="s_val_text">
-		Sätt.:
-	</text>
-	<text name="l_val_text">
-		Hell.:
-	</text>
-	<check_box label="Sofort übernehmen" name="apply_immediate" />
-	<button label="" label_selected="" name="color_pipette" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" />
-	<button label="Auswählen" label_selected="Auswählen" name="select_btn" />
-	<text name="Current color:">
-		Aktuelle Farbe:
-	</text>
-	<text name="(Drag below to save.)">
-(Nach unten ziehen,
- um zu speichern)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="FARBAUSWAHL">
+	<text name="r_val_text">
+		Rot:
+	</text>
+	<text name="g_val_text">
+		Grün:
+	</text>
+	<text name="b_val_text">
+		Blau:
+	</text>
+	<text name="h_val_text">
+		Farbton:
+	</text>
+	<text name="s_val_text">
+		Sätt.:
+	</text>
+	<text name="l_val_text">
+		Hell.:
+	</text>
+	<check_box label="Jetzt übernehmen" name="apply_immediate"/>
+	<button label="" label_selected="" name="color_pipette"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+	<button label="OK" label_selected="Auswählen" name="select_btn"/>
+	<text name="Current color:">
+		Aktuelle Farbe:
+	</text>
+	<text name="(Drag below to save.)">
+		(Nach unten ziehen,
+ um zu speichern)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml
index 06b53dd8b48cca56804996682f2a19a4e97d53ab..f1ecd21c014aea8c40b256de694d3c60d4771897 100644
--- a/indra/newview/skins/default/xui/de/floater_customize.xml
+++ b/indra/newview/skins/default/xui/de/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aussehen">
+<floater name="floater customize" title="AUSSEHEN">
 	<tab_container name="customize tab container">
 		<placeholder label="Körperteile" name="body_parts_placeholder"/>
 		<panel label="Form" name="Shape">
diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
index d5a216a0b5621201a630eb55e79cf1c96b925722..7f4dc4a79e9c262e57f36479669dec19834e92a3 100644
--- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Tageszyklus-Editor">
+<floater name="Day Cycle Floater" title="TAGESZYKLUS-EDITOR">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Tageszyklus" name="Day Cycle">
 			<button label=" ?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml
index 734f4e942cdc2efabd16a2f6de6eb428b5350618..9108f3c2e5de87430c9224b0716221095c113a2e 100644
--- a/indra/newview/skins/default/xui/de/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="Geräte-Einstellungen für Voice-Chat" />
+<floater name="floater_device_settings" title="GERÄTE-EINSTELLUNGEN FÜR VOICE-CHAT" />
diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml
index 3717ff6a48e172bce224dfae9455790f1e7106c7..c9afcc847107fe3d6ba255824f55bd1df90e01c2 100644
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Umwelt-Editor">
+<floater name="Environment Editor Floater" title="UMWELT-EDITOR">
 	<text name="EnvTimeText">
 		Tageszeit
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_font_test.xml b/indra/newview/skins/default/xui/de/floater_font_test.xml
index 54278fc094a775d99d3bb4acc8b38e39fe6f2a85..522d966431a16c3b65e6c87cdb2b30185e404231 100644
--- a/indra/newview/skins/default/xui/de/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/de/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Schriftart-Test">
+<floater name="contents" title="SCHRIFTART-TEST">
 	<text name="linea">
 		OverrideTest, sollte hier als Times angezeigt werden. (Aus default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml
index bdee3b866481dfb095f1cf6c6722ee6c2f0bd223..aff0a9b92dc772b73fbd3f7a42fcfd1b72298d6f 100644
--- a/indra/newview/skins/default/xui/de/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/de/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktive Gesten">
+<floater name="gestures" title="AKTIVE GESTEN">
 	<text name="help_label">
 		Doppelklicken Sie auf eine Geste, um Animationen und Sound &#10;abzuspielen.
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml
index c7cfb5d9d3da924cdaf18f935bbf86ac74f657e4..34ea18457e474939a8457aca931c7b66854f50e9 100644
--- a/indra/newview/skins/default/xui/de/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml
@@ -1,136 +1,102 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="Gott-Werkzeuge">
-	<tab_container name="GodTools Tabs">
-		<panel label="Raster" name="grid">
-			<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen"
-			     name="Kick all users" width="175" />
-			<button label="Sichtbarkeits-Cache dieser Regionskarte leeren"
-			     label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren"
-			     name="Flush This Region&apos;s Map Visibility Caches" width="285" />
-		</panel>
-		<panel label="Region" name="region">
-			<text name="Sim Name:" width="55">
-				Sim-Name:
-			</text>
-			<check_box label="Startbereich Einleitung" name="check prelude"
-			     tool_tip="Diese Region zu einem Startbereich machen." />
-			<check_box label="Sonne fest" name="check fixed sun"
-			     tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ &gt; „Terrain“." />
-			<check_box label="Zuhause auf Teleport &#10;zurücksetzen" name="check reset home"
-			     tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen." height="32" />
-			<check_box label="Sichtbar" name="check visible"
-			     tool_tip="Diese Region für Nicht-Götter sichtbar machen." bottom_delta="-32" />
-			<check_box label="Schaden" name="check damage"
-			     tool_tip="Schaden in dieser Region aktivieren." />
-			<check_box label="Trafficüberwachung blockieren" name="block dwell"
-			     tool_tip="In dieser Region die Traffic-Berechnung abschalten." />
-			<check_box label="Terraformen blockieren" name="block terraform"
-			     tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)" />
-			<check_box label="Sandkasten" name="is sandbox"
-			     tool_tip="Sandkastenregion ein-/ausschalten." />
-			<button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain"
-			     tool_tip="Das aktuelle Terrain als Standard speichern." width="118" />
-			<button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen"
-			     name="Revert Terrain"
-			     tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118" />
-			<button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain"
-			     tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118" />
-			<text name="estate id">
-				Grundstücks-ID:
-			</text>
-			<text name="parent id">
-				Parent ID:
-			</text>
-			<line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region" />
-			<text name="Grid Pos: ">
-				Raster-Pos.:
-			</text>
-			<line_editor name="gridposx" tool_tip="Die X-Rasterposition dieser Region" left_delta="110" width="35" />
-			<line_editor name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" left_delta="45" width="35" />
-			<text name="Redirect to Grid: " >
-				Auf Raster umleiten:
-			</text>
-			<line_editor left_delta="110" name="redirectx" width="35" />
-			<line_editor left_delta="45" name="redirecty" width="35" />
-			<text name="billable factor text" font="SansSerifSmall" >
-				Abrechnungsfaktor:
-			</text>
-			<text name="land cost text">
-				L$ pro qm:
-			</text>
-			<button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh"
-			     tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren." />
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"
-			     tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen." />
-			<button label="Region auswählen" label_selected="Region auswählen"
-			     name="Select Region"
-			     tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130" left="136"/>
-			<button label="Automatisch speichern" label_selected="Automatisch speichern"
-			     name="Autosave now"
-			     tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130" left="136"/>
-		</panel>
-		<panel label="Objekte" name="objects">
-			<text name="Sim Name:" width="55">
-				Sim-Name:
-			</text>
-			<text name="region name">
-				Welsh
-			</text>
-			<check_box label="Skripts &#10;deaktivieren" name="disable scripts"
-			     tool_tip="Skripts in dieser Region komplett abschalten" />
-			<check_box label="Kollisionen &#10;deaktivieren" name="disable collisions"
-			     tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten" />
-			<check_box label="Physik deaktivieren" name="disable physics"
-			     tool_tip="Die Physik in dieser Region komplett abschalten" />
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"
-			     tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen." />
-			<button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target"
-			     tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen." />
-			<text name="target_avatar_name">
-				(kein Ziel)
-			</text>
-			<button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen"
-			     label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen"
-			     name="Delete Target&apos;s Scripted Objects On Others Land"
-			     tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen"
-			     label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen"
-			     name="Delete Target&apos;s Scripted Objects On *Any* Land"
-			     tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="*ALLE* Objekte des Ziels löschen"
-			     label_selected="*ALLE* Objekte des Ziels löschen"
-			     name="Delete *ALL* Of Target&apos;s Objects"
-			     tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben." />
-			<button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte"
-			     name="Get Top Colliders"
-			     tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130" />
-			<button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts"
-			     tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130" />
-			<button label="Scripting-Ãœbersicht" label_selected="Scripting-Ãœbersicht"
-			     name="Scripts digest"
-			     tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130" />
-		</panel>
-		<panel label="Anfrage" name="request">
-			<text name="Destination:">
-				Ziel:
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="Auswahl" />
-				<combo_box.item name="item2" label="Avatar-Region" />
-			</combo_box>
-			<text name="Request:">
-				Anfrage:
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="Kollisionsobjekte &lt;Schritte&gt;" />
-				<combo_box.item name="item2" label="Skripts &lt;Zähler&gt;,&lt;Optionales Muster&gt;" />
-				<combo_box.item name="item3" label="Objekte &lt;Muster&gt;" />
-				<combo_box.item name="item4" label="lt;asset_id&gt; erstellen" />
-			</combo_box>
-			<text name="Parameter:">
-				Parameter:
-			</text>
-			<button label="Anfrage" label_selected="Anfrage" name="Make Request" />
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="GOTT-WERKZEUGE">
+	<tab_container name="GodTools Tabs">
+		<panel label="Raster" name="grid">
+			<button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" name="Kick all users" width="175"/>
+			<button label="Sichtbarkeits-Cache dieser Regionskarte leeren" label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
+		</panel>
+		<panel label="Region" name="region">
+			<text name="Sim Name:" width="55">
+				Sim-Name:
+			</text>
+			<check_box label="Startbereich Einleitung" name="check prelude" tool_tip="Diese Region zu einem Startbereich machen."/>
+			<check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ &gt; „Terrain“."/>
+			<check_box height="32" label="Zuhause auf Teleport 
+zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen."/>
+			<check_box bottom_delta="-32" label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/>
+			<check_box label="Schaden" name="check damage" tool_tip="Schaden in dieser Region aktivieren."/>
+			<check_box label="Trafficüberwachung blockieren" name="block dwell" tool_tip="In dieser Region die Traffic-Berechnung abschalten."/>
+			<check_box label="Terraformen blockieren" name="block terraform" tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)"/>
+			<check_box label="Sandkasten" name="is sandbox" tool_tip="Sandkastenregion ein-/ausschalten."/>
+			<button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" tool_tip="Das aktuelle Terrain als Standard speichern." width="118"/>
+			<button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118"/>
+			<button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118"/>
+			<text name="estate id">
+				Grundstücks-ID:
+			</text>
+			<text name="parent id">
+				Parent ID:
+			</text>
+			<line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region"/>
+			<text name="Grid Pos: ">
+				Raster-Pos.:
+			</text>
+			<line_editor left_delta="110" name="gridposx" tool_tip="Die X-Rasterposition dieser Region" width="35"/>
+			<line_editor left_delta="45" name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" width="35"/>
+			<text name="Redirect to Grid: ">
+				Auf Raster umleiten:
+			</text>
+			<line_editor left_delta="110" name="redirectx" width="35"/>
+			<line_editor left_delta="45" name="redirecty" width="35"/>
+			<text font="SansSerifSmall" name="billable factor text">
+				Abrechnungsfaktor:
+			</text>
+			<text name="land cost text">
+				L$ pro qm:
+			</text>
+			<button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh" tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren."/>
+			<button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
+			<button label="Region auswählen" label_selected="Region auswählen" left="136" name="Select Region" tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130"/>
+			<button label="Automatisch speichern" label_selected="Automatisch speichern" left="136" name="Autosave now" tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130"/>
+		</panel>
+		<panel label="Objekte" name="objects">
+			<panel.string name="no_target">
+				(kein Ziel)
+			</panel.string>
+			<text name="Sim Name:" width="55">
+				Sim-Name:
+			</text>
+			<text name="region name">
+				Welsh
+			</text>
+			<check_box label="Skripts 
+deaktivieren" name="disable scripts" tool_tip="Skripts in dieser Region komplett abschalten"/>
+			<check_box label="Kollisionen 
+deaktivieren" name="disable collisions" tool_tip="Nicht-Avatar-Kollisionen in dieser Region komplett abschalten"/>
+			<check_box label="Physik deaktivieren" name="disable physics" tool_tip="Die Physik in dieser Region komplett abschalten"/>
+			<button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/>
+			<button label="Ziel festlegen" label_selected="Ziel festlegen" name="Set Target" tool_tip="Den Ziel-Avatar für das Löschen von Objekten auswählen."/>
+			<text name="target_avatar_name">
+				(kein Ziel)
+			</text>
+			<button label="Geskriptete Objekte des Ziels auf anderen Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf anderen Ländern löschen" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte auf Land, das dem Ziel nicht gehört, löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" label_selected="Geskriptete Objekte des Ziels auf *allen* Ländern löschen" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Alle dem Ziel gehörenden geskripteten Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="*ALLE* Objekte des Ziels löschen" label_selected="*ALLE* Objekte des Ziels löschen" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Alle dem Ziel gehörenden Objekte in dieser Region löschen. Objekte (nicht kopierfähig) werden zurückgegeben."/>
+			<button label="Top-Kollisionsobjekte" label_selected="Top-Kollisionsobjekte" name="Get Top Colliders" tool_tip="Zeigt eine Liste der Objekte mit den meisten Callbacks in der nahen Phase an." width="130"/>
+			<button label="Top-Skripts" label_selected="Top-Skripts" name="Get Top Scripts" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit über Skripts ausführen." width="130"/>
+			<button label="Scripting-Übersicht" label_selected="Scripting-Übersicht" name="Scripts digest" tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130"/>
+		</panel>
+		<panel label="Anfrage" name="request">
+			<text name="Destination:">
+				Ziel:
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="Auswahl" name="item1"/>
+				<combo_box.item label="Avatar-Region" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				Anfrage:
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="Kollisionsobjekte &lt;Schritte&gt;" name="item1"/>
+				<combo_box.item label="Skripts &lt;Zähler&gt;,&lt;Optionales Muster&gt;" name="item2"/>
+				<combo_box.item label="Objekte &lt;Muster&gt;" name="item3"/>
+				<combo_box.item label="lt;asset_id&gt; erstellen" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				Parameter:
+			</text>
+			<button label="Anfrage" label_selected="Anfrage" name="Make Request"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
index 4051776b0d685d226cde4398694bcef4519f1f38..ba2269012fe7f20bff07220f8699bfaa3bb48099 100644
--- a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
@@ -1,30 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Hardware-Einstellungen">
-	<text name="Filtering:">
-		Filtern:
-	</text>
-	<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani" />
-	<text name="Antialiasing:">
-		Antialiasing:
-	</text>
-	<combo_box label="Antialiasing" name="fsaa">
-		<combo_box.item name="FSAADisabled" label="Deaktiviert" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="Gamma:" name="gamma" />
-	<text name="(brightness, lower is brighter)">
-		(Helligkeit, niedriger ist heller, 0=Standard)
-	</text>
-	<text name="Enable VBO:">
-		VBO aktivieren:
-	</text>
-	<check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo"
-	     tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern.  Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist." />
-	<slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory"
-	     tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen." />
-	<spinner label="Nebeldistanzverhältnis:" name="fog" />
-	<button label="OK" label_selected="OK" name="OK" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="HARDWARE-EINSTELLUNGEN">
+	<text name="Filtering:">
+		Filtern:
+	</text>
+	<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
+	<text name="Antialiasing:">
+		Antialiasing:
+	</text>
+	<combo_box label="Antialiasing" name="fsaa">
+		<combo_box.item label="Deaktiviert" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="Gamma:" name="gamma"/>
+	<text name="(brightness, lower is brighter)">
+		(0 = Standard-Helligkeit, weniger = heller)
+	</text>
+	<text name="Enable VBO:">
+		VBO aktivieren:
+	</text>
+	<check_box label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern.  Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist."/>
+	<slider label="Texturspeicher (MB):" name="GrapicsCardTextureMemory" tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen."/>
+	<spinner label="Nebeldistanzverhältnis:" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_hud.xml b/indra/newview/skins/default/xui/de/floater_hud.xml
index 0f11e2346da2ae942bb38cd89aed9cf05d767418..18584e57cae309d8edb33e491140bcfee4697031 100644
--- a/indra/newview/skins/default/xui/de/floater_hud.xml
+++ b/indra/newview/skins/default/xui/de/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Tutorial" />
+<floater name="floater_hud" title="TUTORIAL" />
diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml
index 724da834954e3a7957928d02ac05622b3561cf24..80c71d41f77bb3bf0c6f13e216881bc73d15c5c5 100644
--- a/indra/newview/skins/default/xui/de/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		Name:
-	</text>
-	<text name="description_label">
-		Beschreibung:
-	</text>
-	<text name="preview_label">
-		Bildvorschau als:
-	</text>
-	<combo_box label="Kleidungstyp" name="clothing_type_combo">
-		<combo_box.item name="Image" label="Bild" />
-		<combo_box.item name="Hair" label="Haar" />
-		<combo_box.item name="FemaleHead" label="Kopf (Frau)" />
-		<combo_box.item name="FemaleUpperBody" label="Oberkörper (Frau)" />
-		<combo_box.item name="FemaleLowerBody" label="Unterkörper (Frau)" />
-		<combo_box.item name="MaleHead" label="Kopf (Mann)" />
-		<combo_box.item name="MaleUpperBody" label="Oberkörper (Mann)" />
-		<combo_box.item name="MaleLowerBody" label="Unterkörper (Mann)" />
-		<combo_box.item name="Skirt" label="Rock" />
-		<combo_box.item name="SculptedPrim" label="Geformtes Primitiv" />
-	</combo_box>
-	<text name="bad_image_text">
-		Bild kann nicht gelesen werden.
-
-Speichern Sie das Bild als 24 Bit Targa (.tga).
-	</text>
-	<check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check" />
-	<button label="Abbrechen" name="cancel_btn" />
-	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		Name:
+	</text>
+	<text name="description_label">
+		Beschreibung:
+	</text>
+	<text name="preview_label">
+		Bildvorschau als:
+	</text>
+	<combo_box label="Kleidungstyp" name="clothing_type_combo">
+		<combo_box.item label="Bild" name="Image"/>
+		<combo_box.item label="Haare" name="Hair"/>
+		<combo_box.item label="Kopf (Frau)" name="FemaleHead"/>
+		<combo_box.item label="Oberkörper (Frau)" name="FemaleUpperBody"/>
+		<combo_box.item label="Unterkörper (Frau)" name="FemaleLowerBody"/>
+		<combo_box.item label="Kopf (Mann)" name="MaleHead"/>
+		<combo_box.item label="Oberkörper (Mann)" name="MaleUpperBody"/>
+		<combo_box.item label="Unterkörper (Mann)" name="MaleLowerBody"/>
+		<combo_box.item label="Rock" name="Skirt"/>
+		<combo_box.item label="Geformtes Primitiv" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		Bild kann nicht gelesen werden.
+
+Speichern Sie das Bild als 24 Bit Targa (.tga).
+	</text>
+	<check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check"/>
+	<button label="Abbrechen" name="cancel_btn"/>
+	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml
index f8c9b62824361d2f05237c70a1aa65dfb18e0b23..f9421788bd774bd8db02bc25f57152e54b7ae3a3 100644
--- a/indra/newview/skins/default/xui/de/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/de/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Objekt prüfen" min_width="450" >
+<floater name="inspect" title="OBJEKT PRÃœFEN" min_width="450" >
 	<scroll_list name="object_list"
 	     tool_tip="Wählen Sie ein Objekt aus dieser Liste, um es in der Second Life-Welt zu markieren">
 		<column label="Objektname" name="object_name" />
diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml
index c8c67240d8787c4738f7eec903201e5330ee971f..6444e8788208d6c936a4d3565d2bff6c92536e8f 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory" title="Inventar">
+<floater name="Inventory" title="INVENTAR">
 	<search_editor label="Suchanfrage hier eintippen" name="inventory search editor" />
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle Objekte" name="All Items" />
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
index 3e79a31abd0e7e6c3c0a699f4b34291d62ff58bf..b5e8ed0b6fee3fc0e41d02727f9d206841a22b6f 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Inventarobjekt-Eigenschaften">
-	<text name="LabelItemNameTitle">
-		Name:
-	</text>
-	<text name="LabelItemDescTitle">
-		Beschreibung:
-	</text>
-	<text name="LabelCreatorTitle">
-		Ersteller:
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnCreator" />
-	<text name="LabelOwnerTitle">
-		Eigentümer:
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnOwner" />
-	<text name="LabelAcquiredTitle">
-		Erworben:
-	</text>
-	<text name="LabelAcquiredDate">
-		Mittwoch, 24. Mai 2006, 12:50:46
-	</text>
-	<text name="OwnerLabel">
-		Sie können:
-	</text>
-	<check_box label="Bearbeiten" name="CheckOwnerModify" />
-	<check_box label="Kopieren" name="CheckOwnerCopy" left_delta="85" />
-	<check_box label="Verkaufen/Weggeben" name="CheckOwnerTransfer" />
-	<text name="BaseMaskDebug">
-		B:
-	</text>
-	<text name="OwnerMaskDebug">
-		O:
-	</text>
-	<text name="GroupMaskDebug">
-		G:
-	</text>
-	<text name="EveryoneMaskDebug">
-		E:
-	</text>
-	<text name="NextMaskDebug">
-		N:
-	</text>
-	<check_box label="Mit Gruppe teilen" name="CheckShareWithGroup" />
-	<check_box label="Kopieren allen erlauben" name="CheckEveryoneCopy" />
-	<text name="NextOwnerLabel" width="150">
-		Nächster Eigentümer kann:
-	</text>
-	<check_box label="Bearbeiten" name="CheckNextOwnerModify" />
-	<check_box label="Kopieren" name="CheckNextOwnerCopy" left_delta="85" />
-	<check_box label="Verkaufen/Weggeben" name="CheckNextOwnerTransfer" />
-	<text name="SaleLabel">
-		Objekt markieren:
-	</text>
-	<check_box label="Zum Verkauf" name="CheckPurchase" />
-	<radio_group name="RadioSaleType" left_delta="85"  width="245" >
-		<radio_item name="radio" label="Original" />
-		<radio_item name="radio2" label="Kopieren" />
-	</radio_group>
-	<text name="TextPrice">
-		Preis:  L$
-	</text>
-	<text name="unknown">
-		(unbekannt)
-	</text>
-	<text name="public">
-		(öffentlich)
-	</text>
-	<text name="you_can">
-		Sie können:
-	</text>
-	<text name="owner_can">
-		Eigentümer kann:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="INVENTAROBJEKT-EIGENSCHAFTEN">
+	<floater.string name="unknown">
+		(unbekannt)
+	</floater.string>
+	<floater.string name="public">
+		(öffentlich)
+	</floater.string>
+	<floater.string name="you_can">
+		Sie können:
+	</floater.string>
+	<floater.string name="owner_can">
+		Eigentümer kann:
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		Name:
+	</text>
+	<text name="LabelItemDescTitle">
+		Beschreibung:
+	</text>
+	<text name="LabelCreatorTitle">
+		Ersteller:
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		Eigentümer:
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		Erworben:
+	</text>
+	<text name="LabelAcquiredDate">
+		Mittwoch, 24. Mai 2006, 12:50:46
+	</text>
+	<text name="OwnerLabel">
+		Sie:
+	</text>
+	<check_box label="Bearbeiten" name="CheckOwnerModify"/>
+	<check_box label="Kopieren" left_delta="85" name="CheckOwnerCopy"/>
+	<check_box label="Wiederverkaufen" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		Jeder:
+	</text>
+	<check_box label="Kopieren" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		Gruppe:
+	</text>
+	<check_box label="Teilen" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="150">
+		Nächster Eigentümer:
+	</text>
+	<check_box label="Bearbeiten" name="CheckNextOwnerModify"/>
+	<check_box label="Kopieren" left_delta="85" name="CheckNextOwnerCopy"/>
+	<check_box label="Wiederverkaufen" name="CheckNextOwnerTransfer"/>
+	<check_box label="Zum Verkauf" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="Kopieren" name="Copy"/>
+		<combo_box.item label="Original" name="Original"/>
+	</combo_box>
+	<spinner label="Preis: L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
index 2f2eb5aa8d978109a6e893052996e191d2e7e96a..8dfffe06d190e0efdd7d913c19c3679177c5d39c 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventar_letzte_objekte">
+<floater name="Inventory Finder" title="INVENTAR_LETZTE_OBJEKTE">
 	<check_box label="Animation" name="check_animation" />
 	<check_box label="Visitenkarten" name="check_calling_card" />
 	<check_box label="Kleidung" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml
index ccf6f14eade66b03364a7006e2bfe4fdd6f380ff..9507d063d12276806c5cc9bd431a021fa455d49f 100644
--- a/indra/newview/skins/default/xui/de/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/de/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick-Konfiguration">
+<floater name="Joystick" title="JOYSTICK-KONFIGURATION">
 	<check_box name="enable_joystick" width="80" label="Joystick aktivieren:"/>
 	<text left="140" name="joystick_type" width="360"/>
 	<spinner label="X-Achse" name="JoystickAxis1"/>
diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
index 4dd9fd6c76d0110b4099c1f25558409107f533d5..9468557fc48318a7069be3a6dc96f9a5c76e47c4 100644
--- a/indra/newview/skins/default/xui/de/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_lagmeter" title="Lag-Anzeige">
+<floater name="floater_lagmeter" title="LAG-ANZEIGE">
 	<button name="client_lagmeter" tool_tip="Client-Lag-Status" />
 	<text name="client">
 		Client:
diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
index 685490338295eef0a635d2d04364d5aecbaf28aa..f258dc2f5d6d51a99acbd8c774d42a0276c68e40 100644
--- a/indra/newview/skins/default/xui/de/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mein Land">
-	<scroll_list name="parcel list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/>
-	<button label="Auf Karte" label_selected="Auf Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/>
-	<text name="contrib_label">
-		Beiträge zu Ihren Gruppen:
-	</text>
-	<scroll_list name="grant list">
-		<column label="Gruppe" name="group"/>
-		<column label="Gebiet" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		Zulässiger Landbesitz bei aktuellem Zahlungsplan:
-	</text>
-	<text name="allowed_text">
-		[AREA] qm
-	</text>
-	<text name="current_label">
-		Aktueller Landbesitz:
-	</text>
-	<text name="current_text">
-		[AREA] qm
-	</text>
-	<text name="available_label">
-		Für Landkäufe verfügbar:
-	</text>
-	<text name="available_text">
-		[AREA] qm
-	</text>
-	<string name="area_string">
-		[AREA] qm
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MEIN LAND">
+	<scroll_list name="parcel list">
+		<column label="Parzelle" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zum Mittelpunkt dieses Landes teleportieren."/>
+	<button label="Karte" label_selected="Karte" name="Show on Map" tool_tip="Dieses Land auf der Weltkarte anzeigen."/>
+	<text name="contrib_label">
+		Beiträge zu Ihren Gruppen:
+	</text>
+	<scroll_list name="grant list">
+		<column label="Gruppe" name="group"/>
+		<column label="Gebiet" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		Zulässiger Landbesitz bei aktuellem Zahlungsplan:
+	</text>
+	<text name="allowed_text">
+		[AREA] qm
+	</text>
+	<text name="current_label">
+		Aktueller Landbesitz:
+	</text>
+	<text name="current_text">
+		[AREA] qm
+	</text>
+	<text name="available_label">
+		Für Landkäufe verfügbar:
+	</text>
+	<text name="available_text">
+		[AREA] qm
+	</text>
+	<string name="area_string">
+		[AREA] qm
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
index 8d499bc30033fd16e00ba6d41bcc721c0250718a..947a435f8ad13cbb34a5e89a6e44ce394625fd1b 100644
--- a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Skript: Neues Skript">
-	<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset" />
-	<check_box label="Läuft" name="running" />
-	<check_box label="Mono" name="mono" />
-	<text name="not_allowed">
-		Sie können dieses Skript nicht anzeigen.
-	</text>
-	<string name="script_running">
-		Läuft
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SKRIPT: NEUES SKRIPT">
+	<floater.string name="not_allowed">
+		Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung &quot;kein kopieren&quot; festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+	</floater.string>
+	<floater.string name="script_running">
+		Läuft
+	</floater.string>
+	<floater.string name="Title">
+		Skript: [NAME]
+	</floater.string>
+	<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Reset"/>
+	<check_box initial_value="true" label="Läuft" name="running"/>
+	<check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
index d7f56b302dfc6104b664e9a5f74a2e55bc910e9e..dd6d559c40489caeac60e1b0aba6e3af30313998 100644
--- a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL-Wiki">
+<floater name="script ed float" title="LSL-WIKI">
 	<check_box label="Cursor folgen" name="lock_check" />
 	<combo_box label="Sperren" name="history_combo" />
 	<button label="Zurück" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml
index 97b3d76a463de6cf9f12203743e278436822897a..73737846734ec34b5f3666567399edca5a1bc3a7 100644
--- a/indra/newview/skins/default/xui/de/floater_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		O
-	</floater.string>
-	<floater.string name="mini_map_west">
-		W
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NO
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SW
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NW
-	</floater.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="O" name="floater_map_east" text="O">
-		O
-	</text>
-	<text label="W" name="floater_map_west" text="W">
-		W
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SO" name="floater_map_southeast" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northeast" text="NO">
-		NO
-	</text>
-	<text label="SW" name="floater_map_southwest" text="SW">
-		SW
-	</text>
-	<text label="NW" name="floater_map_northwest" text="NW">
-		NW
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		N
+	</floater.string>
+	<floater.string name="mini_map_east">
+		O
+	</floater.string>
+	<floater.string name="mini_map_west">
+		W
+	</floater.string>
+	<floater.string name="mini_map_south">
+		S
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		SO
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		NO
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		SW
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		NW
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION](Karte mit Doppelklick öffnen)
+	</floater.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="O" name="floater_map_east" text="O">
+		O
+	</text>
+	<text label="W" name="floater_map_west" text="W">
+		W
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SO" name="floater_map_southeast" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northeast" text="NO">
+		NO
+	</text>
+	<text label="SW" name="floater_map_southwest" text="SW">
+		SW
+	</text>
+	<text label="NW" name="floater_map_northwest" text="NW">
+		NW
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml
index ee2532127ebeb4a4213d202278e83da314a3be0a..21bf7aa563038e672d7a63c24408d2d21f8b5b97 100644
--- a/indra/newview/skins/default/xui/de/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/de/floater_media_browser.xml
@@ -1,19 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Medienbrowser">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="Zurück" name="back" />
-			<button label="Weiter" name="forward" />
-			<button label="Neu laden" name="reload" />
-			<button label="Los" name="go" />
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="Aktuelle URL an Parzelle senden" name="assign" />
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="In meinem Browser öffnen" name="open_browser" />
-			<check_box label="Immer in meinem Browser öffnen" name="open_always" />
-			<button label="Schließen" name="close" />
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="MEDIENBROWSER">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Zurück" name="back"/>
+			<button label="Weiter" name="forward"/>
+			<button label="Neu laden" name="reload"/>
+			<button label="Los" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="zurückspulen" name="rewind"/>
+			<button label="anhalten" name="stop"/>
+			<button label="vorwärts" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Aktuelle URL an Parzelle senden" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="In meinem Browser öffnen" name="open_browser"/>
+			<check_box label="Immer in meinem Browser öffnen" name="open_always"/>
+			<button label="Schließen" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
index 0b77a7fe9df278e583115eb39f6926229a46d56b..72210aa750bde130737f678e2d38c5526adc55b9 100644
--- a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Speicherverlust-Simulation">
-	<spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed" />
-	<spinner label="Max. Speicherverlust (MB):" name="max_leak" />
-	<text name="total_leaked_label">
-		Aktueller Speicherverlust:[SIZE] KB
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="Start" name="start_btn" />
-	<button label="Stopp" name="stop_btn" />
-	<button label="Freigeben" name="release_btn" />
-	<button label="Schließen" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Speicherverlust simulieren">
+	<spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed"/>
+	<spinner label="Max. Speicherverlust (MB):" name="max_leak"/>
+	<text name="total_leaked_label">
+		Aktueller Speicherverlust:[SIZE] KB
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="Start" name="start_btn"/>
+	<button label="Stopp" name="stop_btn"/>
+	<button label="Freigeben" name="release_btn"/>
+	<button label="Schließen" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml
index 4ea2048e623f83d3172771e5906c79095a6a394d..af133b6bd79f27e5d4a752665c786c50d455e930 100644
--- a/indra/newview/skins/default/xui/de/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/de/floater_moveview.xml
@@ -1,16 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="Nach links" />
-	<button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts" />
-	<button label="" label_selected="" name="move up btn"
-	     tool_tip="Springen oder Steigflug" />
-	<button label="" label_selected="" name="move down btn" tool_tip="Ducken oder Sinkflug" />
-	<button label="Fliegen" label_selected="Fliegen" name="fly btn"
-	     tool_tip="Fliegen/Landen" />
-	<joystick_slide name="slide left btn" tool_tip="Nach links" />
-	<joystick_slide name="slide right btn" tool_tip="Nach rechts" />
-	<joystick_turn name="forward btn" tool_tip="Nach vorn" />
-	<joystick_turn name="backward btn" tool_tip="Nach hinten" />
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		Vorwärts gehen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="walk_back_tooltip">
+		Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<string name="run_forward_tooltip">
+		Vorwärts rennen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="run_back_tooltip">
+		Rückwärts rennen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<string name="fly_forward_tooltip">
+		Vorwärts fliegen (Nach-oben-Pfeil oder W drücken)
+	</string>
+	<string name="fly_back_tooltip">
+		Rückwärts fliegen (Nach-Unten-Pfeil oder S drücken)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="Nach links (Links-Pfeil oder A drücken)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts (Rechts-Pfeil oder D drücken)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="Nach oben fliegen, „E&quot; drücken"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="Nach unten fliegen, „C&quot; drücken"/>
+		<joystick_turn name="forward btn" tool_tip="Vorwärts gehen (Nach-oben-Pfeil oder W drücken)"/>
+		<joystick_turn name="backward btn" tool_tip="Rückwärts gehen (Nach-Unten-Pfeil oder S drücken)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="Gehen"/>
+		<button label="" name="mode_run_btn" tool_tip="Rennen"/>
+		<button label="" name="mode_fly_btn" tool_tip="Fliegen"/>
+		<button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml
index 60c6ff008cb68694e9f50768a0ce7045d5af59a2..8cc8a5652339504ea096de2de0f157358ed2983c 100644
--- a/indra/newview/skins/default/xui/de/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Objekt nach Name stummschalten">
+<floater name="mute by name" title="OBJEKT NACH NAME STUMMSCHALTEN">
 	<text name="message">
 		Stummschalten nach Name betrifft nur Chat und IM, keine
 Sounds. Sie müssen den Objektnamen exakt angeben.
diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml
index fc24bcece4384074c61eeeddb83b16b27eb110db..30614b757851d8df9d94cd464301933390d4cdd4 100644
--- a/indra/newview/skins/default/xui/de/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/de/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakte">
+<floater name="floater_my_friends" title="KONTAKTE">
 	<tab_container name="friends_and_groups">
 		<panel label="Freunde" name="friends_panel" />
 		<panel label="Gruppen" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/de/floater_notification.xml b/indra/newview/skins/default/xui/de/floater_notification.xml
index 48ff900d5a9d84fa9a5ea99b688ec66ea6f7320c..48a26a0e986f79bcaa96336c94a62e5ca0bda9a9 100644
--- a/indra/newview/skins/default/xui/de/floater_notification.xml
+++ b/indra/newview/skins/default/xui/de/floater_notification.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification" title="Konsole: Meldungen">
+<floater name="notification" title="KONSOLE: MELDUNGEN">
 	<text_editor name="payload">
 		Wird geladen...
 	</text_editor>
diff --git a/indra/newview/skins/default/xui/de/floater_notifications_console.xml b/indra/newview/skins/default/xui/de/floater_notifications_console.xml
index a1cd69899c4e87a16e29f0ba016de3c423fc564b..0c075dd63af820e6af8797b0b7f833c43cd941ff 100644
--- a/indra/newview/skins/default/xui/de/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/de/floater_notifications_console.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notifications_console" title="Konsole: Meldungen">
+<floater name="notifications_console" title="KONSOLE: MELDUNGEN">
 	<combo_box label="Meldungsart auswählen" name="notification_types" width="412" />
 	<button label="Hinzufügen" name="add_notification" left="417" width="78" />
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml
index fa465c08c74406b6b6edf218a0c992936fc843b4..d7575876e18998ce24ef26ddf2d5ea9dd7f9d073 100644
--- a/indra/newview/skins/default/xui/de/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/de/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Objektinhalte">
+<floater name="objectcontents" title="OBJEKTINHALTE">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml
index a2e40fa0782acd9b8c18117ab5dd51b13a82626a..c224d85ac19401e658190c1a512fdd9d5ad7474b 100644
--- a/indra/newview/skins/default/xui/de/floater_pay.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay.xml
@@ -1,21 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" />
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" />
-	<button label="Zahlen" label_selected="Zahlen" name="pay btn" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" />
-	<text name="payee_label" width="130">
-		Einwohner bezahlen:
-	</text>
-	<text name="payee_name" left="130">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text">
-		Schnellzahlung:
-	</text>
-	<text name="amount text">
-		Betrag:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text name="payee_label" width="130">
+		Zahlen:
+	</text>
+	<icon name="icon_person" tool_tip="Person"/>
+	<text left="130" name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+	<text name="amount text">
+		Oder Betrag auswählen:
+	</text>
+	<button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml
index 49bf0c8957f9e0ef1700aeda56bfa01b544a486b..32a026f7e89beffd1d2d75bbea9780c3a4041ea6 100644
--- a/indra/newview/skins/default/xui/de/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml
@@ -1,30 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<text name="payee_group" width="105">
-		Gruppe bezahlen:
-	</text>
-	<text name="payee_resident" width="118">
-		Einwohner bezahlen:
-	</text>
-	<text name="payee_name" left="128" width="168">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label" halign="left">
-		Ãœber Objekt:
-	</text>
-	<text name="object_name_text" left="105">
-		...
-	</text>
-	<text name="fastpay text" width="95" halign="left">
-		Schnellzahlung:
-	</text>
-	<text name="amount text">
-		Betrag:
-	</text>
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190" />
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190" />
-	<button label="Zahlen" label_selected="Zahlen" name="pay btn" />
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group" width="105">
+		Gruppe bezahlen:
+	</string>
+	<string name="payee_resident" width="118">
+		Einwohner bezahlen:
+	</string>
+	<icon name="icon_person" tool_tip="Person"/>
+	<text left="128" name="payee_name" width="168">
+		[FIRST] [LAST]
+	</text>
+	<text halign="left" name="object_name_label">
+		Ãœber Objekt:
+	</text>
+	<icon name="icon_object" tool_tip="Objekte"/>
+	<text left="105" name="object_name_text">
+		...
+	</text>
+	<button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+	<text name="amount text">
+		Oder Betrag auswählen:
+	</text>
+	<button label="Zahlen" label_selected="Zahlen" name="pay btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
index 83ec725487fb47ae535f30e7c92037f6a072f524..3641f41b8c909c369eff64e0f795140929e297c7 100644
--- a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Hochlade-Berechtigungen (Standard)">
+<floater name="perm prefs" title="HOCHLADE-BERECHTIGUNGEN (STANDARD)">
 	<panel label="Berechtigungen" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Mit Gruppe teilen" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/de/floater_post_process.xml b/indra/newview/skins/default/xui/de/floater_post_process.xml
index e10806d25515ea7f8cefdad2188a013eafa5c4fd..a6ed8cc3df9f23e73e7f56c677c2a78b11763f6f 100644
--- a/indra/newview/skins/default/xui/de/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/de/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Post-Processing-Einstellungen">
+<floater name="Post-Process Floater" title="POST-PROCESSING-EINSTELLUNGEN">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Farbfilter" name="wmiColorFilterPanel">
 			<check_box label="Ein" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml
index 275570466001f53d514a391e3d008d5d4ff7fe38..fc552339d3b8f5b7b15ed1ab9ccf17e55a5a153d 100644
--- a/indra/newview/skins/default/xui/de/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/de/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="Foto per E-Mail senden">
+<floater name="Postcard" title="FOTO PER E-MAIL SENDEN">
 	<text name="to_label">
 		E-Mail des Empfängers:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml
index 5f68282b9fc5a3f6154b93a8160f2ab20552ace0..02aa440be75d293a7c63bcd4b67319047cae3eb3 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Einstellungen">
+<floater name="Preferences" title="EINSTELLUNGEN">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel" />
 	<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply" />
diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
index 630127f310e04d1567c0018c755cc16b6008b41c..c167427da9174c773956174c841c5691176e039b 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
@@ -1,11 +1,12 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-<line_editor left="98" name="desc" width="189" />
-	<button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn"
-	     tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116" />
-	<button label="Lokal wiedergeben" label_selected="Stopp" name="Anim audition btn"
-	     tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." left="171" width="116" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		Animation: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<line_editor left="98" name="desc" width="189"/>
+	<button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Gibt diese Animation so wieder, dass andere sie sehen können." width="116"/>
+	<button label="Lokal wiedergeben" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." width="116"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
index 2257785fdac4b51780d7e61a4ebf179d7aa83db0..e946f08b141bae3afef61d3919051bcd10dad79c 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Vertrauliche Informationen" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="VERTRAULICHE INFORMATIONEN">
+	<floater.string name="Title">
+		Anzeige: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml
index 75e1113eff09ea72c8d1c07c329c7ff91bc5072b..fffcf7c1cf559764837208df188199799069fa16 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Event-Informationen" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="EVENT-INFORMATIONEN">
+	<floater.string name="Title">
+		Veranstaltung: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9fbe8d869e6b67f468ee99bb45d3d715eda1bb05
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9fbe8d869e6b67f468ee99bb45d3d715eda1bb05
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Gesten-Tastaturbefehl"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
index da90d66e4df2d0a82d7b3c0e39348cfdf41da3fa..1887433b61747571d1a20d39abc8c78ba0d3eac1 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Hinweis:">
-	<button label="Speichern" label_selected="Speichern" name="Save" />
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<text_editor name="Notecard Editor">
-		Wird geladen...
-	</text_editor>
-	<text name="no_object">
-		Es wurde kein Objekt gefunden, das diese Notiz enthält.
-	</text>
-	<text name="not_allowed">
-		Sie können diese Notiz nicht anzeigen.
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="HINWEIS:">
+	<floater.string name="no_object">
+		Es wurde kein Objekt gefunden, das diese Notiz enthält.
+	</floater.string>
+	<floater.string name="not_allowed">
+		Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+	</floater.string>
+	<floater.string name="Title">
+		Notizkarte: [NAME]
+	</floater.string>
+	<floater.string label="Speichern" label_selected="Speichern" name="Save">
+		Speichern
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<text_editor name="Notecard Editor">
+		Wird geladen...
+	</text_editor>
+	<button label="Speichern" label_selected="Speichern" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml
index 3f2e39c0d6a4b37141cc6d08069a3bbef6a52fbc..397b417d44e557098256c58ed0b270db5ce32412 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<button label="In Welt abspielen" label_selected="In Welt abspielen"
-	     name="Sound play btn"
-	     tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können." />
-	<button label="Lokal wiedergeben" label_selected="Lokal wiedergeben"
-	     name="Sound audition btn"
-	     tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören." />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		Sound: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<button label="In Welt abspielen" label_selected="In Welt abspielen" name="Sound play btn" tool_tip="Gibt diesen Sound so wieder, dass andere ihn hören können."/>
+	<button label="Lokal wiedergeben" label_selected="Lokal wiedergeben" name="Sound audition btn" tool_tip="Gibt diesen Sound so wieder, dass nur Sie ihn hören."/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml
index 0c53eb7ca3d7d427162ed094ab0c4a48d1e4565c..c33e52dac8dad1f4bb994d24c9b22870e4e95dcc 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-	<text name="dimensions">
-		Maße: [WIDTH] x [HEIGHT]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		Textur: [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		In Inventar kopieren
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+	<button label="Speichern" name="Keep"/>
+	<button label="Löschen" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml
index 4c28c7f5b0e4aee962daf9c0df0988cdf3c17893..e7dd09d4daba83d4b8335a5fd9a73536a112d6a3 100644
--- a/indra/newview/skins/default/xui/de/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/de/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/Grundstück" />
+<floater name="regioninfo" title="REGION/GRUNDSTÃœCK" />
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index a8df587cfad747caa98e1f34980b18e357d6cc0e..1e2872686132fd0b4de9a04d954a799bfe444cdc 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -1,106 +1,104 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Missbrauch melden">
-	<texture_picker label="" name="screenshot"/>
-	<check_box bottom_delta="-20" label="Screenshot einschließen" name="screen_check"/>
-	<text name="reporter_title">
-		Melder:
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		Region:
-	</text>
-	<text name="sim_field">
-		Name der Region
-	</text>
-	<text name="pos_title">
-		Position:
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text bottom_delta="-38" height="32" name="select_object_label">
-		Klicken Sie auf die Schaltfläche,
-dann auf das Objekt:
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
-	<text name="object_name_label">
-		Name:
-	</text>
-	<text name="object_name">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label">
-		Eigentümer:
-	</text>
-	<text name="owner_name">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
-		<combo_box.item name="Select_category" label="Kategorie auswählen"/>
-		<combo_box.item name="Age__Age_play" label="Alter&gt; Age-Play"/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Alter&gt; Erwachsener Einwohner in Teen Second Life"/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life"/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Angriff&gt; Kampf-Sandbox / unsichere Region"/>
-		<combo_box.item name="Assault__Safe_area" label="Angriff&gt; Sichere Region"/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="Angriff &gt; Sandbox für Waffentest"/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht"/>
-		<combo_box.item name="Disclosure__Real_world_information" label="Offenlegung &gt; Informationen aus realer Welt"/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="Offenlegung &gt; Abhören eines Chats aus der Ferne"/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Offenlegung &gt; Second Life-Informationen/Chat/IMs"/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Ruhestörung &gt; Unfaire Nutzung von Regionsressourcen"/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Ruhestörung &gt; Exzessive Nutzung geskripteter Objekte"/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="Ruhestörung &gt; Wildes Erzeugen von Objekten"/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Ruhestörung &gt; Ständige Spam-Wiederholung"/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Ruhestörung &gt; Unerwünschte Spam-Werbung"/>
-		<combo_box.item name="Fraud__L$" label="Betrug &gt; L$"/>
-		<combo_box.item name="Fraud__Land" label="Betrug&gt; Land"/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Betrug &gt; Schneeballsystem oder Kettenbrief"/>
-		<combo_box.item name="Fraud__US$" label="Betrug &gt; US$"/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="Belästigung &gt; Werbefarmen / visueller Spam"/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen"/>
-		<combo_box.item name="Harassment__Impeding_movement" label="Belästigung &gt; Bewegungseinschränkung"/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="Belästigung &gt; Sexuelle Belästigung"/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen"/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="Belästigung &gt; Beschimpfung"/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit"/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="Unanständigkeit &gt; Anstößiger Avatarname"/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region"/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region"/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Urheberrechtsverletzung &gt; Entfernen von Inhalten"/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit"/>
-		<combo_box.item name="Intolerance" label="Intoleranz"/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="Land &gt; Missbrauch der Sandbox-Ressourcen"/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen"/>
-		<combo_box.item name="Land__Encroachment__Particles" label="Land &gt; Unbefugte Nutzung &gt; Partikel"/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen"/>
-		<combo_box.item name="Wagering_gambling" label="Wetten/Glücksspiel"/>
-		<combo_box.item name="Other" label="Sonstige"/>
-	</combo_box>
-	<text name="abuser_name_title">
-		Name des Beschuldigten:
-	</text>
-	<button label="Einwohner auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/>
-	<check_box label="Name des Täters ist nicht bekannt" name="omit_abuser_name" tool_tip="Wählen Sie diese Option, wenn Ihnen der Name des Täters unbekannt ist"/>
-	<text name="abuser_name_title2">
-		Ort des Missbrauchs:
-	</text>
-	<text name="sum_title">
-		Zusammenfassung:
-	</text>
-	<text name="dscr_title">
-		Details:
-	</text>
-	<text name="bug_aviso">
-		Machen Sie genaue Angaben zu Datum, Ort und Art des 
-Missbrauchs, relevantem Chat/IM und wählen Sie das 
-Objekt, wenn möglich.
-	</text>
-	<text_editor bottom_delta="-136" height="130" name="details_edit"/>
-	<text bottom_delta="-20" name="incomplete_title">
-		Hinweis: Unvollständige Meldungen werden nicht bearbeitet.
-	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
-	<button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="MISSBRAUCH MELDEN">
+	<floater.string name="Screenshot">
+		Foto
+	</floater.string>
+	<check_box bottom_delta="-20" label="Dieses Foto verwenden" name="screen_check"/>
+	<text name="reporter_title">
+		Melder:
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		Region:
+	</text>
+	<text name="sim_field">
+		Name der Region
+	</text>
+	<text name="pos_title">
+		Position:
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text bottom_delta="-38" height="32" name="select_object_label">
+		Klicken Sie auf die Schaltfläche, dann auf das entsprechende Objekt:
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/>
+	<text name="object_name_label">
+		Objekt:
+	</text>
+	<text name="object_name">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label">
+		Eigentümer:
+	</text>
+	<text name="owner_name">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="Kategorie -- wählen Sie die Kategorie aus, die am besten auf diesen Bericht zutrifft">
+		<combo_box.item label="Kategorie auswählen" name="Select_category"/>
+		<combo_box.item label="Alter&gt; Age-Play" name="Age__Age_play"/>
+		<combo_box.item label="Alter&gt; Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="Alter &gt; Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="Angriff&gt; Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="Angriff&gt; Sichere Region" name="Assault__Safe_area"/>
+		<combo_box.item label="Angriff &gt; Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="Offenlegung &gt; Informationen aus realer Welt" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="Offenlegung &gt; Abhören eines Chats aus der Ferne" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="Offenlegung &gt; Second Life-Informationen/Chat/IMs" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="Ruhestörung &gt; Unfaire Nutzung von Regionsressourcen" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="Ruhestörung &gt; Exzessive Nutzung geskripteter Objekte" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="Ruhestörung &gt; Wildes Erzeugen von Objekten" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="Ruhestörung &gt; Ständige Spam-Wiederholung" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="Ruhestörung &gt; Unerwünschte Spam-Werbung" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="Betrug &gt; L$" name="Fraud__L$"/>
+		<combo_box.item label="Betrug&gt; Land" name="Fraud__Land"/>
+		<combo_box.item label="Betrug &gt; Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="Betrug &gt; US$" name="Fraud__US$"/>
+		<combo_box.item label="Belästigung &gt; Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="Belästigung &gt; Bewegungseinschränkung" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="Belästigung &gt; Sexuelle Belästigung" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="Belästigung &gt; Beschimpfung" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="Unanständigkeit &gt; Anstößiger Avatarname" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="Unanständigkeit &gt; Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="Urheberrechtsverletzung &gt; Entfernen von Inhalten" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="Intoleranz" name="Intolerance"/>
+		<combo_box.item label="Land &gt; Missbrauch der Sandbox-Ressourcen" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Partikel" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/>
+		<combo_box.item label="Sonstige" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		Name des Beschuldigten:
+	</text>
+	<button label="Auswählen" label_selected="" name="select_abuser" tool_tip="Den Namen des Beschuldigten aus einer Liste wählen"/>
+	<text name="abuser_name_title2">
+		Ort des Missbrauchs:
+	</text>
+	<text name="sum_title">
+		Zusammenfassung:
+	</text>
+	<text name="dscr_title">
+		Details:
+	</text>
+	<text name="bug_aviso">
+		Bitte beschreiben Sie so genau wie möglich.
+	</text>
+	<text_editor bottom_delta="-136" height="130" name="details_edit"/>
+	<text bottom_delta="-20" name="incomplete_title">
+		Hinweis: Unvollständige Meldungen werden nicht bearbeitet.
+	</text>
+	<button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug.xml b/indra/newview/skins/default/xui/de/floater_script_debug.xml
index f8c1543fdd49762c9d96e3acad2c44c00c0211b6..585a6c36eaa35fcdc11477e9b4c1271cb9f670a7 100644
--- a/indra/newview/skins/default/xui/de/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Skriptwarnung/Fehler">
 	<tab_container name="Preview Tabs">
-		<floater label="Skript" name="all_scripts" title="[All scripts]" />
+		<floater label="Skript" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc805e879b8f9d1abe82601c3a784f0f8cf19a0f
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml
index 3ab5732055f55d52c8b6597cde5fc4d44cfcd2c0..1d6def4602ddede78fde58e41c036ad694349cb8 100644
--- a/indra/newview/skins/default/xui/de/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Skript: Rotationsskript">
-	<text name="desc txt">
-		Beschreibung:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SKRIPT: ROTATIONSSKRIPT">
+	<floater.string name="Title">
+		Skript: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Beschreibung:
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml
index 63d5ef247881a06481c9241f17c1afcfe8e75f31..d5dc7a0fd727cc3ee11a49c64885a1c0694a4b2a 100644
--- a/indra/newview/skins/default/xui/de/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Rückgängig">
-	<button label="Schließen" label_selected="Schließen" name="close" left="215" width="72"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÜCKGÄNGIG">
+	<floater.string name="Starting">
+		[START] von [COUNT] Artikeln.
+	</floater.string>
+	<floater.string name="Done">
+		Fertig.
+	</floater.string>
+	<floater.string name="Resetting">
+		Wird zurückgesetzt
+	</floater.string>
+	<floater.string name="Running">
+		Läuft
+	</floater.string>
+	<floater.string name="NotRunning">
+		Läuft nicht
+	</floater.string>
+	<button label="Schließen" label_selected="Schließen" left="215" name="close" width="72"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml
index bd9342745662b44f9758381caed5fc3045f3c7ad..aae302e23062bb6d2a7501f09f2eebdb4233f0a0 100644
--- a/indra/newview/skins/default/xui/de/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/de/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Skriptsuche">
+<floater name="script search" title="SKRIPTSUCHE">
 	<check_box label="Groß-/Kleinschreibung irrelevant" name="case_text" />
 	<button label="Suchen" label_selected="Suchen" name="search_btn" />
 	<button label="Ersetzen" label_selected="Ersetzen" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml
index 1499bb015213b0ff5033ffd6fc590d0afd356e68..82da881a54b885de595794b8323c57578a57e108 100644
--- a/indra/newview/skins/default/xui/de/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Land verkaufen">
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		Parzelle:
-	</text>
-	<text bottom_delta="-5" height="16" name="info_parcel">
-		PARZELLENNAME
-	</text>
-	<text name="info_size_label">
-		Größe:
-	</text>
-	<text bottom_delta="-21" height="32" name="info_size">
-		[AREA] qm
-	</text>
-	<text height="28" name="info_action" bottom_delta="-57">
-		Zum Verkauf
-dieser Parzelle:
-	</text>
-	<icon bottom_delta="-80" name="step_price" />
-	<text name="price_label">
-		Preis festlegen:
-	</text>
-	<text name="price_text">
-		Geben Sie einen angemessenen Preis für dieses Land ein.
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m">
-		([PER_METER] L$ pro Quadratmeter)
-	</text>
-	<icon height="64" left="0" name="step_sell_to" width="64" />
-	<text bottom_delta="38" left="72" name="sell_to_label" right="-20">
-		Land verkaufen an:
-	</text>
-	<text height="16" left="72" name="sell_to_text" bottom_delta="-16" right="-10">
-		Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person
-beschränkt ist.
-	</text>
-	<combo_box height="16" left="72" name="sell_to" bottom_delta="-32" width="140">
-		<combo_box.item name="--selectone--" label="select one --" />
-		<combo_box.item name="Anyone" label="Jeder" />
-		<combo_box.item name="Specificuser:" label="Bestimmter Benutzer:" />
-	</combo_box>
-	<button label="Auswählen..." name="sell_to_select_agent" />
-	<text name="sell_objects_label">
-		Die Objekte mit dem Land verkaufen?
-	</text>
-	<text name="sell_objects_text">
-		Die transferierbaren Landeigentümer-Objekte auf der Parzelle
-wechseln den Eigentümer.
-	</text>
-	<radio_group bottom_delta="-58" name="sell_objects">
-		<radio_item name="no" label="Nein, Objekte behalten" />
-		<radio_item name="yes" label="Ja, Objekte mit Land verkaufen" />
-	</radio_group>
-	<button label="Objekte anzeigen" name="show_objects" width="116"/>
-	<text name="nag_message_label">
-		ACHTUNG: Verkäufe sind endgültig.
-	</text>
-	<button label="Land zum Verkauf freigeben" width="180" name="sell_btn" />
-	<button label="Abbrechen" name="cancel_btn" />
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="LAND VERKAUFEN">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				Parzelle:
+			</text>
+			<text bottom_delta="-5" height="16" name="info_parcel">
+				PARZELLENNAME
+			</text>
+			<text name="info_size_label">
+				Größe:
+			</text>
+			<text bottom_delta="-21" height="32" name="info_size">
+				[AREA] qm
+			</text>
+			<text bottom_delta="-57" height="28" name="info_action">
+				Zum Verkauf
+dieser Parzelle:
+			</text>
+			<icon bottom_delta="-80" name="step_price"/>
+			<text name="price_label">
+				Preis festlegen:
+			</text>
+			<text name="price_text">
+				Einen angemessenen Preis auswählen.
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text name="price_per_m">
+				([PER_METER] L$ pro Quadratmeter)
+			</text>
+			<icon height="64" left="0" name="step_sell_to" width="64"/>
+			<text bottom_delta="38" left="72" name="sell_to_label" right="-20">
+				Land verkaufen an:
+			</text>
+			<text bottom_delta="-16" height="16" left="72" name="sell_to_text" right="-10">
+				Wählen Sie, ob der Verkauf offen oder auf eine bestimmte Person
+beschränkt ist.
+			</text>
+			<combo_box bottom_delta="-32" height="16" left="72" name="sell_to" width="140">
+				<combo_box.item label="select one --" name="--selectone--"/>
+				<combo_box.item label="Jeder" name="Anyone"/>
+				<combo_box.item label="Bestimmte Person:" name="Specificuser:"/>
+			</combo_box>
+			<button label="Auswählen..." name="sell_to_select_agent"/>
+			<text name="sell_objects_label">
+				Die Objekte mit dem Land verkaufen?
+			</text>
+			<text name="sell_objects_text">
+				Die transferierbaren Landeigentümer-Objekte auf der Parzelle
+wechseln den Eigentümer.
+			</text>
+			<radio_group bottom_delta="-58" name="sell_objects">
+				<radio_item label="Nein, Objekte behalten" name="no"/>
+				<radio_item label="Ja, Objekte mit Land verkaufen" name="yes"/>
+			</radio_group>
+			<button label="Objekte anzeigen" name="show_objects" width="116"/>
+			<text name="nag_message_label">
+				ACHTUNG: Verkäufe sind endgültig.
+			</text>
+			<button label="Land zum Verkauf freigeben" name="sell_btn" width="180"/>
+			<button label="Abbrechen" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
index 034cfca017fa56c86f8804df201de0e42ff4ea0d..f9a944165fc1642a4a4d6dc96f20fa839c36f805 100644
--- a/indra/newview/skins/default/xui/de/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Debug-Einstellungen">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="WAHR" />
-		<combo_box.item name="FALSE" label="FALSCH" />
-	</combo_box>
-	<color_swatch label="Farbe" name="color_swatch" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="Standard wiederherstellen" name="default_btn" width="170" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="DEBUG-EINSTELLUNGEN">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="WAHR" name="TRUE"/>
+		<combo_box.item label="FALSCH" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="Farbe" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="Standard wiederherstellen" name="default_btn" width="170"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index bc8a1f42f1237d0f5c4a970192df0165810bb55a..64db511aa9fef5bc97afb889df0c99040b9f6d89 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Foto-Vorschau">
+<floater name="Snapshot" title="FOTO-VORSCHAU">
 	<text name="type_label">
 		Zweck des Fotos
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_sound_preview.xml b/indra/newview/skins/default/xui/de/floater_sound_preview.xml
index 1e5ac179b5bf5fa186cf6b8cc02991188d8a3913..14126b6a44cd972583a098b5da31a8df281cd12b 100644
--- a/indra/newview/skins/default/xui/de/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Name:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml
index 26e976a59c154e0c4541a776e573bf5438077b98..506c18bd98ec988443ae5733f854e7c3da60edd5 100644
--- a/indra/newview/skins/default/xui/de/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/de/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistikleiste"/>
+<floater name="stats floater" title="STATISTIKLEISTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
new file mode 100644
index 0000000000000000000000000000000000000000..38494faf16b512b0ad1231d823f2ed3059d0f5fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistik">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="Basic" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="Bandbreite" name="bandwidth"/>
+				<stat_bar label="Paketverlust" name="packet_loss"/>
+				<stat_bar label="Ping Sim" name="ping"/>
+			</stat_view>
+			<stat_view label="Erweitert" name="advanced">
+				<stat_view label="Darstellung" name="render">
+					<stat_bar label="Gezeichnete KTris" name="ktrisframe"/>
+					<stat_bar label="Gezeichnete KTris" name="ktrissec"/>
+					<stat_bar label="Objektanzahl" name="objs"/>
+					<stat_bar label="Neue Objekte" name="newobjs"/>
+				</stat_view>
+				<stat_view label="Textur" name="texture">
+					<stat_bar label="Zählen" name="numimagesstat"/>
+					<stat_bar label="Rohanzahl" name="numrawimagesstat"/>
+					<stat_bar label="GL Sp" name="gltexmemstat"/>
+					<stat_bar label="Formattierter Sp:" name="formattedmemstat"/>
+					<stat_bar label="Rohsp" name="rawmemstat"/>
+					<stat_bar label="Zugeteilter Sp" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="Netzwerk" name="network">
+					<stat_bar label="Paketeingang" name="packetsinstat"/>
+					<stat_bar label="Paketausgang" name="packetsoutstat"/>
+					<stat_bar label="Objekte" name="objectkbitstat"/>
+					<stat_bar label="Textur" name="texturekbitstat"/>
+					<stat_bar label="Bestand" name="assetkbitstat"/>
+					<stat_bar label="Ebenen" name="layerskbitstat"/>
+					<stat_bar label="Tatsächlicher Eingang" name="actualinkbitstat"/>
+					<stat_bar label="Tatsächlicher Ausgang" name="actualoutkbitstat"/>
+					<stat_bar label="VFS Ausstehende Ops" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="Simulator" name="sim">
+				<stat_bar label="Zeitdilation" name="simtimedilation"/>
+				<stat_bar label="Sim FPS" name="simfps"/>
+				<stat_bar label="Physik FPS" name="simphysicsfps"/>
+				<stat_view label="Physikdetails" name="physicsdetail">
+					<stat_bar label="Eingerastete Objekte" name="physicspinnedtasks"/>
+					<stat_bar label="Niedrig LOD-Objekte" name="physicslodtasks"/>
+					<stat_bar label="Zugeordneter Speicher" name="physicsmemoryallocated"/>
+					<stat_bar label="Agent Updates/Sek" name="simagentups"/>
+					<stat_bar label="Haupt-Agenten" name="simmainagents"/>
+					<stat_bar label="Child-Agenten" name="simchildagents"/>
+					<stat_bar label="Objekte" name="simobjects"/>
+					<stat_bar label="Aktive Objekte" name="simactiveobjects"/>
+					<stat_bar label="Aktive Skripts" name="simactivescripts"/>
+					<stat_bar label="Skript-Events" name="simscripteps"/>
+					<stat_bar label="Paketeingang" name="siminpps"/>
+					<stat_bar label="Paketausgang" name="simoutpps"/>
+					<stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/>
+					<stat_bar label="Ausstehende Uploads" name="simpendinguploads"/>
+					<stat_bar label="Gesamtanzahl „Unacked&quot; Bytes" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="Zeit (ms)" name="simperf">
+					<stat_bar label="Gesamtzeit Frame" name="simframemsec"/>
+					<stat_bar label="Netto-Zeit" name="simnetmsec"/>
+					<stat_bar label="Physik-Zeit" name="simsimphysicsmsec"/>
+					<stat_bar label="Simulationszeit" name="simsimothermsec"/>
+					<stat_bar label="Agent-Zeit" name="simagentmsec"/>
+					<stat_bar label="Bilder-Zeit" name="simimagesmsec"/>
+					<stat_bar label="Skript-Zeit" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml
index 264411c16658d9c12c0c5b1e84f14e69b3ca34fc..2ba4e575a8ec53fd48662c1c876a613556ca6bd4 100644
--- a/indra/newview/skins/default/xui/de/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/de/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Telehub" min_height="310" height="310"  >
+<floater name="telehub" title="TELEHUB" min_height="310" height="310"  >
 	<text name="status_text_connected">
 		Telehub verbunden mit Objekt [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
index fff6ab5c7466a01f74c2b953b098d444291855dc..7e2fc26fdfb6c144f4df4d48db7bedcf4558eca7 100644
--- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="texture picker" title="Auswählen: Textur">
+<floater name="texture picker" title="AUSWÄHLEN: TEXTUR">
 	<string name="choose_picture">
 		Zum Auswählen eines Bildes hier klicken
 	</string>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 2815fd34a248244c2ce341dff50f9d0d65dd210b..b458d922ba5fe8718d6bdff14a32a9565acb9af4 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -1,573 +1,480 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Bauen">
-	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
-	<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
-	<button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
-	<button label="" label_selected="" name="button create" tool_tip="Erstellen"/>
-	<button label="" label_selected="" name="button land" tool_tip="Land"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="Zoom" name="radio zoom"/>
-		<radio_item label="Orbit (Strg)" name="radio orbit"/>
-		<radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="Verschieben" name="radio move"/>
-		<radio_item label="Heben (Strg)" name="radio lift"/>
-		<radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="Position" name="radio position"/>
-		<radio_item label="Drehen (Strg)" name="radio rotate"/>
-		<radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/>
-		<radio_item label="Textur auswählen" name="radio select face"/>
-	</radio_group>
-	<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
-	<text name="text ruler mode">
-		Lineal:
-	</text>
-	<combo_box name="combobox grid mode">
-		<combo_box.item name="World" label="Welt"
-		/>
-		<combo_box.item name="Local" label="Lokal"
-		/>
-		<combo_box.item name="Reference" label="Referenz"
-		/>
-	</combo_box>
-	<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
-	<check_box label="Texturen dehnen" name="checkbox stretch textures"/>
-	<check_box label="Raster verwenden" name="checkbox snap to grid"/>
-	<button label="Optionen..." label_selected="Optionen..." name="Options..."/>
-	<text name="text status">
-		Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="Ring"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="Baum"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/>
-	<check_box label="Auswahl behalten" name="checkbox sticky"/>
-	<check_box label="Auswahl kopieren" name="checkbox copy selection"/>
-	<check_box label="Zentrieren" name="checkbox copy centers"/>
-	<check_box label="Drehen" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="Land auswählen" name="radio select land"/>
-		<radio_item label="Einebnen" name="radio flatten"/>
-		<radio_item label="Anheben" name="radio raise"/>
-		<radio_item label="Absenken" name="radio lower"/>
-		<radio_item label="Glätten" name="radio smooth"/>
-		<radio_item label="Aufrauen" name="radio noise"/>
-		<radio_item label="Zurücksetzen" name="radio revert"/>
-	</radio_group>
-	<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/>
-	<text name="Bulldozer:">
-		Planierraupe:
-	</text>
-	<text name="Dozer Size:">
-		Größe
-	</text>
-	<text name="Strength:">
-		Stärke
-	</text>
-	<text name="obj_count">
-		Ausgewählte Objekte: [COUNT]
-	</text>
-	<text name="prim_count">
-		Primitive: [COUNT]
-	</text>
-	<tab_container name="Object Info Tabs">
-		<panel label="Allgemein" name="General">
-			<text name="Name:">
-				Name:
-			</text>
-			<text name="Description:">
-				Beschreibung:
-			</text>
-			<text name="Creator:">
-				Ersteller:
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button creator profile"/>
-			<text name="Owner:">
-				Eigentümer:
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button owner profile"/>
-			<text name="Group:">
-				Gruppe:
-			</text>
-			<text name="Group Name Proxy">
-				Die Lindens
-			</text>
-			<button label="Festlegen..." label_selected="Festlegen..." name="button set group"/>
-			<text name="Permissions:">
-				Berechtigungen:
-			</text>
-
-			<check_box label="Mit Gruppe teilen" name="checkbox share with group" tool_tip="Allen Mitgliedern der zugeordneten Gruppe die Erlaubnis erteilen, Ihre Berechtigungen für dieses Objekt zu teilen und zu verwenden. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
-			<string name="text deed continued">
-				Ãœbertragung...
-			</string>
-			<string name="text deed">
-				Ãœbertragung
-			</string>
-			<button label="Übertragung..." label_selected="Übertragung..." name="button deed" tool_tip="In der Gruppe gemeinsam verwendete Objekte können von einem Gruppenfunktionär übertragen werden."/>
-			<check_box label="Verschieben durch beliebige Personen zulassen" name="checkbox allow everyone move"/>
-			<check_box label="Kopieren durch beliebige Personen zulassen" name="checkbox allow everyone copy"/>
-			<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
-			<check_box label="Zu verkaufen" name="checkbox for sale"/>
-			<text name="Cost">
-				Preis:L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="Kopieren" name="Copy"/>
-				<combo_box.item label="Inhalt" name="Contents"/>
-				<combo_box.item label="Original" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				Bei Linksklicken:
-			</text>
-			<combo_box name="clickaction">
-				<combo_box.item name="Touch/grab(default)" label="Berühren/Greifen (Standard)"
-				/>
-				<combo_box.item name="Sitonobject" label="Auf Objekt sitzen"
-				/>
-				<combo_box.item name="Buyobject" label="Objekt kaufen"
-				/>
-				<combo_box.item name="Payobject" label="Objekt bezahlen"
-				/>
-				<combo_box.item name="Open" label="Öffnen"
-				/>
-				<combo_box.item name="Play" label="Parzellenmedien wiedergeben"
-				/>
-				<combo_box.item name="Opemmedia" label="Parzellenmedien öffnen"
-				/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				Sie können dieses Objekt ändern
-			</text>
-			<text name="B:">
-				B:
-			</text>
-			<text name="O:">
-				O:
-			</text>
-			<text name="G:">
-				G:
-			</text>
-			<text name="E:">
-				E:
-			</text>
-			<text name="N:">
-				N:
-			</text>
-			<text name="F:">
-				F:
-			</text>
-			<text name="Next owner can:">
-				Nächster Eigentümer kann:
-			</text>
-			<check_box label="Ändern" name="checkbox next owner can modify"/>
-			<check_box label="Kopieren" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				Sie können dieses Objekt ändern
-			</string>
-			<string name="text modify info 2">
-				Sie können diese Objekte ändern
-			</string>
-			<string name="text modify info 3">
-				Sie können dieses Objekt nicht ändern
-			</string>
-			<string name="text modify info 4">
-				Sie können diese Objekte nicht ändern
-			</string>
-			<string name="text modify warning">
-				Gesamtes Objekt muss gewählt werden, um Berechtigungen festzulegen
-			</string>
-			<string name="Cost Default">
-				Preis: L$
-			</string>
-			<string name="Cost Total">
-				Summe: L$
-			</string>
-			<string name="Cost Per Unit">
-				Stückpreis: L$
-			</string>
-			<string name="Cost Mixed">
-				Mischpreis
-			</string>
-			<string name="Sale Mixed">
-				Mischverkauf
-			</string>
-		</panel>
-		<panel label="Objekt" name="Object">
-			<text name="select_single">
-				Wählen Sie nur ein Primitivum aus, um Parameter zu bearbeiten.
-			</text>
-			<text name="edit_object">
-				Objektparameter bearbeiten:
-			</text>
-			<check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
-			<check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
-			<check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/>
-			<check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
-			<text name="label position">
-				Position (Meter)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				Größe (Meter)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				Rotation (Grad)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				Material
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="Stein"
-				/>
-				<combo_box.item name="Metal" label="Metall"
-				/>
-				<combo_box.item name="Glass" label="Glas"
-				/>
-				<combo_box.item name="Wood" label="Holz"
-				/>
-				<combo_box.item name="Flesh" label="Fleisch"
-				/>
-				<combo_box.item name="Plastic" label="Kunststoff"
-				/>
-				<combo_box.item name="Rubber" label="Gummi"
-				/>
-			</combo_box>
-			<text name="label basetype">
-				Bausteintyp
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="Quader"
-				/>
-				<combo_box.item name="Cylinder" label="Zylinder"
-				/>
-				<combo_box.item name="Prism" label="Prisma"
-				/>
-				<combo_box.item name="Sphere" label="Kugel"
-				/>
-				<combo_box.item name="Torus" label="Torus"
-				/>
-				<combo_box.item name="Tube" label="Rohr"
-				/>
-				<combo_box.item name="Ring" label="Ring"
-				/>
-				<combo_box.item name="Sculpted" label="Geformt"
-				/>
-			</combo_box>
-			<text name="text cut">
-				Pfadschnitt Beginn und Ende
-			</text>
-			<spinner label="B" name="cut begin"/>
-			<spinner label="E" name="cut end"/>
-			<text name="text hollow">
-				Hohl
-			</text>
-			<text name="text skew">
-				Versatz
-			</text>
-			<spinner name="Scale 1"/>
-			<spinner name="Skew"/>
-			<text name="Hollow Shape">
-				Hohlform
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="Standard"
-				/>
-				<combo_box.item name="Circle" label="Kreis"
-				/>
-				<combo_box.item name="Square" label="Quadrat"
-				/>
-				<combo_box.item name="Triangle" label="Dreieck"
-				/>
-			</combo_box>
-			<text name="text twist">
-				Torsion
-			</text>
-			<spinner label="B" name="Twist Begin"/>
-			<spinner label="E" name="Twist End"/>
-			<text name="scale_taper">
-				Verjüngung
-			</text>
-			<text name="scale_hole">
-				Lochgröße
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				Verscherung
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				Profilschnitt-Beginn und Ende
-			</text>
-			<text name="advanced_dimple">
-				Vertiefung-Beginn und Ende
-			</text>
-			<text name="advanced_slice">
-				Anfang/Ende abschneiden
-			</text>
-			<spinner label="B" name="Path Limit Begin"/>
-			<spinner label="E" name="Path Limit End"/>
-			<text name="text taper2">
-				Verjüngung
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				Radius
-			</text>
-			<text name="text revolutions">
-				Umdrehungen
-			</text>
-			<spinner name="Radius Offset"/>
-			<texture_picker label="Textur für gestaltetes 
-Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/>
-			<check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/>
-			<text name="label sculpt type">
-				Naht
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(keiner)"
-				/>
-				<combo_box.item name="Sphere" label="Kugel"
-				/>
-				<combo_box.item name="Torus" label="Torus"
-				/>
-				<combo_box.item name="Plane" label="Fläche"
-				/>
-				<combo_box.item name="Cylinder" label="Zylinder"
-				/>
-			</combo_box>
-		</panel>
-		<panel label="Eigenschaften" name="Features">
-			<text name="select_single">
-				Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
-			</text>
-			<text name="edit_object">
-				Objekteigenschaften bearbeiten:
-			</text>
-			<check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/>
-			<spinner label="Weichheit" name="FlexNumSections"/>
-			<spinner label="Schwerkraft" name="FlexGravity"/>
-			<spinner label="Ziehen" name="FlexFriction"/>
-			<spinner label="Wind" name="FlexWind"/>
-			<spinner label="Spannung" name="FlexTension"/>
-			<spinner label="Erzwingen X" name="FlexForceX"/>
-			<spinner label="Erzwingen Y" name="FlexForceY"/>
-			<spinner label="Erzwingen Z" name="FlexForceZ"/>
-			<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
-			<text name="label color">
-				Farbe
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
-			<spinner label="Intensität" name="Light Intensity"/>
-			<spinner label="Radius" name="Light Radius"/>
-			<spinner label="Abnehmend" name="Light Falloff"/>
-		</panel>
-		<panel label="Textur" name="Texture">
-			<texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
-			<color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
-			<text name="color trans">
-				Transparenz %
-			</text>
-			<text name="glow label">
-				Leuchten
-			</text>
-			<check_box label="Ganz hell" name="checkbox fullbright"/>
-			<text name="tex gen">
-				Zuordnung
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="Standard"
-				/>
-				<combo_box.item name="Planar" label="Eben"
-				/>
-			</combo_box>
-			<text name="label shininess">
-				Glanz
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="Kein"
-				/>
-				<combo_box.item name="Low" label="Niedrig"
-				/>
-				<combo_box.item name="Medium" label="Mittel"
-				/>
-				<combo_box.item name="High" label="Hoch"
-				/>
-			</combo_box>
-			<text name="label bumpiness">
-				Holprigkeit
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="Keine"
-				/>
-				<combo_box.item name="Brightness" label="Helligkeit"
-				/>
-				<combo_box.item name="Darkness" label="Dunkelheit"
-				/>
-				<combo_box.item name="woodgrain" label="Holzmaserung"
-				/>
-				<combo_box.item name="bark" label="Rinde"
-				/>
-				<combo_box.item name="bricks" label="Ziegel"
-				/>
-				<combo_box.item name="checker" label="Karo"
-				/>
-				<combo_box.item name="concrete" label="Beton"
-				/>
-				<combo_box.item name="crustytile" label="verkrustete Fliesen"
-				/>
-				<combo_box.item name="cutstone" label="Steinplatten"
-				/>
-				<combo_box.item name="discs" label="Scheiben"
-				/>
-				<combo_box.item name="gravel" label="Kies"
-				/>
-				<combo_box.item name="petridish" label="Petrischale"
-				/>
-				<combo_box.item name="siding" label="Verkleidung"
-				/>
-				<combo_box.item name="stonetile" label="Steinfliesen"
-				/>
-				<combo_box.item name="stucco" label="Stuck"
-				/>
-				<combo_box.item name="suction" label="Saugen"
-				/>
-				<combo_box.item name="weave" label="gewoben"
-				/>
-			</combo_box>
-			<text name="tex scale">
-				Wiederholungen
-			</text>
-			<spinner label="Horizontal (U)" name="TexScaleU"/>
-			<check_box label="Umkehren" name="checkbox flip s"/>
-			<spinner label="Vertikal (V)" name="TexScaleV"/>
-			<check_box label="Umkehren" name="checkbox flip t"/>
-			<text name="tex rotate">
-				Rotation (Grad)
-			</text>
-			<string name="string repeats per meter">
-				Kacheln pro Meter
-			</string>
-			<string name="string repeats per face">
-				Wiederholungen pro Fläche
-			</string>
-			<text name="rpt">
-				Kacheln pro Meter
-			</text>
-			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="button apply"/>
-			<text name="tex offset">
-				Versatz
-			</text>
-			<spinner label="Horizontal (U)" name="TexOffsetU"/>
-			<spinner label="Vertikal (V)" name="TexOffsetV"/>
-			<text name="textbox autofix">
-				Medientextur ausrichten
-(zuerst laden)
-			</text>
-			<button label="Ausrichten" label_selected="Ausrichten" name="button align"/>
-		</panel>
-		<panel label="Inhalt" name="Contents">
-			<button label="Neues Skript" label_selected="Neues Skript" name="button new script"/>
-			<button label="Berechtigungen" name="button permissions"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			Parzelleninformation
-		</text>
-		<text name="label_area_price">
-			Preis: L$ [PRICE] für [AREA] m²
-		</text>
-		<text name="label_area">
-			Fläche: [AREA] m²
-		</text>
-		<button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/>
-		<check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen: &#10;&#10;Grün = Ihr Land &#10;Blau = Das Land Ihrer Gruppe &#10;Rot = Im Eigentum anderer &#10;Geld = Zum Verkauf &#10;Lila = Zur Auktion &#10;Grau = Öffentlich"/>
-		<button label="?" label_selected="?" name="button show owners help"/>
-		<text name="label_parcel_modify">
-			Parzelle ändern
-		</text>
-		<button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/>
-		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/>
-		<text name="label_parcel_trans">
-			Land-Transaktionen
-		</text>
-		<button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/>
-		<button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/>
-	</panel>
-	<floater.string name="status_rotate">
-		An den farbigen Bändern ziehen, um das Objekt zu drehen
-	</floater.string>
-	<floater.string name="status_scale">
-		Klicken und ziehen, um die ausgewählte Seite zu dehnen
-	</floater.string>
-	<floater.string name="status_move">
-		Maus verschiebt, Umschalt-Taste und Maus kopiert
-	</floater.string>
-	<floater.string name="status_modifyland">
-		Klicken und halten, um das Land zu bearbeiten
-	</floater.string>
-	<floater.string name="status_camera">
-		Klicken und ziehen, um die Ansicht zu ändern
-	</floater.string>
-	<floater.string name="status_grab">
-		Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen
-	</floater.string>
-	<floater.string name="status_place">
-		Inworld klicken, um zu bauen.
-	</floater.string>
-	<floater.string name="status_selectland">
-		Klicken und ziehen, um Land auszuwählen
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		Bildschirm
-	</floater.string>
-	<floater.string name="grid_local_text">
-		Lokal
-	</floater.string>
-	<floater.string name="grid_world_text">
-		Welt
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		Referenz
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		Anhang
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Bau-Werkzeuge" title="">
+	<floater.string name="status_rotate">
+		An den farbigen Bändern ziehen, um das Objekt zu drehen
+	</floater.string>
+	<floater.string name="status_scale">
+		Klicken und ziehen, um die ausgewählte Seite zu dehnen
+	</floater.string>
+	<floater.string name="status_move">
+		Maus verschiebt, Umschalt-Taste und Maus kopiert
+	</floater.string>
+	<floater.string name="status_modifyland">
+		Klicken und halten, um das Land zu bearbeiten
+	</floater.string>
+	<floater.string name="status_camera">
+		Klicken und ziehen, um Kamera zu bewegen
+	</floater.string>
+	<floater.string name="status_grab">
+		Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen
+	</floater.string>
+	<floater.string name="status_place">
+		Inworld klicken, um zu bauen.
+	</floater.string>
+	<floater.string name="status_selectland">
+		Klicken und ziehen, um Land auszuwählen
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		Bildschirm
+	</floater.string>
+	<floater.string name="grid_local_text">
+		Lokal
+	</floater.string>
+	<floater.string name="grid_world_text">
+		Welt
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		Referenz
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		Anhang
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
+	<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
+	<button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/>
+	<button label="" label_selected="" name="button create" tool_tip="Erstellen"/>
+	<button label="" label_selected="" name="button land" tool_tip="Land"/>
+	<text name="text status">
+		Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="Zoom" name="radio zoom"/>
+		<radio_item label="Orbit (Strg)" name="radio orbit"/>
+		<radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="Verschieben" name="radio move"/>
+		<radio_item label="Heben (Strg)" name="radio lift"/>
+		<radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="Bewegen" name="radio position"/>
+		<radio_item label="Drehen (Strg)" name="radio rotate"/>
+		<radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/>
+		<radio_item label="Textur auswählen" name="radio select face"/>
+	</radio_group>
+	<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
+	<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
+	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid"/>
+	<combo_box name="combobox grid mode">
+		<combo_box.item label="Welt-Lineal" name="World"/>
+		<combo_box.item label="Lokal-Lineal" name="Local"/>
+		<combo_box.item label="Referenz-Lineal" name="Reference"/>
+	</combo_box>
+	<button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Grid-Optionen einstellen"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="Ring"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="Baum"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/>
+	<check_box label="Ausgewähltes Werkzeug beibehalten" name="checkbox sticky"/>
+	<check_box label="Auswahl kopieren" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="Kopie zentrieren" name="checkbox copy centers"/>
+	<check_box label="Kopie drehen" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="Land auswählen" name="radio select land"/>
+		<radio_item label="Einebnen" name="radio flatten"/>
+		<radio_item label="Anheben" name="radio raise"/>
+		<radio_item label="Absenken" name="radio lower"/>
+		<radio_item label="Glätten" name="radio smooth"/>
+		<radio_item label="Aufrauen" name="radio noise"/>
+		<radio_item label="Zurücksetzen" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		Planierraupe:
+	</text>
+	<text name="Dozer Size:">
+		Größe
+	</text>
+	<text name="Strength:">
+		Stärke
+	</text>
+	<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/>
+	<text name="obj_count">
+		Objekte: [COUNT]
+	</text>
+	<text name="prim_count">
+		Primitive: [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs">
+		<panel label="Allgemein" name="General">
+			<panel.string name="text deed continued">
+				Ãœbertragung
+			</panel.string>
+			<panel.string name="text deed">
+				Ãœbertragung
+			</panel.string>
+			<panel.string name="text modify info 1">
+				Sie können dieses Objekt ändern
+			</panel.string>
+			<panel.string name="text modify info 2">
+				Sie können diese Objekte ändern
+			</panel.string>
+			<panel.string name="text modify info 3">
+				Sie können dieses Objekt nicht ändern
+			</panel.string>
+			<panel.string name="text modify info 4">
+				Sie können diese Objekte nicht ändern
+			</panel.string>
+			<panel.string name="text modify warning">
+				Gesamtes Objekt wählen, um Berechtigungen festzulegen.
+			</panel.string>
+			<panel.string name="Cost Default">
+				Preis: L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				Summe: L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				Stückpreis: L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				Mischpreis
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				Mischverkauf
+			</panel.string>
+			<text name="Name:">
+				Name:
+			</text>
+			<text name="Description:">
+				Beschreibung:
+			</text>
+			<text name="Creator:">
+				Ersteller:
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				Eigentümer:
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				Gruppe:
+			</text>
+			<button label="Festlegen..." label_selected="Festlegen..." name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
+			<name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
+			<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
+			<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
+			<text name="label click action">
+				Bei Linksklick:
+			</text>
+			<combo_box name="clickaction">
+				<combo_box.item label="Berühren (Standard)" name="Touch/grab(default)"/>
+				<combo_box.item label="Auf Objekt sitzen" name="Sitonobject"/>
+				<combo_box.item label="Objekt kaufen" name="Buyobject"/>
+				<combo_box.item label="Objekt bezahlen" name="Payobject"/>
+				<combo_box.item label="Öffnen" name="Open"/>
+			</combo_box>
+			<check_box label="Zum Verkauf:" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="Kopieren" name="Copy"/>
+				<combo_box.item label="Inhalt" name="Contents"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Preis: L$" name="Edit Cost"/>
+			<check_box label="In Suche anzeigen" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					Sie können dieses Objekt bearbeiten.
+				</text>
+				<text name="Anyone can:">
+					Jeder:
+				</text>
+				<check_box label="Kopieren" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					Nächster Eigentümer:
+				</text>
+				<check_box label="Ändern" name="checkbox next owner can modify"/>
+				<check_box label="Kopieren" name="checkbox next owner can copy"/>
+				<check_box label="Transferieren" name="checkbox next owner can transfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+				<text name="B:">
+					B:
+				</text>
+				<text name="O:">
+					O:
+				</text>
+				<text name="G:">
+					G:
+				</text>
+				<text name="E:">
+					E:
+				</text>
+				<text name="N:">
+					N:
+				</text>
+				<text name="F:">
+					F:
+				</text>
+			</panel>
+		</panel>
+		<panel label="Objekt" name="Object">
+			<check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/>
+			<check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/>
+			<check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/>
+			<check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/>
+			<text name="label position">
+				Position (Meter)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				Größe (Meter)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				Rotation (Grad)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="Quader" name="Box"/>
+				<combo_box.item label="Zylinder" name="Cylinder"/>
+				<combo_box.item label="Prisma" name="Prism"/>
+				<combo_box.item label="Kugel" name="Sphere"/>
+				<combo_box.item label="Torus" name="Torus"/>
+				<combo_box.item label="Rohr" name="Tube"/>
+				<combo_box.item label="Ring" name="Ring"/>
+				<combo_box.item label="Geformt" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="Stein" name="Stone"/>
+				<combo_box.item label="Metall" name="Metal"/>
+				<combo_box.item label="Glas" name="Glass"/>
+				<combo_box.item label="Holz" name="Wood"/>
+				<combo_box.item label="Fleisch" name="Flesh"/>
+				<combo_box.item label="Kunststoff" name="Plastic"/>
+				<combo_box.item label="Gummi" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				Pfadschnitt (Anfang/Ende)
+			</text>
+			<spinner label="B" name="cut begin"/>
+			<spinner label="E" name="cut end"/>
+			<text name="text hollow">
+				Hohl
+			</text>
+			<text name="text skew">
+				Versatz
+			</text>
+			<spinner name="Scale 1"/>
+			<spinner name="Skew"/>
+			<text name="Hollow Shape">
+				Hohlform
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="Standard" name="Default"/>
+				<combo_box.item label="Kreis" name="Circle"/>
+				<combo_box.item label="Quadrat" name="Square"/>
+				<combo_box.item label="Dreieck" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				Torsion (Anfang/Ende)
+			</text>
+			<spinner label="B" name="Twist Begin"/>
+			<spinner label="E" name="Twist End"/>
+			<text name="scale_taper">
+				Verjüngung
+			</text>
+			<text name="scale_hole">
+				Lochgröße
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				Verscherung
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				Profilschnitt (Anfang/Ende)
+			</text>
+			<text name="advanced_dimple">
+				Vertiefung (Anfang/Ende)
+			</text>
+			<text name="advanced_slice">
+				Abschneiden (Anfang/Ende)
+			</text>
+			<spinner label="B" name="Path Limit Begin"/>
+			<spinner label="E" name="Path Limit End"/>
+			<text name="text taper2">
+				Verjüngung
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				Radius
+			</text>
+			<text name="text revolutions">
+				Umdrehungen
+			</text>
+			<spinner name="Radius Offset"/>
+			<texture_picker label="Textur für gestaltetes  Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+			<check_box label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/>
+			<check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/>
+			<text name="label sculpt type">
+				Naht
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(keiner)" name="None"/>
+				<combo_box.item label="Kugel" name="Sphere"/>
+				<combo_box.item label="Torus" name="Torus"/>
+				<combo_box.item label="Fläche" name="Plane"/>
+				<combo_box.item label="Zylinder" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="Eigenschaften" name="Features">
+			<text name="select_single">
+				Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
+			</text>
+			<text name="edit_object">
+				Objekteigenschaften bearbeiten:
+			</text>
+			<check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/>
+			<spinner label="Weichheit" name="FlexNumSections"/>
+			<spinner label="Schwerkraft" name="FlexGravity"/>
+			<spinner label="Ziehen" name="FlexFriction"/>
+			<spinner label="Wind" name="FlexWind"/>
+			<spinner label="Spannung" name="FlexTension"/>
+			<spinner label="Erzwingen X" name="FlexForceX"/>
+			<spinner label="Erzwingen Y" name="FlexForceY"/>
+			<spinner label="Erzwingen Z" name="FlexForceZ"/>
+			<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/>
+			<color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+			<spinner label="Intensität" name="Light Intensity"/>
+			<spinner label="Radius" name="Light Radius"/>
+			<spinner label="Abnehmend" name="Light Falloff"/>
+		</panel>
+		<panel label="Textur" name="Texture">
+			<panel.string name="string repeats per meter">
+				Kacheln pro Meter
+			</panel.string>
+			<panel.string name="string repeats per face">
+				Wiederholungen pro Fläche
+			</panel.string>
+			<texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/>
+			<color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/>
+			<text name="color trans">
+				Transparenz %
+			</text>
+			<text name="glow label">
+				Leuchten
+			</text>
+			<check_box label="Ganz hell" name="checkbox fullbright"/>
+			<text name="tex gen">
+				Zuordnung
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="Standard" name="Default"/>
+				<combo_box.item label="Eben" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				Glanz
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="Kein" name="None"/>
+				<combo_box.item label="Niedrig" name="Low"/>
+				<combo_box.item label="Mittel" name="Medium"/>
+				<combo_box.item label="Hoch" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				Holprigkeit
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="Keine" name="None"/>
+				<combo_box.item label="Helligkeit" name="Brightness"/>
+				<combo_box.item label="Dunkelheit" name="Darkness"/>
+				<combo_box.item label="Holzmaserung" name="woodgrain"/>
+				<combo_box.item label="Rinde" name="bark"/>
+				<combo_box.item label="Ziegel" name="bricks"/>
+				<combo_box.item label="Karo" name="checker"/>
+				<combo_box.item label="Beton" name="concrete"/>
+				<combo_box.item label="verkrustete Fliesen" name="crustytile"/>
+				<combo_box.item label="Steinplatten" name="cutstone"/>
+				<combo_box.item label="Scheiben" name="discs"/>
+				<combo_box.item label="Kies" name="gravel"/>
+				<combo_box.item label="Petrischale" name="petridish"/>
+				<combo_box.item label="Verkleidung" name="siding"/>
+				<combo_box.item label="Steinfliesen" name="stonetile"/>
+				<combo_box.item label="Stuck" name="stucco"/>
+				<combo_box.item label="Saugen" name="suction"/>
+				<combo_box.item label="gewoben" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				Wiederholungen
+			</text>
+			<spinner label="Horizontal (U)" name="TexScaleU"/>
+			<check_box label="Umkehren" name="checkbox flip s"/>
+			<spinner label="Vertikal (V)" name="TexScaleV"/>
+			<check_box label="Umkehren" name="checkbox flip t"/>
+			<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="button apply"/>
+			<text name="tex offset">
+				Texture-Versatz
+			</text>
+			<spinner label="Horizontal (U)" name="TexOffsetU"/>
+			<spinner label="Vertikal (V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="Inhalt" name="Contents">
+			<button label="Neues Skript" label_selected="Neues Skript" name="button new script"/>
+			<button label="Berechtigungen" name="button permissions"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			Parzelleninformation
+		</text>
+		<text name="label_area_price">
+			Preis: L$ [PRICE] für [AREA] m²
+		</text>
+		<text name="label_area">
+			Fläche: [AREA] m²
+		</text>
+		<button label="Info zu Land..." label_selected="Info zu Land..." name="button about land"/>
+		<check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen: 
+
+Grün = Ihr Land 
+Blau = Das Land Ihrer Gruppe 
+Rot = Im Eigentum anderer 
+Geld = Zum Verkauf 
+Lila = Zur Auktion 
+Grau = Öffentlich"/>
+		<text name="label_parcel_modify">
+			Parzelle ändern
+		</text>
+		<button label="Unterteilen" label_selected="Unterteilen" name="button subdivide land"/>
+		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land"/>
+		<text name="label_parcel_trans">
+			Land-Transaktionen
+		</text>
+		<button label="Land kaufen" label_selected="Land kaufen" name="button buy land"/>
+		<button label="Land aufgeben" label_selected="Land aufgeben" name="button abandon land"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml
index f9e7becee1c12b8359d15b711c684cd665cd46e2..082eb8894df15dcc1c3731e7aa44957b291e2ddf 100644
--- a/indra/newview/skins/default/xui/de/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="wird geladen...">
+<floater name="top_objects" title="WIRD GELADEN...">
 	<text name="title_text">
 		Wird geladen...
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
index 95b469434a29687b85a5dbe47d2667a37c6202a5..0880470c58eaa23c574c9933ac475d9042a740fb 100644
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ b/indra/newview/skins/default/xui/de/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Erweiterter Wasser-Editor">
+<floater name="Water Floater" title="ERWEITERTER WASSER-EDITOR">
 	<text name="KeyFramePresetsText">
 		Voreinstellungen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
index 8df412dab64505956c23124679d01a2bf2e3b79f..df0b513a85ac4f7d4bae0626da7cc24a9e8f252a 100644
--- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Erweiterter Himmel-Editor">
+<floater name="WindLight floater" title="ERWEITERTER HIMMEL-EDITOR">
 	<text name="KeyFramePresetsText">
 		Voreinstellungen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml
index d3366e58712c96b2b69840595f85a4ed7fcfa915..665eafe5b87cfe3f7cc6edde87cdc3e2d6c24c3c 100644
--- a/indra/newview/skins/default/xui/de/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Weltkarte">
+<floater name="worldmap" title="WELTKARTE">
 	<tab_container name="maptab">
 		<panel label="Objekte" name="objects_mapview"/>
 		<panel label="Terrain" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d2d6d202706c2255362ff646f5c9ed77d96473b7
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE], [PAYMENTINFO]
+Profil: [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
+	<button label="Freund hinzufügen" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae9a70024aef748f00b4740c3e8227d5d33db416
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Profil anzeigen..." name="Show Profile"/>
+	<menu_item_call label="IM senden..." name="Send IM"/>
+	<menu_item_call label="Freund hinzufügen..." name="Add Friend"/>
+	<menu_item_call label="Freund entfernen..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_favorites.xml b/indra/newview/skins/default/xui/de/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b73010e7b5ac4998183c0268a7e32d260d1290f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teleportieren" name="Teleport To Landmark"/>
+	<menu_item_call label="Landmarken anzeigen/bearbeiten" name="Landmark Open"/>
+	<menu_item_call label="SLurl kopieren" name="Copy slurl"/>
+	<menu_item_call label="Auf Karte zeigen" name="Show On Map"/>
+	<menu_item_call label="Kopieren" name="Landmark Copy"/>
+	<menu_item_call label="Einfügen" name="Landmark Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_group_plus.xml b/indra/newview/skins/default/xui/de/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f90fcb04519d69043f0e1e665bf6d031ace6d11f
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Werden Sie Mitglied..." name="item_join"/>
+	<menu_item_call label="Neue Gruppe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index e05b2e9f1a39454e530ae548769fd372af6ab3e3..67250fc73283bfac4fd229a01127c9750f96215d 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="Kaufen" name="Task Buy"/>
-	<menu_item_call label="Öffnen" name="Task Open"/>
-	<menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/>
-	<menu_item_call label="Eigenschaften" name="Task Properties"/>
-	<menu_item_call label="Umbenennen" name="Task Rename"/>
-	<menu_item_call label="Löschen" name="Task Remove"/>
-	<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
-	<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
-	<menu_item_call label="Neuer Ordner" name="New Folder"/>
-	<menu_item_call label="Neues Skript" name="New Script"/>
-	<menu_item_call label="Neue Notiz" name="New Note"/>
-	<menu_item_call label="Neue Geste" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="Neues Hemd" name="New Shirt"/>
-		<menu_item_call label="Neue Hose" name="New Pants"/>
-		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
-		<menu_item_call label="Neue Socken" name="New Socks"/>
-		<menu_item_call label="Neue Jacke" name="New Jacket"/>
-		<menu_item_call label="Neuer Rock" name="New Skirt"/>
-		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
-		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
-		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
-		<menu_item_call label="Neue Haut" name="New Skin"/>
-		<menu_item_call label="Neues Haar" name="New Hair"/>
-		<menu_item_call label="Neue Augen" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="Teleportieren" name="Landmark Open"/>
-	<menu_item_call label="Öffnen" name="Animation Open"/>
-	<menu_item_call label="Öffnen" name="Sound Open"/>
-	<menu_item_call label="Objekt löschen" name="Purge Item"/>
-	<menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
-	<menu_item_call label="Öffnen" name="Open"/>
-	<menu_item_call label="Eigenschaften" name="Properties"/>
-	<menu_item_call label="Umbenennen" name="Rename"/>
-	<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
-	<menu_item_call label="Kopieren" name="Copy"/>
-	<menu_item_call label="Einfügen" name="Paste"/>
-	<menu_item_call label="Löschen" name="Delete"/>
-	<menu_item_call label="Objekte abnehmen" name="Take Off Items"/>
-	<menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/>
-	<menu_item_call label="Outfit ersetzen" name="Replace Outfit"/>
-	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
-	<menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
-	<menu_item_call label="Landmarken-Info" name="Teleport To Landmark"/>
-	<menu_item_call label="In Welt abspielen" name="Animation Play"/>
-	<menu_item_call label="Lokal wiedergeben" name="Animation Audition"/>
-	<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
-	<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
-	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
-	<menu_item_call label="Aktivieren" name="Activate"/>
-	<menu_item_call label="Deaktivieren" name="Deactivate"/>
-	<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
-	<menu_item_call label="Zu letzter Position zurücksetzen" name="Restore to Last Position"/>
-	<menu_item_call label="Anziehen" name="Object Wear"/>
-	<menu label="Anhängen an" name="Attach To"/>
-	<menu label="An HUD hängen" name="Attach To HUD"/>
-	<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
-	<menu_item_call label="Anziehen" name="Wearable Wear"/>
-	<menu_item_call label="Ausziehen" name="Take Off"/>
-	<menu_item_call label="--keine Optionen--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Kaufen" name="Task Buy"/>
+	<menu_item_call label="Öffnen" name="Task Open"/>
+	<menu_item_call label="Wiedergeben/Abspielen" name="Task Play"/>
+	<menu_item_call label="Eigenschaften" name="Task Properties"/>
+	<menu_item_call label="Umbenennen" name="Task Rename"/>
+	<menu_item_call label="Löschen" name="Task Remove"/>
+	<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
+	<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
+	<menu_item_call label="Neuer Ordner" name="New Folder"/>
+	<menu_item_call label="Neues Skript" name="New Script"/>
+	<menu_item_call label="Neue Notiz" name="New Note"/>
+	<menu_item_call label="Neue Geste" name="New Gesture"/>
+	<menu label="Neue Kleider" name="New Clothes">
+		<menu_item_call label="Neues Hemd" name="New Shirt"/>
+		<menu_item_call label="Neue Hose" name="New Pants"/>
+		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
+		<menu_item_call label="Neue Socken" name="New Socks"/>
+		<menu_item_call label="Neue Jacke" name="New Jacket"/>
+		<menu_item_call label="Neuer Rock" name="New Skirt"/>
+		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
+	</menu>
+	<menu label="Neue Körperteile" name="New Body Parts">
+		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
+		<menu_item_call label="Neue Haut" name="New Skin"/>
+		<menu_item_call label="Neues Haar" name="New Hair"/>
+		<menu_item_call label="Neue Augen" name="New Eyes"/>
+	</menu>
+	<menu label="Typ ändern" name="Change Type">
+		<menu_item_call label="Standard" name="Default"/>
+		<menu_item_call label="Handschuhe" name="Gloves"/>
+		<menu_item_call label="Jacke" name="Jacket"/>
+		<menu_item_call label="Hose" name="Pants"/>
+		<menu_item_call label="Form" name="Shape"/>
+		<menu_item_call label="Schuhe" name="Shoes"/>
+		<menu_item_call label="Hemd" name="Shirt"/>
+		<menu_item_call label="Rock" name="Skirt"/>
+		<menu_item_call label="Unterhose" name="Underpants"/>
+		<menu_item_call label="Unterhemd" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Teleportieren" name="Landmark Open"/>
+	<menu_item_call label="Öffnen" name="Animation Open"/>
+	<menu_item_call label="Öffnen" name="Sound Open"/>
+	<menu_item_call label="Objekt löschen" name="Purge Item"/>
+	<menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
+	<menu_item_call label="Öffnen" name="Open"/>
+	<menu_item_call label="Eigenschaften" name="Properties"/>
+	<menu_item_call label="Umbenennen" name="Rename"/>
+	<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Objekte abnehmen" name="Take Off Items"/>
+	<menu_item_call label="Zum Outfit hinzufügen" name="Add To Outfit"/>
+	<menu_item_call label="Outfit ersetzen" name="Replace Outfit"/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
+	<menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
+	<menu_item_call label="In Welt abspielen" name="Animation Play"/>
+	<menu_item_call label="Lokal wiedergeben" name="Animation Audition"/>
+	<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
+	<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
+	<menu_item_call label="Aktivieren" name="Activate"/>
+	<menu_item_call label="Deaktivieren" name="Deactivate"/>
+	<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
+	<menu_item_call label="Anziehen" name="Object Wear"/>
+	<menu label="Anhängen an" name="Attach To"/>
+	<menu label="An HUD hängen" name="Attach To HUD"/>
+	<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
+	<menu_item_call label="Anziehen" name="Wearable Wear"/>
+	<menu_item_call label="Ausziehen" name="Take Off"/>
+	<menu_item_call label="--keine Optionen--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_landmark.xml b/indra/newview/skins/default/xui/de/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..40b5b67079bcbe3d01d732544f17c5365fcb542d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="SLurl kopieren" name="copy"/>
+	<menu_item_call label="Löschen" name="delete"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml
index 9b7117cf42c5c76416ab04c919965a2c3afda344..840e7c41b24285bd82200faeabbcb9a35ebf0bb8 100644
--- a/indra/newview/skins/default/xui/de/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="Zoom Nah" name="Zoom Close"/>
-	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
-	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
-	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
-	<menu_item_call label="Profil..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="Zoom Nah" name="Zoom Close"/>
+	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
+	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
+	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
+	<menu_item_call label="Weltkarte" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..677de7c116d44d00976eb82a73bcca7a18032d78
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
+	<menu_item_call label="Landmarke" name="Landmark"/>
+	<menu_item_call label="Ausschneiden" name="Cut"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Alle auswählen" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_picks.xml b/indra/newview/skins/default/xui/de/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..102dd4cc5d6377a91bab0452253ab5105a1715fb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Info" name="pick_info"/>
+	<menu_item_call label="Bearbeiten" name="pick_edit"/>
+	<menu_item_call label="Teleportieren" name="pick_teleport"/>
+	<menu_item_call label="Karte" name="pick_map"/>
+	<menu_item_call label="Löschen" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_place.xml b/indra/newview/skins/default/xui/de/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..36cb3377c14c963b1b7d14ca4600ac56ea259f18
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Eine Landmarke setzen" name="landmark"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+	<menu_item_call label="Pass kaufen" name="pass"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_slurl.xml b/indra/newview/skins/default/xui/de/menu_slurl.xml
index d9793e5906ea09d321e89ace9f97003909642843..b379c1ca6a9f85a6fcbac7013a902542918cf7fd 100644
--- a/indra/newview/skins/default/xui/de/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/de/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="URL-Info" name="about_url" />
-	<menu_item_call label="Zu URL teleportieren" name="teleport_to_url" />
-	<menu_item_call label="Auf Karte" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="URL-Info" name="about_url"/>
+	<menu_item_call label="Zu URL teleportieren" name="teleport_to_url"/>
+	<menu_item_call label="Karte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9effe0bf26cb19504e9d6b3c1f8673238f488af
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Einwohnerprofil anzeigen" name="show_agent"/>
+	<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..78051fe726eaf2c8e82bc4fc3e43d7d550ea65cb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Gruppeninformation anzeigen" name="show_group"/>
+	<menu_item_call label="Gruppe in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae4aaad4803bff26b26e257ff2917772d147d347
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Webseite öffnen" name="url_open"/>
+	<menu_item_call label="Im internen Browser öffnen" name="url_open_internal"/>
+	<menu_item_call label="Im externen Browser öffnen" name="url_open_external"/>
+	<menu_item_call label="URL in Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8bb1822405c2e69dbe73be565e512d918c90467b
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Objektinformationen anzeigen" name="show_object"/>
+	<menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
+	<menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3117c8fbe847493c739e8ed4fc2d892635369f4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Parzelleninformationen anzeigen" name="show_parcel"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b4d15b2c3db147c4efb73ec0dc69076d29a0eae1
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ortsinformationen anzeigen" name="show_place"/>
+	<menu_item_call label="Zu Position teleportieren" name="teleport_to_location"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..254807295f43fdc968c16433bdee2422c452c9ab
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="An diesen Standort teleportieren" name="teleport"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index ebe2d9b260f69427c8e9cd300d82885b79f25c42..94bb7582c37c17fb52bd5cb37c3a485195775278 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1,2982 +1,2563 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		Nicht mehr anzeigen
-	</global>
-	<global name="alwayschoose">
-		Diese Option immer auswählen
-	</global>
-	<global name="implicitclosebutton">
-		Schließen
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert">
-		Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen.
-
-Fehlerdetails: Der Warnhinweis „[_NAME]“ wurde in notifications.xml nicht gefunden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden:
-
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		Derzeit ist kein Tutorial verfügbar.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="BadInstallation">
-		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von secondlife.com herunter.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. 
-„[DIAGNOSTIC]“
-Bitte überprüfen Sie Ihre Netzwerkverbindung.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		Meldungsvorlage [PATH] nicht gefunden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		Änderung an aktueller Kleidung/Körperteil speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="WriteAnimationFail">
-		Fehler beim Schreiben von Animationsdaten.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		Änderung an Kleidung/Körperteilen speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
-Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
-Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		Gruppe konnte nicht erstellt werden.
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		Geben Sie einen Betreff für die Gruppenmitteilung ein.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen.
-Diese Rolle kann Mitgliedern nicht mehr entzogen werden.
-Sie müssen die Rolle selbst niederlegen.
-Möchten Sie fortfahren?
-		<usetemplate ignoretext="Beim Hinzufügen von Gruppenmitgliedern zur Eigentümerrolle" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
-
- *ACHTUNG*
- Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
- und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte
- beinhalten als sie derzeit haben, und damit nahezu
- Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit
- verleihen.
-
-Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
-
- *ACHTUNG*
- Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
- und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und
- damit fast Eigentümerrechte erreichen.
-
-Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		Auswahl von „In Suche veröffentlichen“
-Dieses Kontrollkästchen zeigt Folgendes an:
-- diese Parzelle in den Suchergebnissen
-- die öffentlichen Objekte dieser Parzelle
-- diese Parzelle in der Websuche
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		Medien und Musik können nur innerhalb der Parzelle abgespielt werden. Sound- und Voice-Chat-Optionen können auf die Parzelle beschränkt werden oder von Einwohnern außerhalb der Parzelle, entsprechend ihrer Alterseinstufung, gehört werden. Möchten Sie unsere Knowledgebase besuchen, um mehr darüber zu erfahren, wie diese Optionen eingestellt werden können?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Medien_auf_Parzellen_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		Die Suchergebnisse wurde aufgrund der entsprechenden Registerkarte, Ihrer Alterseinstufung, der gewählten Kategorie und anderen Faktoren geordnet. Bitte besuchen Sie unsere Knowledgebase, um weitere Informationen zu erhalten.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/FAQ_zur_Suchfunktion_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		Diese Parzelle kann nicht in der Suche angezeigt werden, da sie sich in einer Region befindet, die das verbietet.
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		Auswahl von „In Suche anzeigen“ zeigt Folgendes an:
-- Ihr Profil in den Suchergebnissen
-- einen Link auf Ihr Profil in den öffentlichen Gruppenseiten
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		Auf der [SECOND_LIFE] Website können Sie anderen Einwohnern eine Partnerschaft vorschlagen und bestehende Partnerschaften lösen.
-
-Die [SECOND_LIFE] Website für weitere Informationen über Partnerschaften öffnen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		Ihre Standardberechtigung funktionieren in älteren Regionen möglicherweise nicht.
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		Wenn dieser Einwohner einen Webprofil-URL angegeben hat, können Sie:
- * Auf „Laden“ klicken und die Seite in dieser Web-Registerkarte anzeigen.
- * Auf Laden &gt; „In externem Browser“ klicken und die Seite im Standard-Browser anzeigen.
- * Auf Laden &gt; „Start-URL“ klicken und zum Webprofil des Bewohners zurückkehren.
-
-In Ihrem eigenen Profil können Sie jeden beliebigen URL als Ihr Webprofil eingeben und mit OK übernehmen.
-Wenn sich andere Einwohner Ihr Profil ansehen, können sie diesen URL besuchen.
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		Der Beitritt zu dieser Gruppe kostet [COST] L$.
-Fortfahren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		Der Beitritt zu dieser Gruppe kostet [COST] L$.
-Sie haben nicht genug L$, um dieser Gruppe beizutreten.
-	</notification>
-	<notification name="LandBuyPass">
-		Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$
-[TIME] Stunden lang betreten.  Pass kaufen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen.
-Wählen Sie eine bestimmte Person aus, wenn Sie für 0 L$ verkaufen.
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		ACHTUNG: Wenn Sie auf „An jeden verkaufen“ klicken, kann jeder in [SECOND_LIFE] Ihr Land kaufen, auch Einwohner in anderen Regionen.
-
-Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
-Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren?
-Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren?
-Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
-
-*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		Möchten Sie alle Objekte in dieser Region deaktivieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
-
-Objekte: [N]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		Skriptdeaktivierung nicht möglich.
-Für die gesamte Region ist Schaden aktiviert.
-Damit Waffen funktionieren, müssen Skripts erlaubt sein.
-	</notification>
-	<notification name="MustBeInParcel">
-		Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
-	</notification>
-	<notification name="PromptRecipientEmail">
-		Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein.
-	</notification>
-	<notification name="PromptSelfEmail">
-		Geben Sie Ihre E-Mail-Adresse ein.
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		Fehler beim Verarbeiten der Fotodaten
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		Fehler beim Erstellen des Fotos!
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen.
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		Outfit konnte nicht angezogen werden.
-Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
-	</notification>
-	<notification name="CannotWearTrash">
-		Kleider oder Körperteile im Papierkorb können nicht getragen werden
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		Hoppla! Da fehlt noch etwas.
-Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
-
-Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
-		<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
-	</notification>
-	<notification name="AddClassified">
-		Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
-		<usetemplate ignoretext="Beim Hinzufügen einer neuen Anzeige" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		Anzeige „[NAME]“ löschen?
-Gebühren werden nicht rückerstattet.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		Änderung an Anzeige [NAME] speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		Auswahl [PICK] löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		Zur [SECOND_LIFE] Events-Webseite?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		Wählen Sie ein Angebot zur Ansicht.
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		Wählen Sie ein Element zur Ansicht.
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		Möchten Sie alle Popups, die übersprungen werden können, deaktivieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		Der Cache wird nach einem Neustart von [APP_NAME] geleert.
-	</notification>
-	<notification name="CacheWillBeMoved">
-		Der Cache wird nach einem Neustart von [APP_NAME] verschoben.
-Hinweis: Der Cache wird dabei gelöscht/geleert.
-	</notification>
-	<notification name="ChangeConnectionPort">
-		Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
-	</notification>
-	<notification name="ChangeSkin">
-		Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet.
-	</notification>
-	<notification name="GoToAuctionPage">
-		Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		Änderungen speichern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		Speichern der Geste fehlgeschlagen.
-Die Geste besteht aus zu vielen Schritten.
-Löschen Sie einige Schritte und versuchen Sie es erneut.
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		Speichern der Geste fehlgeschlagen.  Warten Sie kurz und versuchen Sie es dann noch einmal.
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Geste bitte später.
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Notizkarte bitte später.
-	</notification>
-	<notification name="ScriptCannotUndo">
-		Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden.
-Möchten Sie die letzte gespeicherte Version vom Server laden?
-(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.)
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde.
-Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
-	</notification>
-	<notification name="CannotDownloadFile">
-		Dateidownload nicht möglich
-	</notification>
-	<notification name="CannotWriteFile">
-		Datei [[FILE]] kann nicht geschrieben werden
-	</notification>
-	<notification name="UnsupportedHardware">
-		Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Für nicht unterstützte Systemkonfigurationen bieten wir keinen technischen Support.
-
-MINSPECS
-Die Seite [_URL] für weitere Informationen öffnen?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=de
-		</url>
-		<usetemplate ignoretext="Bei Entdeckung nicht unterstützter Hardware" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="UnknownGPU">
-		Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.
-Dies ist häufig der Fall bei neuer Hardware, die wir noch nicht testen konnten.
-[APP_NAME] funktioniert aller Voraussicht nach normal, möglicherweise müssen Sie aber die Grafikeinstellungen anpassen.
-(Bearbeiten &gt; Einstellungen &gt; Grafik).
-		<form name="form">
-			<ignore name="ignore" text="Bei Entdeckung einer unbekannten Grafikkarte"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt.
-Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden.
-Einige Grafikfunktionen werden ausgeschaltet.
-Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber.
-Sie können die Grafikqualität unter „Einstellungen“ &gt; „Grafik“ wieder erhöhen.
-	</notification>
-	<notification name="RegionNoTerraforming">
-		Die Region [REGION] erlaubt kein Terraforming.
-	</notification>
-	<notification name="CannotCopyWarning">
-		Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		Inventarobjekt kann nicht übergeben werden.
-	</notification>
-	<notification name="TransactionCancelled">
-		Transaktion abgebrochen.
-	</notification>
-	<notification name="TooManyItems">
-		Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden.
-	</notification>
-	<notification name="NoItems">
-		Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren.
-	</notification>
-	<notification name="CannotCopyCountItems">
-		Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht.
-Möchten Sie diese Objekte weggeben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
-	</notification>
-	<notification name="FreezeAvatar">
-		Diesen Avatar einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		[AVATAR_NAME] einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		[AVATAR_NAME] von Ihrem Land werfen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		Diesen Avatar aus Ihrem Land werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		[AVATAR_NAME] aus Ihrem Land werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		FEHLER: Zu viele Objekte ausgewählt.
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		FEHLER: Die Objekte überspannen mehrere Regionen.
-Verschieben Sie alle betreffenden Objekte in dieselbe Region.
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-[_URL] für Informationen zum Deviseneinkauf öffnen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		Verknüpfung dieser [COUNT] Objekte nicht möglich.
-Sie können maximal [MAX] Objekte verknüpfen.
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
-	</notification>
-	<notification name="CannotLinkModify">
-		Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen.
-
-Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
-
-Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
-	</notification>
-	<notification name="NoFileExtension">
-		Kein Dateityp für Datei: „[FILE]“
-
-Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat.
-	</notification>
-	<notification name="InvalidFileExtension">
-		Ungültige Datei-Endung [EXTENSION]
-Erwartet wurde [VALIDS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		Sounddatei konnte nicht hochgeladen werden:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		Die Datei ist anscheinend keine RIFF WAVE-Datei:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		Die Datei ist anscheinend keine PCM WAVE-Audiodatei:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		„Daten“-Chunk in WAV-Header nicht gefunden:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		Audiodatei ist zu lang (max. 10 Sekunden):
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		Problem mit Datei [FILE]:
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		Unbekannter Vorbis-Kodierungsfehler in: [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		Datei konnte nicht kodiert werden: [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		Ressourcendatei beschädigt: [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		Unbekannte Linden-Ressourcenversion in Datei: [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		Ausgabedatei konnte nicht erstellt werden: [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		Der Mehrfach-Upload von Animationsdateien wird zurzeit nicht unterstützt.
-	</notification>
-	<notification name="CannotUploadReason">
-		Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		„Rekompilieren“ nicht möglich.
-Objekt mit Skript wählen.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		„Rekompilieren“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		„Zurücksetzen“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		„Zurücksetzen“ nicht möglich.
-
-Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		„Ausführen“ von Skripts nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		„Deaktivieren“ von Skripts nicht möglich.
-
-Wählen Sie Objekte mit Skripts.
-	</notification>
-	<notification name="NoFrontmostFloater">
-		Kein vorderster Floater zum Speichern.
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		Ihre Suchanfrage wurde geändert.
-Zu kurze Begriffe wurden entfernt.
-
-Ihre Suchanfrage: [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		Ihre Suchbegriffe sind zu kurz.
-Es wurde keine Suche durchgeführt.
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		Teleport fehlgeschlagen.
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-	</notification>
-	<notification name="invalid_region_handoff">
-		Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-	</notification>
-	<notification name="blocked_tport">
-		Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
-Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
-	</notification>
-	<notification name="nolandmark_tport">
-		Das System konnte das Landmarken-Ziel nicht finden.
-	</notification>
-	<notification name="timeout_tport">
-		Das System konnte keine Teleport-Verbindung herstellen.
-Versuchen Sie es später noch einmal.
-	</notification>
-	<notification name="noaccess_tport">
-		Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
-	</notification>
-	<notification name="missing_attach_tport">
-		Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
-	</notification>
-	<notification name="too_many_uploads_tport">
-		Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
-Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
-	</notification>
-	<notification name="expired_tport">
-		Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="expired_region_handoff">
-		Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="no_host">
-		Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="no_inventory_host">
-		Das Inventarsystem ist zurzeit nicht verfügbar.
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		Landeigentümer kann nicht festgelegt werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		Inhaltsidentifizierung nicht möglich:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		Inhaltsidentifizierung nicht möglich:
-Keine Region ausgewählt.
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		Land kann nicht aufgegeben werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		Land kann nicht aufgegeben werden:
-Region nicht gefunden.
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		Land kann nicht gekauft werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		Land kann nicht gekauft werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat.
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		Land kann nicht übertragen werden:
-Keine Parzelle ausgewählt.
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		Land kann nicht übertragen werden:
-Keine Gruppe ausgewählt.
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		Land kann nicht übertragen werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		Land kann nicht übertragen werden:
-Mehrere Parzellen ausgewählt.
-
-Wählen Sie eine einzelne Parzelle.
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		Dieser Ort kann Streaming-Medien abspielen.
-Streaming-Medien erfordern eine schnelle Internet-Verbindung.
-
-Streaming-Medien abspielen, wenn verfügbar?
-(Sie können diese Option später unter „Einstellungen“ &gt; „Audio &amp; Video“ ändern.)
-		<usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		Land kann nicht übertragen werden:
-Warte auf Server für Eigentümerinformationen.
-
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		Land kann nicht übertragen werden:
-Die Region [REGION] erlaubt keine Landübertragung.
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		Land kann nicht aufgegeben werden:
-Server muss Parzelleninformation aktualisieren.
-
-Versuchen Sie es in einigen Sekunden erneut.
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		Land kann nicht aufgegeben werden:
-Die ausgewählten Parzellen gehören Ihnen nicht.
-
-Wählen Sie eine einzelne Parzelle.
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		Land kann nicht aufgegeben werden:
-Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle.
-Parzellen, die Ihnen gehören, werden grün dargestellt.
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		Land kann nicht aufgegeben werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		Land kann nicht aufgegeben werden:
-Die Region [REGION] erlaubt keine Landübertragung.
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		Land kann nicht aufgegeben werden:
-Zum Freigeben müssen Sie eine ganze Parzelle auswählen.
-
-Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
-	</notification>
-	<notification name="ReleaseLandWarning">
-		Sie sind im Begriff, [AREA] qm Land aufzugeben.
-Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
-
-Dieses Land aufgeben?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		Land kann nicht aufgeteilt werden:
-
-Keine Parzellen ausgewählt.
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		Land kann nicht aufgeteilt werden:
-
-Sie haben eine ganze Parzelle ausgewählt.
-Wählen Sie einen Parzellenabschnitt aus.
-	</notification>
-	<notification name="LandDivideWarning">
-		Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt.
-
-Land teilen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		Land kann nicht aufgeteilt werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		Land kann nicht zusammengelegt werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		Land kann nicht zusammengelegt werden:
-Keine Parzellen ausgewählt.
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		Land kann nicht zusammengelegt werden:
-Sie haben nur eine Parzelle ausgewählt.
-
-Wählen Sie Land auf beiden Parzellen aus.
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		Land kann nicht zusammengelegt werden:
-Sie müssen mehrere Parzellen auswählen.
-
-Wählen Sie Land auf beiden Parzellen aus.
-	</notification>
-	<notification name="JoinLandWarning">
-		Beim Zusammenlegen entsteht aus den vom Auswahlrechteck
-erfassten Parzellen eine große Parzelle.
-Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
-
-Land zusammenlegen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		Eigentümer anzeigen:
-Parzellen farblich kennzeichnen, um Eigentumsart anzuzeigen.
-
-Grün = Ihr Land
-Blau = Das Land Ihrer Gruppe
-Rot = Im Eigentum anderer
-Geld = Zum Verkauf
-Lila = Zur Auktion
-Grau = Öffentlich
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		Dieses Objekt in Ihr Inventar kopieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		Fehler: Nicht definierte Gräser: [SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		Fehler: Nicht definierte Bäume: [SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		„[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		[NAME] kann nicht in Zentral-Asset-Speicher geladen werden.
-Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut.
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		Sie wurden von [SECOND_LIFE] abgemeldet:
-            [MESSAGE]
-Klicken Sie auf „IM &amp; Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden.
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM &amp; Chat anzeigen"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		Landkauf für Gruppe nicht möglich:
-Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
-	</notification>
-	<notification label="Freund hinzufügen" name="AddFriend">
-		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
-
-[NAME] Freundschaft anbieten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Freund hinzufügen" name="AddFriendWithMessage">
-		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
-
-[NAME] Freundschaft anbieten?
-		<form name="form">
-			<input name="message">
-				Wollen wir Freunde sein?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		Möchten Sie alle geskripteten Objekte von
-** [AVATAR_NAME] **
-auf allen anderen Ländern in diesem Sim löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		Möchten Sie ALLE geskripteten Objekte von
-** [AVATAR_NAME] **
-auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		Möchten Sie ALLE Objekte (einschließlich geskriptete) von
-** [AVATAR_NAME] **
-auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		Geben Sie einen Namen für die Anzeige ein.
-	</notification>
-	<notification name="MinClassifiedPrice">
-		Der Mindestbetrag für die Listung ist [MIN_PRICE] L$.
-
-Geben sie einen höheren Betrag ein.
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		Mindestens ein ausgewähltes Objekt ist gesperrt.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		Mindestens ein ausgewähltes Objekt kann nicht kopiert werden.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt kann nicht kopiert werden.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		Mindestens ein Objekt kann nicht kopiert werden.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Mindestens ein Objekt kann nicht kopiert werden.
-Mindestens ein Objekt gehört nicht Ihnen.
-
-Möchten Sie diese Objekte löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		Mindestens ein Objekt ist gesperrt.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
-Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		Mindestens ein Objekt ist gesperrt.
-Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
-Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
-Die aktuelle Auswahl können Sie jedoch aufnehmen.
-
-Möchten Sie diese Objekte nehmen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst.
-
-Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
-	</notification>
-	<notification name="DeedLandToGroup">
-		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
-Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
-
-Der Gruppe „[GROUP_NAME]“
- [AREA] m² Land schenken?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
-Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
-Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
-
-Der Gruppe „[GROUP_NAME]“
- [AREA] m² Land schenken?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		Ihr [TYPE]-Ort ist zurzeit nicht verfügbar. [HELP]
-Sie wurden zur nächstgelegenen Region teleportiert.
-	</notification>
-	<notification name="ClothingLoading">
-		Ihre Kleidung wird noch heruntergeladen.
-Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen.
-		<form name="form">
-			<ignore name="ignore" text="Wenn das Herunterladen von Kleidung lange dauert"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		Die Installation von [APP_NAME] ist abgeschlossen.
-
-Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können.
-Möchten Sie auf www.secondlife.com ein Konto erstellen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		Die Verbindung kann nicht hergestellt werden. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder den [SECOND_LIFE]-Servern.
-
-Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf „Hilfe“, um zu unserer Supportseite zu gelangen, oder klicken Sie auf „Teleportieren“, um nach Hause zu teleportieren.
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="Hilfe"/>
-			<button name="Teleport" text="Teleportieren"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		Ihr Avatar erscheint jeden Moment.
-
-Benutzen Sie die Pfeiltasten, um sich fortzubewegen.
-Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
-Bitte wählen Sie einen männlichen oder weiblichen Avatar.
-Sie können sich später noch umentscheiden.
-		<usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] [PRICE] L$  Sie haben nicht genügend L$, um diese Aktion auszuführen.
-	</notification>
-	<notification name="GrantedModifyRights">
-		Sie verfügen über Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="RevokedModifyRights">
-		Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen.
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		Der Kartencache dieser Region wird geleert.
-Diese Aktion ist nur beim Debugging sinnvoll.
-(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		Sie können jeweils nur ein Objekt kaufen.  Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		Es kann nur jeweils der Inhalt von einem Objekt kopiert werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		Alle Einwohner in dieser Region nach Hause teleportieren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		Die Regionstexturen konnten nicht festgelegt werden:
-Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH].
-
-Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
-	</notification>
-	<notification name="InvalidTerrainSize">
-		Die Regionstexturen konnten nicht festgelegt werden:
-Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß.
-
-Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
-	</notification>
-	<notification name="RawUploadStarted">
-		Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt.
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen:
-Ãœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS].
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		Es sind maximal [MAX_MANAGER]  verbannte Einwohner erlaub.
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
-	</notification>
-	<notification name="CantSetBuyObject">
-		„Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist.
-Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut.
-	</notification>
-	<notification name="FinishedRawDownload">
-		Raw-Terrain-Datei wurde heruntergeladen nach:
-[DOWNLOAD_PATH].
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		Eine neue Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadWindows">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		Eine neue Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMac">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
-[MESSAGE]
-Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
-
-In Ihren Anwendungsordner herunterladen?
-		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		Bei Übertragung dieses Objekts erhält die Gruppe:
-* An das Objekt bezahlte L$
-		<usetemplate ignoretext="Beim Ãœbertragen von Objekten an Gruppen" name="okcancelignore" notext="Abbrechen" yestext="Ãœbertragung"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		Den System-Webbrowser öffnen, um diesen Inhalt anzuzeigen?
-		<usetemplate ignoretext="Wenn der System-Webbrowser zur Anzeige einer Webseite geöffnet wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		Zu www.secondlife.com, um Ihr Konto zu verwalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um Ihr Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Sicherheitsfragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		Besuchen Sie das [SECOND_LIFE] QA-Wiki.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um den Allgemeine Probleme Tracker anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		Informieren Sie sich im [SECOND_LIFE] Wiki über den Allgemeine Fragen-Tracker.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Allgemeine Fragen-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen.
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		Zur Scripting-Anleitung, um Scripting-Hilfe zu erhalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um die Scripting-Anleitung anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		Zum LSL-Portal, um Scripting-Hilfe zu erhalten?
-		<usetemplate ignoretext="Beim Starten eines Browsers, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben.
-
-*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht!
-		<usetemplate ignoretext="Beim Zurückgeben von Objekten an ihre Eigentümer" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		Sie sind Mitglied der Gruppe [GROUP].
-Diese Gruppe verlassen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
-	</notification>
-	<notification name="MuteLinden">
-		Lindens können nicht stummgeschaltet werden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden.  Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten.
-	</notification>
-	<notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed">
-		Dieser Name ist bereits stummgeschaltet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		Beschäftigt-Modus aktiviert.
-Chat und Instant Messages werden ausgeblendet. Instant Messages erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden ausgeschlagen. Alle Inventar-Angebote werden in den Papierkorb verschoben.
-		<usetemplate ignoretext="Beim Aktivieren des Beschäftigt-Modus" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		Sie sind bereits in zu vielen Gruppen Mitglied und können keiner weiteren beitreten. Bitte verlassen Sie eine Gruppe, bevor Sie dieser beitreten oder lehnen Sie das Angebot ab.
-Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ &gt; „Gruppen...“.
-[NAME] hat Sie eingeladen, einer Gruppe beizutreten.
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/>
-	</notification>
-	<notification name="KickUser">
-		Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden von einem Administrator abgemeldet.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden von einem Administrator abgemeldet.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		Beim Auftauen dieses Benutzers welche Meldung anzeigen?
-		<form name="form">
-			<input name="message">
-				Sie sind nicht mehr eingefroren.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		Teleport an Ihre Position mit der folgenden Meldung anbieten?
-		<form name="form">
-			<input name="message">
-				Triff mich in [REGION]
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		Benutzer an Ihrem Standort herbeirufen?
-		<form name="form">
-			<input name="message">
-				Triff mich in [REGION]
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		Möchten Sie sich wirklich teleportieren?
-		<usetemplate ignoretext="Beim Teleportieren von einer Landmarke im Inventar" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
-	</notification>
-	<notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate">
-		Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
-		Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
-
-Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat.  Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
-
-Fortfahren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess">
-		Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
-
-Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen.
-Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedAgentAdd">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedAgentRemove">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedGroupAdd">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateAllowedGroupRemove">
-		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateBannedAgentAdd">
-		Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateBannedAgentRemove">
-		Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateManagerAdd">
-		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Grundstück wählen" name="EstateManagerRemove">
-		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
-	</notification>
-	<notification label="Rauswurf bestätigen" name="EstateKickUser">
-		Benutzer [EVIL_USER] von diesem Grundstück werfen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		Möchten Sie den Grundstücksvertrag wirklich ändern?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Regionzugang aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-	<form name="form">
-      <button
-       name="OK"
-       text="Einstellung ändern"/>
-      <button
-       name="Cancel"
-       text="Schließen"/>
-       <ignore name="ignore" text="Wenn Regionzugang aufgrund von Einstellung für Alterseinstufung gesperrt ist"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Landanspruch aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-		<usetemplate ignoretext="Wenn Landanspruch aufgrund von Einstellung der Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
-
-Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
-
-Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
-		</url>
-		<usetemplate ignoretext="Wenn Landkauf aufgrund von Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
-
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
-		<usetemplate ignoretext="Wenn Landkauf aufgrund von Einstellung für Alterseinstufung gesperrt ist" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		&quot;Zu viele Prims wurden ausgewählt.  Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut.&quot;
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		Problem beim Import des Grundstückvertrags.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters.  Bei mindestens einem Grundstück ist die Verwalterliste voll.
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		Problem beim Hinzufügen zu dieser Grundstücksliste.  Bei mindestens einem Grundstück ist die Liste voll.
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		Notizkarten-Asset konnte nicht geladen werden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		Asset-ID für Notizkarte fehlt in Datenbank.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		Hinweis: Anzeigengebühren werden nicht zurückerstattet.
-
-Anzeige für [AMOUNT] L$ veröffentlichen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		Enthält diese Anzeige Mature-Inhalte?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="SetGroupMature">
-		Beschäftigt sich diese Gruppe mit Mature-Inhalten?
-		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification label="Neustart bestätigen" name="ConfirmRestart">
-		Möchten Sie diese Region in 2 Minuten neu starten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification label="Nachricht an alle in dieser Region" name="MessageRegion">
-		Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Terraformen blockieren" name="HelpRegionBlockTerraform">
-		Wenn diese Option aktiviert ist, können Landeigentümer Ihr Land nicht terraformen. Ausgenommen davon ist die parzelleneigene Einstellung „Terrain bearbeiten“.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Fliegen blockieren" name="HelpRegionBlockFly">
-		Wenn diese Option aktiviert ist, ist Fliegen in dieser Region nicht möglich, auch wenn für die Parzelle eine andere Einstellung aktiv ist.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Mehrere Inhaltsberechtigungen ändern" name="HelpBulkPermission">
-		Mit dem Werkzeug „Mehrere Berechtigungen“ können Sie Berechtigungen für mehrere Objekte in den Inhalten des ausgewählten Objekts schnell ändern.  Bitte beachten Sie, dass Sie nur Berechtigungen an den Objekten im Inhalt der ausgewählten Objekte einstellen, nicht Berechtigungen an dem/den Container-Objekt(en=) selbst.  
-
-Bitte beachten Sie auch, dass die Berechtigungen nicht auf eingebettete Inhalte der enthaltenen Objekte angewandt werden.  Ihre Auftrag wird nur an Objekten ausgeführt, die sie sich in diesem Level befinden.
-
-Sie können auswählen, welche Objektarten Sie ändern möchten, indem Sie diese in der Liste unter „Inhaltsarten“ auswählen. Wenn Sie Texturen auswählen, sind Fotos mit eingeschlossen.
-
-* Mit diesem Werkzeug können Sie nur an Objekten, die Sie ändern dürfen, Änderungen vornehmen.
-* Sie können dem nächsten Eigentümer keine Berechtigungen geben, die Sie nicht besitzen.
-* Die Berechtigungen für den nächsten Eigentümer sind nur Anfragen. Wenn ein Objekt nicht alle Berechtigungen annehmen kann, dann werden keine seiner Berechtigungen geändert.
-
-Wenn Sie bereit sind, die Berechtigungen mehrfach zu ändern, klicken Sie auf Übernehmen und warten Sie, bis die Ergebnisse angezeigt werden.
-
-Wenn Sie das Fenster „Mehrfach-Berechtigungen“ schließen, während die Berechtigungen geändert werden, wird der Vorgang gestoppt.
-	</notification>
-	<notification label="Schaden zulassen" name="HelpRegionAllowDamage">
-		Wenn diese Option aktiviert ist, ist das Gesundheitssystem auf allen Parzellen aktiviert, unabhängig von den Parzelleneinstellungen. Ist die Option links deaktiviert, können die Parzelleneigentümer das Gesundheitssystem individuell einschalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Avatar-Limit" name="HelpRegionAgentLimit">
-		Legt die maximale Anzahl an Avataren für diese Region fest.
-Die Leistung hängt von der Anzahl der Avatare in der Region ab.
-
-Standard: 40
-	</notification>
-	<notification label="Objektbonus" name="HelpRegionObjectBonus">
-		Der Objektbonus ist ein Multiplikator für die Anzahl an zulässigen Primitiven auf einer Parzelle. Gültig sind Werte zwischen 1 und 10. „1“ erlaubt auf einer 512 qm großen Parzelle 117 Objekte. „2“ erlaubt auf einer 512 qm großen Parzelle 234 Objekte, also die doppelte Menge. Die maximale Objektanzahl in einer Region beträgt unabhängig vom Objektbonus 15.000.
-Eine nachträglich Senkung des Objektbonus führt dazu, dass Objekte zurückgegeben oder gelöscht werden.
-
-Standard: 1.0
-	</notification>
-	<notification label="Alterseinstufung" name="HelpRegionMaturity">
-		Legt die Alterseinstufung für die Region fest. Dies wird in der Menüleiste oben im Viewer angezeigt und auch in den Kurzinfos auf der Weltkarte, wenn der Cursor über diese Region schwebt. Diese Einstellung wirkt sich auch auf den Zugang zu dieser Region und die Suchergebnisse aus. Andere Einwohner können Regionen nur dann betreten oder Suchergebnisse anzeigen, wenn Ihre Alterseinstufung in Ihren Einstellungen der Alterseinstellung der Region bzw. Suchergebnisse entsprechen.
-
-Es kann eine Weile dauern, bis diese Änderung auf der Karte angezeigt wird.
-	</notification>
-	<notification label="Stoßen beschränken" name="HelpRegionRestrictPushObject">
-		Aktivieren sie diese Option, um in der gesamten Region das Stoßen zu beschränken. Wenn aktiviert, können Einwohner nur von sich selbst oder vom Parzelleneigentümer gestoßen werden.
-(Stoßen meint die LSL-Funktion llPushObject().)
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Parzelle zusammenlegen/teilen" name="HelpParcelChanges">
-		Dieses Kontrollkästchen steuert, ob Parzellen des Grundstückseigentümers zusammengelegt bzw. unterteilt werden können. Wenn deaktiviert:
- * Nur Grundstückseigentümer bzw. –verwalter können Parzellen zusammenlegen/teilen.  * Sie können nur Parzellen zusammenlegen/teilen, die dem Eigentümer oder einer Gruppe gehören, bei der sie entsprechende Gruppenrechte innehaben.
-Wenn aktiviert:
- * Die Parzelleneigentümer können ihre Parzellen selbst zusammenlegen/teilen.
- * Parzellen in Gruppeneigentum können von Mitgliedern mit den entsprechenden Rechten zusammengelegt bzw. unterteilt werden.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Nicht in Suche anzeigen" name="HelpRegionSearch">
-		Wenn Sie diese Option auswählen, können Parzelleneigentümer ihre Parzellen nicht in der Suche anzeigen lassen
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
-		Die Alterseinstufung dieser Region wurde aktualisiert.
-Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
-	</notification>
-	<notification label="Landwiederverkauf" name="HelpRegionLandResell">
-		Grundstückseigentümer und -verwalter können jedes Land im Besitz des Grundstückseigentümers verkaufen.
-Ist diese Option deaktiviert, können Käufer ihr Land in dieser Region nicht weiterverkaufen.
-Ist die Option aktiviert, können Käufer ihr Land in dieser Region weiterverkaufen.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Skripts deaktivieren" name="HelpRegionDisableScripts">
-		Schlechte Sim-Performance ist oftmals auf ein Skript zurückzuführen. Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert für „Simulator Physics FPS“ (Simulator Physik-FPS) an.
-Wenn der Wert unter 45 liegt, öffnen Sie den Bereich „Time“ (Zeit) ganz unten in der Statistikleiste. Wenn der Wert für „Script Time“ (Skriptzeit) 25 ms oder höher ist, klicken Sie auf „Top-Skripts“. Der Name und die Position der Skripts, die für die schlechte Performance verantwortlich sind, werden angezeigt.
-Wenn Sie das Kontrollkästchen „Skripts deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Skripts in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Skripts“ reisen können. Sobald Sie dort angekommen sind, sollten Sie das Skript auf die Ursache des Problems hin untersuchen. Möglicherweise müssen Sie sich an den Skript-Eigentümer wenden oder das Objekt löschen bzw. zurückgeben. Um die Skripte in der Region wieder zu aktivieren, deaktivieren Sie „Skript deaktivieren“ und klicken Sie auf „Übernehmen“.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Kollisionen deaktivieren" name="HelpRegionDisableCollisions">
-		Schlechte Sim-Performance ist oftmals auf physische Objekte zurückzuführen.
-Öffnen Sie die Statistikleiste (Strg+Umschalt+1). Sehen Sie sich den Wert „Simulator Physics FPS“ an. Liegt dieser unter 45, öffnen Sie unten in der Statistikleiste den „Time“-Bereich. Liegt die „Sim Time (Physics)“ bei 20 ms oder darüber, klicken Sie auf „Top-Kollisionsobjekte“.
-Der Name und der Standort der physischen Objekte, die das Problem verursachen, werden angezeigt.
-
-Wenn Sie das Kontrollkästchen „Kollisionen deaktivieren“ aktivieren und auf „Übernehmen“ klicken, werden alle Objekt-Objekt-Kollisionen in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten „Top-Kollisionsobjekts“ reisen können. Überprüfen Sie das Objekt an der angegebenen Position.
-Kollidiert es ständig mit anderen Objekten? Wenden Sie sich eventuell an den Eigentümer des Objekts, löschen Sie es oder geben Sie es zurück.
-Deaktivieren Sie die Option „Kollisionen deaktivieren“ und klicken Sie auf „Übernehmen“, um Kollisionen in dieser Region wieder zu aktivieren.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Physik deaktivieren" name="HelpRegionDisablePhysics">
-		Das Deaktivieren der Physik ähnelt dem Deaktivieren von Kollisionen, außer dass die gesamte Physiksimulation ausgeschaltet wird.  Das hat nicht nur zur Folge, dass Objekte nicht mehr kollidieren, sondern dass Avatare sich nicht mehr bewegen können.
-
-Diese Option sollte nur verwendet werden, wenn das Deaktivieren von Kollisionen keine ausreichende Leistungssteigerung bringt, um Physikprobleme in der Region oder die Top-Kollisionsobjekte zu erkennen.
-
-Schalten Sie die Physiksimulation hinterher wieder ein. Andernfalls können sich Avatare nicht mehr bewegen.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Top-Kollisionsobjekte" name="HelpRegionTopColliders">
-		Zeigt eine Liste der Objekte mit den potenziell meisten Objekt-Objekt-Kollisionen an.  Diese Objekte können die Leistung beeinträchtigen.  Wählen Sie „Ansicht“ &gt; „Statistikleiste“ aus und sehen Sie unter „Simulator“ &gt; „Time“ &gt; „Sim Time (Physics)“ nach, ob die Physikberechnung länger als 20 ms dauert.
-	</notification>
-	<notification label="Top-Skripts" name="HelpRegionTopScripts">
-		Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um LSL-Skripts auszuführen.  Diese Objekte können die Leistung beeinträchtigen.
-Wählen Sie „Ansicht“ &gt; „Statistikleiste“ und sehen Sie unter „Simulator“ &gt; „Time“ &gt; „Script Time“ nach, ob mehr als 25 ms für Skripts benötigt werden.
-	</notification>
-	<notification label="Region neu starten" name="HelpRegionRestart">
-		Starten Sie den Serverprozess für diese Region nach der 2-Minuten-Warnung neu. Die Verbindung aller Einwohner in dieser Region wird getrennt.  Die Region wird gespeichert und sollte nach 90 Sekunden wieder verfügbar sein.
-
-Der Neustart der Region behebt die meisten Leistungs-probleme, sollte aber nur nach Anweisung erfolgen.
-	</notification>
-	<notification label="Wasserhöhe" name="HelpRegionWaterHeight">
-		Die Höhe der Wasserlinie in Metern. Liegt dieser Wert unter 20 und haben Sie Wasser nahe am Rand der Welt oder „offenes“ Wasser definiert, wird eine deutliche Lücke sichtbar.
-
-Standard: 20
-	</notification>
-	<notification label="Obere Terraingrenze" name="HelpRegionTerrainRaise">
-		Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain über die Standardhöhe des „geformten“ Terrains erhöhen können.
-
-Standard: 4
-	</notification>
-	<notification label="Untere Terraingrenze" name="HelpRegionTerrainLower">
-		Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain unter die Standardhöhe des „geformten“ Terrains absenken können.
-
-Standard: -4
-	</notification>
-	<notification label="RAW-Terrain hochladen" name="HelpRegionUploadRaw">
-		Mit dieser Schaltfläche laden Sie eine RAW-Datei in die Region hoch, in der Sie sich befinden.
-Die Datei muss die korrekten Maße (RGB, 256x256) und 13 Kanäle haben.  Um eine neue Terraindatei zu erstellen, laden Sie am besten die vorhandene RAW-Datei herunter.  Beginnen Sie damit, den Rot-Kanal (Höhe des Landes) zu bearbeiten und laden Sie die Datei wieder hoch.
-
-Der Ladevorgang kann bis zu 45 Sekunden dauern. Beachten Sie, dass beim Hochladen einer Terraindatei die Objekte auf dem Land *nicht* verschoben werden, sondern nur das Land und die mit den Parzellen verbundenen Berechtigungen.  Dies kann dazu führen, dass Objekte unter dem Terrain verschwinden.
-
-Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe.
-	</notification>
-	<notification label="RAW-Terrain herunterladen" name="HelpRegionDownloadRaw">
-		Mit dieser Schaltfläche laden Sie eine Datei herunter, welche die Höhendaten, Maße, den Verkaufsstatus der Parzelle und einige Parzellenrechte für diese Region enthält. Wenn Sie diese Datei in einem Programm wie Photoshop öffnen, müssen Sie die Bilddaten eingeben. Diese sind: RGB, 256x256 mit 13 Kanälen. Anders lässt sich diese Terraindatei nicht öffnen.
-
-Weitere Informationen zur Bearbeitung der Höhendaten der Region enthält die F1-Hilfe.
-	</notification>
-	<notification label="Grundstücksonne verwenden" name="HelpRegionUseEstateSun">
-		Aktivieren Sie diese Option, um in dieser Region denselben Sonnenstand wie auf dem restlichen Grundstück einzustellen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Sonne fest" name="HelpRegionFixedSun">
-		Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Terrain formen" name="HelpRegionBakeTerrain">
-		Mit dieser Schaltfläche speichern Sie die aktuelle Terrain-Form als neuen Standard für die Region. Nach der Formung können Sie und andere das Land mit der Option „Terrain bearbeiten“ &gt; „Zurücksetzen“ in den ursprünglichen Zustand zurückversetzen. Das geformte Terrain ist auch das Zentrum für die oberen und unteren Terraingrenzen.
-	</notification>
-	<notification label="Grundstücksverwalter" name="HelpEstateEstateManager">
-		Ein Grundstücksverwalter ist ein Einwohner, dem Sie die Kontrolle über die Regions- und Grundstückseinstellungen übertragen haben.  Ein Grundstücksverwalter kann alle Einstellungen ändern, außer das Hochladen, Herunterladen und Formen von Terrain.  Vor allem kann er Einwohner auf dem Grundstück erlauben und davon verbannen.
-
-Nur der Eigentümer kann den Grundstücksverwalter bestimmen und entlassen. Der Verwalter hat dieses Recht nicht.  Wählen Sie nur vertrauenswürdige Einwohner als Grundstücksverwalter, da Sie letztlich für deren Handlungen verantwortlich sind.
-	</notification>
-	<notification label="Globale Zeit verwenden" name="HelpEstateUseGlobalTime">
-		Aktivieren Sie diese Option, um auf Ihrem Grundstück denselben Sonnenstand wie auf dem Linden-„Mainland“ einzustellen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Sonne fest" name="HelpEstateFixedSun">
-		Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten.
-	</notification>
-	<notification label="Öffentlich" name="HelpEstateExternallyVisible">
-		Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu erlauben, ohne auf der Zugangsliste zu stehen.
-
-Standard: aktiviert
-	</notification>
-	<notification label="Direktteleport zulassen" name="HelpEstateAllowDirectTeleport">
-		Wenn aktiviert, können sich Einwohner an jede Stelle auf Ihrem Grundstück teleportieren.  Wenn deaktiviert, werden Einwohner zum nächstgelegenen Telehub teleportiert.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Zugang erlauben" name="HelpEstateAllowResident">
-		Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist.
-	</notification>
-	<notification label="Gruppenzugang erlauben" name="HelpEstateAllowGroup">
-		Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn „Öffentlich“ deaktiviert ist.
-	</notification>
-	<notification label="E-Mail-Adresse für Missbrauchsmeldungen" name="HelpEstateAbuseEmailAddress">
-		Geben Sie hier eine E-Mail-Adresse ein, an die Missbrauchsmeldungen von diesem Grundstück gesendet werden.
-Wenn dieses Feld leer ist, werden Missbrauchsmeldungen nur an Linden Lab gesendet.
-	</notification>
-	<notification label="Zugang verweigern" name="HelpEstateBanResident">
-		Einwohnern auf dieser Liste wird der Zugang zum Grundstück verwehrt, unabhängig von etwaigen anderen Einstellungen.
-	</notification>
-	<notification label="Voice-Chat erlauben" name="HelpEstateVoiceChat">
-		Die Parzellen auf diesem Grundstück können über eigene Voice-Channel verfügen, die es Einwohnern ermöglichen, sich mit anderen Personen in der Nähe zu unterhalten.
-
-Standard: deaktiviert
-	</notification>
-	<notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
-		Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
-	</notification>
-	<notification label="Grunstücksvertrag" name="HelpEstateCovenant">
-		Ein Grundstücksvertrag ermöglicht es Ihnen, Grundstücksparzellen zu verkaufen. Ohne Vertrag können Sie kein Land verkaufen. Wenn Sie keine Regeln festlegen oder Käufern vor dem Kauf keine anderen Informationen über das Land bereitstellen möchten, können Sie die Vertrags-Notizkarte auch leer lassen.
-
-Ein Vertrag kann Regeln und Richtlinien, kulturelle Informationen oder einfach nur Ihre eigenen Erwartungen bezüglich der Landnutzung durch den Käufer enthalten. Das kann Zoning, Baubeschränkungen, Zahloptionen und alle möglichen anderen Informationen betreffen, die der neue Eigentümer Ihrer Meinung nach kennen und akzeptieren sollte.
-
-Der Käufer muss dem Vertrag durch Auswahl dieses Kontrollkästchens zustimmen, bevor der Kauf abgeschlossen werden kann. Grundstücksverträge sind jederzeit unter „Land-Info“ für jede Parzelle einsehbar, für die ein Vertrag definiert wurde.
-	</notification>
-	<notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly">
-		Inhalte können jeweils nur für ein Objekt gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
-	</notification>
-	<notification name="BuyOriginal">
-		Von [OWNER] Originalobjekt für [PRICE] L$ kaufen?
-Sie werden der Eigentümer dieses Objekts.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		Originalobjekt für [PRICE] L$ kaufen?
-Sie werden der Eigentümer dieses Objekts.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		Von [OWNER] Kopie für [PRICE] L$ kaufen?
-Das Objekt wird in Ihr Inventar kopiert.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		Kopie für [PRICE] L$ kaufen?
-Das Objekt wird in Ihr Inventar kopiert.
-Sie können das Objekt:
- Bearbeiten: [MODIFYPERM]
- Kopieren: [COPYPERM]
- Verkaufen oder weggeben: [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		Von [OWNER] Inhalte für [PRICE] L$ kaufen?
-Die Inhalte werden in Ihr Inventar kopiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		Inhalte für [PRICE] L$ kaufen?
-Die Inhalte werden in Ihr Inventar kopiert.
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		Transaktion:
-[ACTION]
-
-Möchten Sie diesen Kauf fortsetzen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		Transaktion:
-[ACTION]
-
-Möchten Sie diesen Kauf fortsetzen?
-Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
-		<form name="form">
-			<input name="message"/>
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		Hinweis:
-Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.
-Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
-
-Inventarobjekt(e) verschieben?
-		<usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.  Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
-Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren.
-
-Inventarobjekt(e) verschieben?
-		<usetemplate ignoretext="Beim Verschieben von nicht-kopierfähigem Inventar von geskripteten Objekten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		Achtung: Die Klick-Aktion „Objekt bezahlen“ wurde definiert, sie funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt wird.
-		<form name="form">
-			<ignore name="ignore" text="Beim Einrichten von Events mit „Objektbezahlung“ ohne Geld"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt.
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		Zur [SECOND_LIFE]-Website, um Ihre Kontostatistik anzuzeigen?
-		<usetemplate ignoretext="Beim Laden der Kontostatistik-Website" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		Die Support-Website von [SECOND_LIFE] öffnen?
-		<usetemplate ignoretext="Bei Besuch der [SECOND_LIFE] Support-Website." name="okcancelignore" notext="Abbrechen" yestext="Los"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		Wirklich beenden?
-		<usetemplate ignoretext="Beim Beenden von [APP_NAME]." name="okcancelignore" notext="Weiter" yestext="Beenden"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen:
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab.
--
-Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind.
-(Den Vertrag können Sie unter „Welt“ &gt; „Land-Info“ einsehen.)
--
-Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken.
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		Wählen Sie eine Missbrauchskategorie aus.
-Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts.
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		Geben Sie den Namen des Täters ein.
-Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat.
-Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		Bitte geben Sie eine Zusammenfassung des Vorfalls ein.
-Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein.
-Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		Sehr geehrte(r) Einwohner(in),
-
-Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
-
-1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen.
-
-2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen.
-
-Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.  Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen.
-
-Vielen Dank,
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		Die folgenden erforderlichen Komponenten fehlen in [FLOATER]:
-[COMPONENTS]
-	</notification>
-	<notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment">
-		An dieser Körperstelle ist bereits ein Objekt angebracht.
-Möchten Sie es mit dem ausgewählten Objekt ersetzen?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Beim Wechseln von Anhängen"/>
-			<button ignore="Automatisch ersetzen" name="Yes" text="OK"/>
-			<button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
-		Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
-
-Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Beim Bezahlen einer Person oder eines Objekts im Beschäftigt-Modus"/>
-			<button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
-			<button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		Möchten Sie den Inhalt Ihres Papierkorbs wirklich löschen?
-		<usetemplate ignoretext="Beim Leeren des Inventar-Papierkorbs" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		Möchten Sie Ihren Browser-Cache wirklich leeren?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		Die Liste mit gespeicherten URLs wirklich löschen?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		Möchten Sie den Inhalt Ihres Fundstücke-Ordners wirklich permanent löschen?
-		<usetemplate ignoretext="Beim Leeren von Inventar und Fundstückeordner-" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="CopySLURL">
-		Die folgende SLurl wurde in die Zwischenablage kopiert:
- [SLURL]
-
-Veröffentlichen Sie sie auf einer Website, um anderen den Zugang zu diesem Ort zu erleichtern, oder testen Sie sie, indem Sie sie in die Adressleiste Ihres Browsers kopieren.
-		<form name="form">
-			<ignore name="ignore" text="Beim Kopieren einer SLurl in die Zwischenablage"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		Die Optionen in diesem Dialog steuern Fenstergröße und Auflösung sowie die Qualität der Grafikdarstellung im Client.  Im Fenster „Einstellungen“ &gt; „Grafik“ stehen vier Grafikeinstellungen zur Wahl: Niedrig, Mittel, Hoch und Ultra. Die Grafikeinstellungen lassen sich auch individuell anpassen; aktivieren Sie das Kontrollkästchen „Benutzerdefiniert“, um die folgenden Einstellungen zu bearbeiten:
-
-Shader: Aktivieren oder deaktivieren Sie die verschiedenen Pixel-Shader.
-
-Spiegelung: Legen Sie hier fest, welche Objekte sich in Wasser spiegeln.
-
-Avatar-Darstellung: Einige Optionen, die über die Darstellung Ihres Avatars bestimmen.
-
-Sichtweite: Legt fest, bis zu welcher Entfernung von Ihrem Avatar die Objekte in der Szene berechnet und dargestellt werden.
-
-Max. Partikelzahl: Legt fest, wie viele Partikel gleichzeitig berechnet und angezeigt werden.
-
-Post-Processing-Qualität: Legt fest, mit welcher Auflösung der Glüheffekt berechnet wird.
-
-Gitterdetails: Legt den Detailgrad bzw. die Anzahl an Dreiecken bei der Berechnung bestimmter Objekte fest. Höhere Werte führen zu einer genaueren Darstellung, dauern aber länger in der Berechnung.
-
-Beleuchtungsdetails: Legt fest, welche Lichtquellen berechnet werden.
-
-Terraindetails: Legt den Detailgrad bei der Berechnung der Terraintextur fest.
-	</notification>
-	<notification name="WLSavePresetAlert">
-		Die gespeicherte Voreinstellung überschreiben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		[SKY] löschen?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
-	</notification>
-	<notification name="WLMissingSky">
-		Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
-		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="HelpEditSky">
-		Verschieben Sie die WindLight-Regler, um verschiedene Himmelsansichten zu erstellen und zu speichern.
-	</notification>
-	<notification name="HelpEditDayCycle">
-		Wählen Sie für jede Tageszeit eine Himmelsansicht aus.
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		Diese Einstellungen haben Auswirkung auf die lokale Darstellung der Umwelt auf Ihrem Computer. Zugriff auf alle Einstellungen haben Sie nur, wenn Ihre Grafikkarte Atmosphären-Shader unterstützt.
-
-Mit dem Regler „Tageszeit“ stellen Sie die lokal in Ihrem Viewer dargestellte Tageszeit ein.
-
-Mit dem Regler „Wolkendecke“ steuern Sie die Wolkendichte am Himmel.
-
-Unter „Wasserfarbe“ können Sie eine Farbe für die Wasserdarstellung auswählen.
-
-Mit dem Regler „Wassertrübung“ steuern Sie die Sichtweite unter Wasser.
-
-Klicken Sie auf „Grundstückszeit verw.“, um die aktuelle Zeit in der Region fest als Tageszeit einzustellen.
-
-Klicken Sie auf „Himmel (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Himmeldarstellung anzuzeigen.
-
-Klicken Sie auf „Wasser (erweitert)“, um einen Editor mit erweiterten Einstellungen für die Wasserdarstellung anzuzeigen.
-	</notification>
-	<notification name="HelpDayCycle">
-		Im Tageszyklus-Editor steuern Sie den Tag-/Nachtzyklus am [SECOND_LIFE] Himmel. Dabei handelt es sich um den Zyklus, der mit dem Tageszeit-Regler im Umwelt-Basiseditor gesteuert wird.
-
-Der Tageszyklus-Editor verwendet sogenannte Keyframes zur Steuerung des Tag-/Nachtablaufs. Dabei handelt es sich um „Schlüsselbilder“ (die grauen Kreise auf der Zeitskala), für die bestimmte Himmelseinstellungen definiert wurden. Bei voranschreitender Tageszeit interpoliert WindLight den Übergang zwischen diesen Keyframes und erzeugt eine entsprechende Himmelsanimation.
-
-Der gelbe Pfeil über der Zeitskala repräsentiert die aktuelle Tageszeit-Darstellung. Ziehen Sie den Pfeil, um die Tagesanimation anzuzeigen. Mit „Key hinzu“ und „Key löschen“ rechts neben der Zeitskala können Sie neue Keys einfügen und vorhandene löschen.
-
-Keyframes lassen sich einfach entlang der Zeitskala verschieben, oder Sie geben die Werte manuell unter „Keyframe-Einstellungen“ ein. Hier wählen Sie auch eine WindLight-Voreinstellung für den Keyframe aus.
-
-„Zykluslänge“ bestimmt die Gesamtlänge eines „Tages“. Ein niedriger Wert (z.B. 2 Minuten) führt dazu, dass ein ganzer 24-Stunden-Tag innerhalb von zwei Minuten Echtzeit abgespult wird! Wenn Sie alle Einstellungen auf der Zeitskala und für die einzelnen Keyframes vorgenommen haben, können Sie mit „Start“ und „Stopp“ die Animation anzeigen. Das funktioniert natürlich genauso interaktiv, indem Sie den gelben Pfeil über der Zeitskala verschieben. Mit der Schaltfläche „Grundstückszeit verw.“ synchronisieren Sie die Tageszeit und -länge mit den auf dem Grundstück geltenden Einstellungen.
-
-Ihre Tageszyklus-Einstellungen lassen sich mit den Schaltflächen „Testtag speichern“ und „Testtag laden“ speichern bzw. laden. Bis dato kann nur ein Tageszyklus gleichzeitig in Verwendung sein.
-	</notification>
-	<notification name="HelpBlueHorizon">
-		Mit den Reglern für Rot/Grün/Blau (RGB) steuern Sie die Farbe des Himmels. Verwenden Sie den Intensitätsregler (I), um alle drei RGB-Regler gleichzeitig zu verschieben.
-	</notification>
-	<notification name="HelpHazeHorizon">
-		Horizonttrübung ist einer der wichtigsten Parameter, um die Gesamtlichtsituation in der Szene zu steuern.  Damit lassen sich viele Belichtungseinstellungen simulieren, z.B. ein Überstrahlen durch die Sonne oder starker Dunst.
-	</notification>
-	<notification name="HelpBlueDensity">
-		Farbintensität steuert die Gesamtfarbsättigung von Himmel und Nebel. Je weiter Sie den Intensitätsregler (I) nach rechts verschieben, desto heller und lebendiger werden die Farben. Wenn Sie ihn ganz nach links verschieben, verlieren die Farben an Intensität und gehen in Schwarz oder Weiß über. Volle Kontrolle über die Farbsättigung des Himmels bieten ihnen die Regler für Rot/Grün/Blau (RGB).
-	</notification>
-	<notification name="HelpHazeDensity">
-		Trübungsintensität steuert die Stärke des grauen Dunsts in der Atmosphäre.  Damit lassen sich zum Beispiel starker Rauch oder Luftverschmutzung simulieren.  Auch für Nebel und Sprühregen geeignet.
-	</notification>
-	<notification name="HelpDensityMult">
-		Der Dichtemultiplikator beeinflusst die Gesamtdichte der Atmosphäre. Niedrige Einstellungen erzeugen den Eindruck dünner, sauberer Luft, hohe Einstellungen erzeugen den Eindruck schweren Smogs.
-	</notification>
-	<notification name="HelpDistanceMult">
-		Steuert die Entfernungswirkung von WindLight.  Ein Wert von Null schaltet den Einfluss von WindLight auf Terrain und Objekte praktisch aus.  Werte über 1 simulieren größere Entfernungen und verstärken den Atmosphäreneffekt.
-	</notification>
-	<notification name="HelpMaxAltitude">
-		Max. Höhe steuert die Höhenberechnungen von WindLight bei der Berechnung der atmosphärischen Beleuchtung. Zu späteren Tageszeiten lässt sich damit zum Beispiel die „Intensität“ des Sonnenuntergangs beeinflussen.
-	</notification>
-	<notification name="HelpSunlightColor">
-		Steuert Farbe und Intensität von direktem Licht in der Szene.
-	</notification>
-	<notification name="HelpSunAmbient">
-		Steuert Farbe und Intensität von atmosphärischem Umgebungslicht in der Szene.
-	</notification>
-	<notification name="HelpSunGlow">
-		Der Regler „Größe“ steuert die Größe der Sonne.
-Der Regler „Fokus“ steuert, wie unscharf die Sonne am Himmel erscheint.
-	</notification>
-	<notification name="HelpSceneGamma">
-		Regelt den Hell/Dunkel-Wert des Bildschirms.
-	</notification>
-	<notification name="HelpStarBrightness">
-		Regelt die Helligkeit der Sterne am Himmel.
-	</notification>
-	<notification name="HelpTimeOfDay">
-		Steuert die Sonnenstellung am Himmel.
-Entspricht der Elevation.
-	</notification>
-	<notification name="HelpEastAngle">
-		Steuert die Sonnenstellung am Himmel.
-Entspricht dem Azimut.
-	</notification>
-	<notification name="HelpCloudColor">
-		Steuert die Wolkenfarbe. Generell empfiehlt sich hier ein Weißton, aber hey, warum nicht ein bisschen Spaß haben?
-	</notification>
-	<notification name="HelpCloudDetail">
-		Steuert das Detailbild, welches über das Wolken-Hauptbild gelegt wird.  X und Y bestimmen seine Position.  D (Dichte) regelt, wie ausgebeult oder zerrissen die Wolken wirken.
-	</notification>
-	<notification name="HelpCloudDensity">
-		Mit den X- und Y-Reglern steuern Sie die Position der Wolken, mit dem Regler D die Wolkendichte.
-	</notification>
-	<notification name="HelpCloudCoverage">
-		Steuert, wie stark die Wolken den Himmel bedecken.
-	</notification>
-	<notification name="HelpCloudScale">
-		Steuert die Skalierung des Wolkenbilds auf der Himmelskuppel.
-	</notification>
-	<notification name="HelpCloudScrollX">
-		Steuert die Bewegungsgeschwindigkeit der Wolken in X-Richtung.
-	</notification>
-	<notification name="HelpCloudScrollY">
-		Steuert die Bewegungsgeschwindigkeit der Wolken in Y-Richtung.
-	</notification>
-	<notification name="HelpClassicClouds">
-		Aktivieren Sie dieses Kontrollkästchen, um die Darstellung der klassischen [SECOND_LIFE] Wolken zusätzlich zu den WindLight-Wolken zu erzwingen.
-	</notification>
-	<notification name="HelpWaterFogColor">
-		Steuert die Farbe der Wassertrübung
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		Steuert die Dichte der Wassertrübung und wie weit Sie unter Wasser sehen können.
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		Beeinflusst die Auswirkung des Wassertrübungs-Exponenten und regelt die Sichtweite Ihres Avatars unter Wasser.
-	</notification>
-	<notification name="HelpWaterGlow">
-		Steuert, wie groß der Anteil der leuchtenden Wasseroberfläche ist.
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		Steuert die Skalierung der drei Elementarwellen, die das Wasser ausmachen.
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		Steuert die winkelabhängige Lichtreflexion.
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		Steuert die Intensität des reflektierten Lichts.
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		Steuert die Stärke der Lichtbrechung von oberhalb der Wasseroberfläche aus gesehen.
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		Steuert die Stärke der Lichtbrechung von unterhalb der Wasseroberfläche aus gesehen.
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		Steuert die Mischung von Wellen und Reflexionen.
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		Ermöglicht die Auswahl einer Normal-Map zur Berechnung von Reflexionen/Brechungen auf dem Wasser.
-	</notification>
-	<notification name="HelpWaterWave1">
-		Steuert die Bewegungsgeschwindigkeit und -richtung der großen Normal-Map-Version in X- und Y-Richtung.
-	</notification>
-	<notification name="HelpWaterWave2">
-		Steuert die Bewegungsgeschwindigkeit und -richtung der kleinen Normal-Map-Version in X- und Y-Richtung.
-	</notification>
-	<notification name="NewSkyPreset">
-		Wählen Sie einen Namen für den neuen Himmel.
-		<form name="form">
-			<input name="message">
-				Neue Voreinstellung
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		Voreinstellung bereits vorhanden!
-	</notification>
-	<notification name="NewWaterPreset">
-		Wählen Sie einen Namen für die neue Wasservoreinstellung.
-		<form name="form">
-			<input name="message">
-				Neue Voreinstellung
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		Voreinstellung bereits vorhanden!
-	</notification>
-	<notification name="WaterNoEditDefault">
-		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		Ihre Chat-Sitzung mit [NAME] muss beendet werden.
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		Objekte können nicht gekauft werden, solange sie Teil eines Anhangs sind.
-	</notification>
-	<notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails">
-		Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen?
-		<usetemplate ignoretext="Neue Kleidung automatisch tragen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		Um Zugang zu dieser Parzelle zu erhalten, müssen Sie sich einer Altersprüfung unterziehen.
-Möchten Sie auf der [SECOND_LIFE] Website eine Altersüberprüfung durchführen?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=de
-		</url>
-		<usetemplate ignoretext="Auf fehlende Altersprüfung aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		Um Zugang zu dieser Parzelle zu erhalten, müssen Sie Zahlungsinformationen hinterlegt haben.
-Möchten Sie die [SECOND_LIFE] Website öffnen, um diese Angaben zu hinterlegen?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=de
-		</url>
-		<usetemplate ignoretext="Auf fehlende Zahlungsinformationen aufmerksam machen" name="okcancelignore" notext="Nein" yestext="Ja"/>
-	</notification>
-	<notification name="MissingString">
-		Der String „[STRING_NAME]“ fehlt in strings.xml
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		Abgebrochen
-	</notification>
-	<notification name="CancelledSit">
-		Sitzen beendet
-	</notification>
-	<notification name="CancelledAttach">
-		Anhängen abgebrochen
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		Fehlende(s) Kleidung/Körperteil mit Standard ersetzt.
-	</notification>
-	<notification name="GroupNotice">
-		Betreff: [SUBJECT], Nachricht: [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] ist online
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] ist offline
-	</notification>
-	<notification name="AddSelfFriend">
-		Sie können sich nicht selbst als Freund hinzufügen.
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		In-Welt- und Website-Fotos werden hochgeladen...
-(Dauert ca. 5 Minuten.)
-	</notification>
-	<notification name="UploadPayment">
-		Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Das Website-Foto wurde hochgeladen.
-	</notification>
-	<notification name="UploadSnapshotDone">
-		In-Welt-Foto hochgeladen
-	</notification>
-	<notification name="TerrainDownloaded">
-		Terrain.raw heruntergeladen
-	</notification>
-	<notification name="GestureMissing">
-		Geste [NAME] fehlt in Datenbank.
-	</notification>
-	<notification name="UnableToLoadGesture">
-		Geste [NAME] konnte nicht geladen werden.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="LandmarkMissing">
-		Landmarke fehlt in Datenbank.
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		Landmarke konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CapsKeyOn">
-		Die Feststelltaste ist aktiv.
-Da dies Auswirkung auf die Kennworteingabe hat, sollten Sie die Taste besser ausschalten.
-	</notification>
-	<notification name="NotecardMissing">
-		Notizkarte fehlt in Datenbank.
-	</notification>
-	<notification name="NotecardNoPermissions">
-		Unzureichende Rechte zur Anzeige der Notizkarte.
-	</notification>
-	<notification name="RezItemNoPermissions">
-		Keine Berechtigung zum Rezzen von Objekten.
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		Notizkarten-Asset konnte nicht geladen werden.
-	</notification>
-	<notification name="ScriptMissing">
-		Skript fehlt in Datenbank.
-	</notification>
-	<notification name="ScriptNoPermissions">
-		Unzureichende Rechte zur Anzeige des Skripts.
-	</notification>
-	<notification name="UnableToLoadScript">
-		Skript konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="IncompleteInventory">
-		Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		Geschützte Kategorien können nicht geändert werden.
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		Geschützte Kategorien können nicht entfernt werden.
-	</notification>
-	<notification name="OfferedCard">
-		Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		Kauf nicht möglich. Objektdaten werden noch geladen.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		Verknüpfung nicht möglich. Objektdaten werden noch geladen.
-Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
-Wählen Sie ein einzelnes Objekt aus.
-	</notification>
-	<notification name="ObjectNotForSale">
-		Objekt ist nicht zu verkaufen.
-	</notification>
-	<notification name="EnteringGodMode">
-		Gott-Modus aktiviert, Level [LEVEL]
-	</notification>
-	<notification name="LeavingGodMode">
-		Gott-Modus deaktiviert, Level [LEVEL]
-	</notification>
-	<notification name="CopyFailed">
-		Kopieren aufgrund fehlender Kopierrechte fehlgeschlagen
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME] hat Ihr Inventarangebot akzeptiert.
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME] hat Ihr Inventarangebot abgelehnt.
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		Ihre Visitenkarte wurde akzeptiert.
-	</notification>
-	<notification name="CallingCardDeclined">
-		Ihre Visitenkarte wurde abgelehnt.
-	</notification>
-	<notification name="TeleportToLandmark">
-		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen.
-Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen.
-	</notification>
-	<notification name="TeleportToPerson">
-		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen.
-Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein.
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		Land kann nicht über Servergrenzen hinweg ausgewählt werden.
-Wählen Sie eine kleinere Landfläche.
-	</notification>
-	<notification name="SearchWordBanned">
-		Einige Begriffe in Ihrer Suchanfrage wurden ausgeschlossen, aufgrund von in den Community Standards definierten Inhaltsbeschränkungen.
-	</notification>
-	<notification name="NoContentToSearch">
-		Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (PG, Mature oder Adult).
-	</notification>
-	<notification name="GroupVote">
-		[NAME] hat eine Abstimmung vorgeschlagen über:
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="Abstimmen"/>
-			<button name="Later" text="Später"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		Event-Benachrichtigung:
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="Teleportieren"/>
-			<button name="Description" text="Beschreibung"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert.
-
-* Übertragene Bäume und Gräser sind nicht markiert.
-		<form name="form">
-			<button name="Done" text="Fertig"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		Gesten mit demselben Trigger wurden deaktiviert:
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Apple QuickTime ist auf Ihrem System anscheinend nicht installiert.
-Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben.
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
-	</notification>
-	<notification name="OtherObjectsReturned">
-		Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		Die Objekte von [FIRST] [LAST] auf dieser
-Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben.
-	</notification>
-	<notification name="GroupObjectsReturned">
-		Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert.
-Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben.
-Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht.
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben.
-	</notification>
-	<notification name="NotSafe">
-		Auf diesem Land ist Schaden aktiviert („Unsicher“).
-Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert.
-	</notification>
-	<notification name="NoFly">
-		Auf diesem Land ist Fliegen deaktiviert („Fliegen aus“).
-Fliegen ist hier nicht möglich.
-	</notification>
-	<notification name="PushRestricted">
-		Auf diesem Land gilt „Kein Stoßen“.
-Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
-	</notification>
-	<notification name="NoVoice">
-		Auf diesem Land ist Voice deaktiviert.
-	</notification>
-	<notification name="NoBuild">
-		Auf diesem Land ist Bauen deaktiviert („Bauen aus“).
-Sie können hier keine Objekte erstellen.
-	</notification>
-	<notification name="ScriptsStopped">
-		Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
-	</notification>
-	<notification name="ScriptsNotRunning">
-		In dieser Region werden keine Skipts ausgeführt.
-	</notification>
-	<notification name="NoOutsideScripts">
-		Auf diesem Land sind externe Skripts deaktiviert
-(„Externe Skripts aus“).
-Nur Skripts, die dem Landeigentümer gehören, funktionieren.
-	</notification>
-	<notification name="ClaimPublicLand">
-		Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
-
-Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
-	</notification>
-	<notification name="URBannedFromRegion">
-		Sie dürfen diese Region nicht betreten.
-	</notification>
-	<notification name="NoTeenGridAccess">
-		Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen.
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Sie können nicht zurück nach Help Island teleportieren. 
-Gehen Sie zu „Help Island Public“ und wiederholen sie das Tutorial.
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
-	</notification>
-	<notification name="MustGetAgeRegion">
-		Sie müssen alterüberprüft sein, um diese Region betreten zu können.
-	</notification>
-	<notification name="MustGetAgeParcel">
-		Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
-	</notification>
-	<notification name="NoDestRegion">
-		Keine Zielregion gefunden.
-	</notification>
-	<notification name="NotAllowedInDest">
-		Der Zutritt wurde Ihnen verweigert.
-	</notification>
-	<notification name="RegionParcelBan">
-		Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg.
-	</notification>
-	<notification name="TelehubRedirect">
-		Sie wurden zu einem Telehub umgeleitet.
-	</notification>
-	<notification name="CouldntTPCloser">
-		Ein Teleport näher am Ziel ist leider nicht möglich.
-	</notification>
-	<notification name="TPCancelled">
-		Teleport abgebrochen.
-	</notification>
-	<notification name="FullRegionTryAgain">
-		Die Region, die Sie betreten möchten, ist im Moment voll.
-Versuchen Sie es in einigen Minuten erneut.
-	</notification>
-	<notification name="GeneralFailure">
-		Allgemeiner Fehler.
-	</notification>
-	<notification name="RoutedWrongRegion">
-		In falsche Region umgeleitet.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="NoValidAgentID">
-		Keine gültige Agent ID.
-	</notification>
-	<notification name="NoValidSession">
-		Keine gültige Sitzungs-ID.
-	</notification>
-	<notification name="NoValidCircuit">
-		Kein gültiger Verbindungscode.
-	</notification>
-	<notification name="NoValidTimestamp">
-		Kein gültiger Zeitstempel.
-	</notification>
-	<notification name="NoPendingConnection">
-		Verbindung kann nicht hergestellt werden.
-	</notification>
-	<notification name="InternalUsherError">
-		Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen.
-	</notification>
-	<notification name="NoGoodTPDestination">
-		In dieser Region konnte kein gültiges Teleportziel gefunden werden.
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		Interner Fehler bei Teleport.
-	</notification>
-	<notification name="NoValidLanding">
-		Ein gültiger Landpunkt konnte nicht gefunden werden.
-	</notification>
-	<notification name="NoValidParcel">
-		Es konnte keine gültige Parzelle gefunden werden.
-	</notification>
-	<notification name="ObjectGiveItem">
-		Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben.
-		<form name="form">
-			<button name="Keep" text="Behalten"/>
-			<button name="Discard" text="Verwerfen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="Beitreten"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Info" text="Info"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren:
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="Teleportieren"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="Später"/>
-			<button name="GoNow..." text="Jetzt gehen..."/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME] bietet Ihnen die Freundschaft an.
-
-[MESSAGE]
-
-(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME] bietet Ihnen die Freundschaft an.
-
-(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME] hat Ihr Freundschaftsangebot akzeptiert.
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME] hat Ihr Freundschaftsangebot abgelehnt.
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
-Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		Region wird in [MINUTES] Minuten neu gestartet.
-Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
-	</notification>
-	<notification name="RegionRestartSeconds">
-		Region wird in [SECONDS] Sekunden neu gestartet.
-Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
-	</notification>
-	<notification name="LoadWebPage">
-		Webseite [URL] laden?
-
-[MESSAGE]
-
-Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
-		<form name="form">
-			<button name="Gotopage" text="Zur Seite"/>
-			<button name="Cancel" text="Abbrechen"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		[TYPE] nicht in Datenbank.
-	</notification>
-	<notification name="FailedToFindWearable">
-		[TYPE] namens [DESC] nicht in Datenbank.
-	</notification>
-	<notification name="InvalidWearable">
-		Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können.
-	</notification>
-	<notification name="ScriptQuestion">
-		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
-
-[QUESTIONS]
-Ist das OK?
-		<form name="form">
-			<button name="Yes" text="Ja"/>
-			<button name="No" text="Nein"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
-
-[QUESTIONS]
-Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen. Klicken Sie für weitere Informationen auf „Info...“.
-
-Anfrage gestatten?
-		<form name="form">
-			<button name="Grant" text="Gewähren"/>
-			<button name="Deny" text="Verweigern"/>
-			<button name="Details" text="Info..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		[FIRST] [LAST]s „[TITLE]“
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorieren"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		[GROUPNAME]s „[TITLE]“
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorieren"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		Sie haben gerade [AMOUNT] L$ erhalten.
-Objekte und andere Benutzer können Ihnen L$ geben.
-Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		Sie haben gerade [AMOUNT] L$ bezahlt.
-Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
-	</notification>
-	<notification name="FirstSit">
-		Sie sitzen.
-Benutzen Sie die Pfeil- oder WASD-Tasten, um die Ansicht zu ändern.
-Klicken Sie auf „Aufstehen“, um aufzustehen.
-	</notification>
-	<notification name="FirstMap">
-		Zum Verschieben der Karte klicken und ziehen.
-Zum Teleportieren doppelklicken.
-Nutzen Sie die Optionen links, um Dinge zu finden und um verschiedene Hintergründe anzuzeigen.
-	</notification>
-	<notification name="FirstBuild">
-		In einigen Bereichen von [SECOND_LIFE] können Sie neue Objekte erstellen.
-Verwenden Sie zum Bauen die Werkzeuge oben links.
-Mit den Strg- und Alt-Tasten können Sie schnell zwischen den Werkzeugen umschalten.
-Drücken Sie Esc, um das Bauen abzubrechen.
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		Die linke Maustaste ermöglicht Objektinteraktionen.
-Der Mauszeiger zeigt eine Hand, wenn Sie
-mit dem Objekt interagieren können.
-Die rechte Maustaste zeigt immer ein Aktionsmenü an.
-	</notification>
-	<notification name="FirstTeleport">
-		Diese Region unterstützt keine direkten Teleports. Sie wurden zum nächstgelegenen Telehub transportiert.
-Ihr Ziel ist mit einem großen roten Strahl markiert. Folgen Sie dem roten Pfeil zum Strahl oder klicken Sie auf den Pfeil, um den Strahl zu entfernen.
-	</notification>
-	<notification name="FirstOverrideKeys">
-		Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert.
-Probieren Sie die Pfeil- oder WASD-Tasten aus.
-Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden.
-Drücken Sie dazu „M“.
-	</notification>
-	<notification name="FirstAppearance">
-		Sie bearbeiten gerade Ihr Aussehen.
-Benutzen Sie die Pfeiltasten zum Drehen und Zoomen.
-Klicken Sie auf „Alles speichern“, wenn Sie fertig sind, um Ihr Aussehen zu speichern.
-Sie können Ihr Aussehen jederzeit verändern.
-	</notification>
-	<notification name="FirstInventory">
-		Ihr Inventar. Es enthält Objekte, Notizkarten, Kleidung und andere Dinge in Ihrem Besitz.
-* Zum Anziehen eines Objekts oder Outfit-Ordners ziehen Sie es/ihn auf sich.
-* Um ein Objekt in der Welt abzulegen, ziehen Sie es auf den Boden.
-* Zum Lesen einer Notizkarte klicken Sie sie doppelt an.
-	</notification>
-	<notification name="FirstSandbox">
-		Dies ist eine Sandkastenregion.
-Objekte, die Sie hier bauen, können gelöscht werden, wenn Sie das Gebiet verlassen. Sandkästen werden regelmäßig gereinigt. Weitere Informationen hierzu finden Sie oben im Bild neben dem Regionsnamen.
-
-Sandkastenregionen kommen selten vor und sind entsprechend gekennzeichnet.
-	</notification>
-	<notification name="FirstFlexible">
-		Dieses Objekt ist flexibel.
-Ein flexibles Objekt ist ein Phantom und nicht physisch, bis die Option „Flexibel“ deaktiviert wurde.
-	</notification>
-	<notification name="FirstDebugMenus">
-		Sie haben das Advanced-Menü aktiviert.
-Dieses Menü enthält nützliche Funktionen zum Debuggen von [SECOND_LIFE].
-Drücken Sie in Windows Strg+Alt+D (Mac: &#8997;&#8984;D) zum Ein- und Ausschalten dieses Menüs.
-	</notification>
-	<notification name="FirstSculptedPrim">
-		Sie bearbeiten ein geformtes Primitiv.
-Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert.
-Beispiele für Formtexturen finden Sie in der Inventarbibliothek.
-	</notification>
-	<notification name="FirstMedia">
-		Sie haben die Medienwiedergabe gestartet.  Unter „Audio und Video“ im Fenster „Einstellungen“ können Sie festlegen, dass Medien automatisch wiedergegeben werden. Beachten Sie, dass dies bei nicht vertrauenswürdigen Medienseiten ein Sicherheitsrisiko darstellen kann.
-	</notification>
-	<notification name="MaxListSelectMessage">
-		Sie können maximal [MAX_SELECT] Objekte
-von der Liste auswählen.
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME] lädt Sie zu einem Voice-Chat ein.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben.
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME] ist einem Voice-Konferenz-Chat beigetreten.
-Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME] lädt Sie zu einem Konferenz-Chat ein.
-Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
-		<form name="form">
-			<button name="Accept" text="Akzeptieren"/>
-			<button name="Decline" text="Ablehnen"/>
-			<button name="Mute" text="Stummschalten"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		Es tut uns Leid.  Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht.  Bitte versuchen Sie es in einem anderen Gebiet.
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		Sie haben [VOICE_CHANNEL_NAME] verlassen.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME] hat das Gespräch beendet.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
-	</notification>
-	<notification name="VoiceLoginRetry">
-		Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		Zugang zur Parzelle verweigert, Sie gehören keiner berechtigten Gruppe an.
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		Zugang zur Parzelle verweigert. Sie wurden verbannt.
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste.
-	</notification>
-	<notification name="VoiceNotAllowed">
-		Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten.
-	</notification>
-	<notification name="VoiceCallGenericError">
-		Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen.  Bitte versuchen Sie es erneut.
-	</notification>
-	<notification name="ServerVersionChanged">
-		Die Region, die Sie betreten haben, verwendet eine andere Simulatorversion. Klicken Sie auf diese Nachricht, um weitere Informationen zu erhalten.
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		Die URL, die Sie angeklickt haben, kann in diesem Web Browser nicht geöffnet werden.
-	</notification>
-	<global name="UnsupportedCPU">
-		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="UnsupportedGLRequirements">
-		Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
-
-Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- Ihre Grafikkarte entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="UnsupportedRAM">
-		- Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen.
-	</global>
-	<global name="PermYes">
-		Ja
-	</global>
-	<global name="PermNo">
-		Nein
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		Nicht mehr anzeigen
+	</global>
+	<global name="alwayschoose">
+		Diese Option immer auswählen
+	</global>
+	<global name="implicitclosebutton">
+		Schließen
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="Unbekannter Warnhinweis" name="MissingAlert">
+		Ihre Version von [APP_NAME] kann den gerade empfangenen Warnhinweis nicht anzeigen.  Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben.
+
+Fehlerdetails: Der Warnhinweis &apos;[_NAME]&apos; wurde in notifications.xml nicht gefunden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		Floater-Fehler: Folgende Steuerelemente wurden nicht gefunden:
+
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		Derzeit ist kein Tutorial verfügbar.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="BadInstallation">
+		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten.  Bitte laden Sie die aktuellste Version des Viewers herunter. http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		Eine Verbindung zum [SECOND_LIFE_GRID] konnte nicht hergestellt werden.
+ &apos;[DIAGNOSTIC]&apos;
+Bitte vergewissern Sie sich, dass Ihre Internetverbindung funktioniert.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		Meldungsvorlage [PATH] nicht gefunden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		Änderung an aktueller Kleidung/Körperteil speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="WriteAnimationFail">
+		Fehler beim Schreiben von Animationsdaten.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		Eine Auktions-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		Es kann nur jeweils der Inhalt von einem Objekt angezeigt werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		Änderung an Kleidung/Körperteilen speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Alles speichern"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern oder an sich zu nehmen, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		Die Gewährung von Änderungsrechten an andere Einwohner ermöglicht es diesen, JEDES BELIEBIGE Objekt zu ändern, das Sie in der [SECOND_LIFE]-Welt besitzen. Seien Sie SEHR vorsichtig beim Erteilen dieser Erlaubnis.
+Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		Möchten Sie den ausgewählten Einwohnern die Änderungsrechte entziehen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		Gruppe konnte nicht erstellt werden.
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Änderungen verwerfen" yestext="Änderungen übernehmen"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		Geben Sie einen Betreff für die Gruppenmitteilung ein.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		Sie sind im Begriff, Gruppenmitgliedern die Rolle [ROLE_NAME] zuzuweisen.
+Diese Rolle kann Mitgliedern nicht mehr entzogen werden.
+Sie müssen die Rolle selbst niederlegen.
+Möchten Sie fortfahren?
+		<usetemplate ignoretext="Bestätigen, bevor ich einen neuen Gruppeneigentümer hinzufüge" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – Rollen zuweisen, die mehr Rechte
+ beinhalten als sie derzeit haben, und damit nahezu
+ Eigentümerrechte erreichen. Überlegen Sie sich, wem Sie diese Fähigkeit
+ verleihen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen.
+
+ *ACHTUNG*
+ Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
+ und allen anderen Mitgliedern – alle Fähigkeiten zuweisen und
+ damit fast Eigentümerrechte erreichen.
+
+Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Fortfahren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Beitreten"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		Der Beitritt zu dieser Gruppe kostet [COST] L$.
+Sie haben nicht genug L$, um dieser Gruppe beizutreten.
+	</notification>
+	<notification name="CreateGroupCost">
+		Die Gründung dieser Gruppe kostet 100 L$.
+Gruppen müssen mehr als ein Mitglied haben oder sie werden gelöscht.
+Bitte laden Sie innerhalb von 48 Stunden Mitglieder in Ihre Gruppe ein.
+		<usetemplate canceltext="Abbrechen" name="okcancelbuttons" notext="Abbrechen" yestext="Gruppe für 100 L$ erstellen"/>
+	</notification>
+	<notification name="LandBuyPass">
+		Sie können dieses Land („[PARCEL_NAME]“) für [COST] L$
+[TIME] Stunden lang betreten.  Pass kaufen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		Der Verkaufspreis muss beim allgemeinen Verkauf über 0 L$ liegen.
+Wählen Sie eine bestimmte Person aus, wenn Sie für 0 L$ verkaufen.
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		ACHTUNG: Wenn Sie auf „An jeden verkaufen“ klicken, kann jeder in [SECOND_LIFE] Ihr Land kaufen, auch Einwohner in anderen Regionen.
+
+Die ausgewählten [LAND_SIZE] qm Land werden zum Verkauf freigegeben.
+Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf an [NAME] autorisiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe „[NAME]“ gehören, zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner „[NAME]“ gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT Ihnen gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		Möchten Sie alle Objekte auf dieser Parzelle, die NICHT [NAME] gehören, in das Inventar ihrer Eigentümer transferieren?
+Transferierbare Objekte, die an eine Gruppe übertragen wurden, werden ihren vorherigen Eigentümern zurückgegeben.
+
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		Möchten Sie alle aufgeführten Objekte ihren Eigentümern zurückgeben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		Möchten Sie alle Objekte in dieser Region deaktivieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
+
+Objekte: [N]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		Skriptdeaktivierung nicht möglich.
+Für die gesamte Region ist Schaden aktiviert.
+Damit Waffen funktionieren, müssen Skripts erlaubt sein.
+	</notification>
+	<notification name="MustBeInParcel">
+		Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
+	</notification>
+	<notification name="PromptRecipientEmail">
+		Bitte geben Sie für den/die Empfänger eine gültige Email-Adresse ein.
+	</notification>
+	<notification name="PromptSelfEmail">
+		Geben Sie Ihre E-Mail-Adresse ein.
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		Fehler beim Verarbeiten der Fotodaten
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		Fehler beim Erstellen des Fotos!
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		Ein Report-Screenshot konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		Bevor Sie sich in [SECOND_LIFE] anmelden können, müssen Sie den Nutzungsbedingungen zustimmen.
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		Outfit konnte nicht angezogen werden.
+Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
+	</notification>
+	<notification name="CannotWearTrash">
+		Kleider oder Körperteile im Papierkorb können nicht getragen werden
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		Hoppla! Da fehlt noch etwas.
+Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
+
+Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
+		<url name="url">
+			https://join.secondlife.com/index.php?lang=de-DE
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
+	</notification>
+	<notification name="AddClassified">
+		Anzeigen erscheinen für eine Woche unter „Anzeigen“ im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf „Veröffentlichen...“, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf „Veröffentlichen“ klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
+		<usetemplate ignoretext="So wird eine neue Anzeige erstellt" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		Anzeige „[NAME]“ löschen?
+Gebühren werden nicht rückerstattet.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		Änderung an Anzeige [NAME] speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		Auswahl [PICK] löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		Zur [SECOND_LIFE] Events-Webseite?
+		<url name="url">
+			http://de.secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		Wählen Sie ein Angebot zur Ansicht.
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		Wählen Sie ein Element zur Ansicht.
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		Möchten Sie alle Popups wieder aktivieren, die Sie zuvor auf „Nicht mehr anzeigen“ gesetzt haben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		Möchten Sie alle Popups, die übersprungen werden können, deaktivieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		Der Cache wird nach einem Neustart von [APP_NAME] geleert.
+	</notification>
+	<notification name="CacheWillBeMoved">
+		Der Cache wird nach einem Neustart von [APP_NAME] verschoben.
+Hinweis: Der Cache wird dabei gelöscht/geleert.
+	</notification>
+	<notification name="ChangeConnectionPort">
+		Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
+	</notification>
+	<notification name="ChangeSkin">
+		Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angewendet.
+	</notification>
+	<notification name="GoToAuctionPage">
+		Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder ein Gebot abzugeben?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		Änderungen speichern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nicht speichern" yestext="Speichern"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		Speichern der Geste fehlgeschlagen.
+Die Geste besteht aus zu vielen Schritten.
+Löschen Sie einige Schritte und versuchen Sie es erneut.
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		Speichern der Geste fehlgeschlagen.  Warten Sie kurz und versuchen Sie es dann noch einmal.
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		Geste konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		Eine Geste konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Geste bitte später.
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		Notizkarte konnte nicht gespeichert werden, da das Objekt oder das zugehörige Objektinventar nicht gefunden wurden.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		Eine Notizkarte konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie die Notizkarte bitte später.
+	</notification>
+	<notification name="ScriptCannotUndo">
+		Es konnten nicht alle Änderungen in Ihrer Skriptversion rückgängig gemacht werden.
+Möchten Sie die letzte gespeicherte Version vom Server laden?
+(**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.)
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON].  Speichern Sie das Skript bitte später.
+	</notification>
+	<notification name="StartRegionEmpty">
+		Sie haben keine Start-Region festgelegt. 
+Bitte geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Heimatort“ als Startposition aus.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		Skript konnte nicht gestartet oder beendet werden, weil das zugehörige Objekt nicht gefunden wurde.
+Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht.
+	</notification>
+	<notification name="CannotDownloadFile">
+		Dateidownload nicht möglich
+	</notification>
+	<notification name="CannotWriteFile">
+		Datei [[FILE]] kann nicht geschrieben werden
+	</notification>
+	<notification name="UnsupportedHardware">
+		Achtung: Ihr System erfüllt nicht die Mindestanforderungen von [APP_NAME]. Dies kann eine schlechte Darstellungsleistung in [APP_NAME] zur Folge haben. Bei nicht unterstützten Systemkonfigurationen kann Ihnen unsere [SUPPORT_SITE] leider nicht helfen.
+
+MINDESTANF.
+Die Seite [_URL] für weitere Informationen öffnen?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=de
+		</url>
+		<usetemplate ignoretext="Meine Hardware wird nicht unterstützt" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="UnknownGPU">
+		Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.
+Dies passiert dann, wenn die neue Hardware noch nicht mit [APP_NAME] getestet wurde.  [APP_NAME] wird wahrscheinlich korrekt ausgeführt werden, jedoch sollten Sie Ihre Grafikeinstellungen anpassen, um eine bessere Darstellung zu erzielen.
+(Einstellungen &gt; Grafik).
+		<form name="form">
+			<ignore name="ignore" text="Meine Grafikkarte konnte nicht identifiziert werden."/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] ist bei der Initialisierung der Grafiktreiber abgestürzt.
+Die Grafikqualität wird auf eine niedrige Stufe zurückgesetzt, um einige typische Treiberfehler zu vermeiden.
+Einige Grafikfunktionen werden ausgeschaltet.
+Wir empfehlen die Aktualisierung Ihrer Grafikkartentreiber.
+Sie können die Grafikqualität unter „Einstellungen“ &gt; „Grafik“ wieder erhöhen.
+	</notification>
+	<notification name="RegionNoTerraforming">
+		Die Region [REGION] erlaubt kein Terraforming.
+	</notification>
+	<notification name="CannotCopyWarning">
+		Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		Inventarobjekt kann nicht übergeben werden.
+	</notification>
+	<notification name="TransactionCancelled">
+		Transaktion abgebrochen.
+	</notification>
+	<notification name="TooManyItems">
+		Es können maximal 42 Objekte auf einmal in das Inventar transferiert werden.
+	</notification>
+	<notification name="NoItems">
+		Sie sind nicht berechtigt, die ausgewählten Objekte zu kopieren.
+	</notification>
+	<notification name="CannotCopyCountItems">
+		Sie sind nicht berechtigt, [COUNT] der ausgewählten Objekte zu kopieren. Diese Objekte werden aus Ihrem Inventar gelöscht.
+Möchten Sie diese Objekte weggeben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
+	</notification>
+	<notification name="FreezeAvatar">
+		Diesen Avatar einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		[AVATAR_NAME] einfrieren?
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Auftauen" yestext="Einfrieren"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		[AVATAR_NAME] von Ihrem Land werfen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Ausschließen und Verbannen" yestext="Ausschließen"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		Diesen Avatar aus Ihrem Land werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		[AVATAR_NAME] aus Ihrem Land werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hinauswerfen"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		FEHLER: Zu viele Objekte ausgewählt.
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		FEHLER: Die Objekte überspannen mehrere Regionen.
+Verschieben Sie alle betreffenden Objekte in dieselbe Region.
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+[_URL] für Informationen zum Kauf von L$ öffnen?
+		<url name="url">
+			http://de.secondlife.com/app/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		Verknüpfung dieser [COUNT] Objekte nicht möglich.
+Sie können maximal [MAX] Objekte verknüpfen.
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
+	</notification>
+	<notification name="CannotLinkModify">
+		Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten dürfen.
+
+Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehören.
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben.
+
+Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
+	</notification>
+	<notification name="NoFileExtension">
+		Kein Dateityp für Datei: „[FILE]“
+
+Vergewissern Sie sich, dass die Datei den richtigen Dateityp hat.
+	</notification>
+	<notification name="InvalidFileExtension">
+		Ungültige Datei-Endung [EXTENSION]
+Erwartet wurde [VALIDS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		Sounddatei konnte nicht hochgeladen werden:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		Die Datei ist anscheinend keine RIFF WAVE-Datei:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		Die Datei ist anscheinend keine PCM WAVE-Audiodatei:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		Die Datei hat eine ungültige Anzahl Tonkanäle (muss Mono oder Stereo sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		Die Sample-Rate dieser Datei wird nicht unterstützt (muss 44,1 K sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		Die Word-Größe dieser Datei wird nicht unterstützt (muss 8 oder 16 Bit sein):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		„Daten“-Chunk in WAV-Header nicht gefunden:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		Audiodatei ist zu lang (max. 10 Sekunden):
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		Problem mit Datei [FILE]:
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		Temporäre komprimierte Sounddatei konnte nicht geöffnet werden: [FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		Unbekannter Vorbis-Kodierungsfehler in: [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		Datei konnte nicht kodiert werden: [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		Ressourcendatei beschädigt: [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		Unbekannte Linden-Ressourcenversion in Datei: [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		Ausgabedatei konnte nicht erstellt werden: [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		Der Mehrfach-Upload von Animationsdateien wird zurzeit von [APP_NAME] nicht unterstützt.
+	</notification>
+	<notification name="CannotUploadReason">
+		Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="LandmarkCreated">
+		„[LANDMARK_NAME]“ wurde zum Ordner „[FOLDER_NAME]“ hinzugefügt.
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		„Rekompilieren“ nicht möglich.
+Objekt mit Skript wählen.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		„Rekompilieren“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		„Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		„Zurücksetzen“ nicht möglich.
+
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		„Ausführen“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		„Deaktivieren“ von Skripts nicht möglich.
+
+Wählen Sie Objekte mit Skripts.
+	</notification>
+	<notification name="NoFrontmostFloater">
+		Kein vorderster Floater zum Speichern.
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		Ihre Suchanfrage wurde geändert.
+Zu kurze Begriffe wurden entfernt.
+
+Ihre Suchanfrage: [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		Ihre Suchbegriffe sind zu kurz.
+Es wurde keine Suche durchgeführt.
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		Teleport fehlgeschlagen.
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</notification>
+	<notification name="invalid_region_handoff">
+		Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</notification>
+	<notification name="blocked_tport">
+		Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+	</notification>
+	<notification name="nolandmark_tport">
+		Das System konnte das Landmarken-Ziel nicht finden.
+	</notification>
+	<notification name="timeout_tport">
+		Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+	</notification>
+	<notification name="noaccess_tport">
+		Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+	</notification>
+	<notification name="missing_attach_tport">
+		Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+	</notification>
+	<notification name="too_many_uploads_tport">
+		Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+	</notification>
+	<notification name="expired_tport">
+		Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="expired_region_handoff">
+		Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="no_host">
+		Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="no_inventory_host">
+		Das Inventarsystem ist zurzeit nicht verfügbar.
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		Landeigentümer kann nicht festgelegt werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		Eine erzwungene Landübertragung ist nicht möglich, da die Auswahl mehrere Regionen umfasst. Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		Diese Parzelle steht zur Auktion. Eine zwangsweise Eigentumsübertragung beendet die Auktion und verärgert womöglich Einwohner, die bereits ein Gebot abgegeben haben. Eigentumsübertragung erzwingen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		Inhaltsidentifizierung nicht möglich:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		Inhaltsidentifizierung nicht möglich:
+Keine Region ausgewählt.
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		Land kann nicht aufgegeben werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		Land kann nicht aufgegeben werden:
+Region nicht gefunden.
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		Land kann nicht gekauft werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		Land kann nicht gekauft werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		Das Fenster „Land kaufen“ kann erst geschlossen werden, nachdem [APP_NAME] den Transaktionspreis geschätzt hat.
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		Land kann nicht übertragen werden:
+Keine Parzelle ausgewählt.
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		Land kann nicht übertragen werden:
+Keine Gruppe ausgewählt.
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		Land kann nicht übertragen werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		Land kann nicht übertragen werden:
+Mehrere Parzellen ausgewählt.
+
+Wählen Sie eine einzelne Parzelle.
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		Dieser Ort kann Streaming-Medien abspielen.
+Streaming-Medien erfordern eine schnelle Internet-Verbindung.
+
+Streaming-Medien abspielen, wenn verfügbar?
+(Sie können diese Option später unter „Einstellungen“ &gt; „Audio &amp; Video“ ändern.)
+		<usetemplate name="okcancelbuttons" notext="Deaktivieren" yestext="Medien wiedergeben"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		Land kann nicht übertragen werden:
+Warte auf Server für Eigentümerinformationen.
+
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		Land kann nicht übertragen werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		Land kann nicht aufgegeben werden:
+Server muss Parzelleninformation aktualisieren.
+
+Versuchen Sie es in einigen Sekunden erneut.
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		Land kann nicht aufgegeben werden:
+Die ausgewählten Parzellen gehören Ihnen nicht.
+
+Wählen Sie eine einzelne Parzelle.
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		Land kann nicht aufgegeben werden:
+Ihnen fehlt die Berechtigung zur Freigabe dieser Parzelle.
+Parzellen, die Ihnen gehören, werden grün dargestellt.
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		Land kann nicht aufgegeben werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		Land kann nicht aufgegeben werden:
+Die Region [REGION] erlaubt keine Landübertragung.
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		Land kann nicht aufgegeben werden:
+Zum Freigeben müssen Sie eine ganze Parzelle auswählen.
+
+Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
+	</notification>
+	<notification name="ReleaseLandWarning">
+		Sie sind im Begriff, [AREA] qm Land aufzugeben.
+Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
+
+Dieses Land aufgeben?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		Land kann nicht aufgeteilt werden:
+
+Keine Parzellen ausgewählt.
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		Land kann nicht aufgeteilt werden:
+
+Sie haben eine ganze Parzelle ausgewählt.
+Wählen Sie einen Parzellenabschnitt aus.
+	</notification>
+	<notification name="LandDivideWarning">
+		Wenn Sie dieses Land teilen, wird diese Parzelle in zwei geteilt, jede mit ihren eigenen Einstellungen. Einige dieser Einstellungen werden aufgrund dieses Vorgangs zurückgesetzt.
+
+Land teilen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		Land kann nicht aufgeteilt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		Land kann nicht zusammengelegt werden:
+Kann die Region nicht finden, in der sich dieses Land befindet.
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		Land kann nicht zusammengelegt werden:
+Keine Parzellen ausgewählt.
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		Land kann nicht zusammengelegt werden:
+Sie haben nur eine Parzelle ausgewählt.
+
+Wählen Sie Land auf beiden Parzellen aus.
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		Land kann nicht zusammengelegt werden:
+Sie müssen mehrere Parzellen auswählen.
+
+Wählen Sie Land auf beiden Parzellen aus.
+	</notification>
+	<notification name="JoinLandWarning">
+		Beim Zusammenlegen entsteht aus den vom Auswahlrechteck
+erfassten Parzellen eine große Parzelle.
+Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
+
+Land zusammenlegen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		Um das Objekt kopieren oder anzeigen zu können, müssen Sie zuerst diese Notizkarte speichern. Notizkarte speichern?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		Dieses Objekt in Ihr Inventar kopieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Kopieren"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		Auflösung konnte nicht auf [RESX] x [RESY] gesetzt werden
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		Fehler: Nicht definierte Gräser: [SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		Fehler: Nicht definierte Bäume: [SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		„[NAME]“ konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		[NAME] kann nicht in Zentral-Asset-Speicher geladen werden.
+Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut.
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		Sie wurden von [SECOND_LIFE] abgemeldet:
+            [MESSAGE]
+Klicken Sie auf „IM &amp; Chat anzeigen“, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf „Beenden“, um [APP_NAME] sofort zu beenden.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="IM &amp; Chat anzeigen"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		Landkauf für Gruppe nicht möglich:
+Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
+	</notification>
+	<notification label="Freund hinzufügen" name="AddFriend">
+		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+
+[NAME] Freundschaft anbieten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Freund hinzufügen" name="AddFriendWithMessage">
+		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+
+[NAME] Freundschaft anbieten?
+		<form name="form">
+			<input name="message">
+				Wollen wir Freunde sein?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		Möchten Sie mehrere Freunde aus Ihrer Freundesliste entfernen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		Möchten Sie alle geskripteten Objekte von
+** [AVATAR_NAME] **
+auf allen anderen Ländern in diesem Sim löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		Möchten Sie ALLE geskripteten Objekte von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		Möchten Sie ALLE Objekte (einschließlich geskriptete) von
+** [AVATAR_NAME] **
+auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		Geben Sie einen Namen für die Anzeige ein.
+	</notification>
+	<notification name="MinClassifiedPrice">
+		Der Mindestbetrag für die Listung ist [MIN_PRICE] L$.
+
+Geben sie einen höheren Betrag ein.
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		Mindestens ein ausgewähltes Objekt ist gesperrt.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		Mindestens ein ausgewähltes Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		Mindestens eines der ausgewählten Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Mindestens ein Objekt kann nicht kopiert werden.
+Mindestens ein Objekt gehört nicht Ihnen.
+
+Möchten Sie diese Objekte löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		Mindestens ein Objekt ist gesperrt.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer angewandt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		Mindestens ein Objekt ist gesperrt.
+Nicht alle Objekte, die Sie aufgenommen haben, gehören Ihnen.
+Wenn Sie fortfahren, werden die Rechte für den nächsten Eigentümer abgefragt und Sie können die Objekte möglicherweise nicht bearbeiten oder kopieren.
+Die aktuelle Auswahl können Sie jedoch aufnehmen.
+
+Möchten Sie diese Objekte nehmen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		Landkauf nicht möglich, da die Auswahl mehrere Regionen umfasst.
+
+Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
+	</notification>
+	<notification name="DeedLandToGroup">
+		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
+Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
+
+Der Gruppe „[GROUP_NAME]“
+ [AREA] m² Land schenken?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		Ihr gewünschter Zielort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+	</notification>
+	<notification name="AvatarMovedLast">
+		Ihr letzter Standort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+	</notification>
+	<notification name="AvatarMovedHome">
+		Ihr Heimatort ist zurzeit nicht verfügbar.
+Sie wurden zur nächstgelegenen Region teleportiert.
+Sie müssen eventuell einen neuen Heimatort festlegen.
+	</notification>
+	<notification name="ClothingLoading">
+		Ihre Kleidung wird noch heruntergeladen.
+Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt dargestellt sehen.
+		<form name="form">
+			<ignore name="ignore" text="Das Herunterladen der Kleidung dauert lange"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		Die Installation von [APP_NAME] ist abgeschlossen.
+
+Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen, bevor Sie sich anmelden können.
+Möchten Sie auf www.secondlife.com ein Konto erstellen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Neues Konto..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		Es gibt Probleme mit der Verbindung. Möglicherweise besteht ein Problem mit Ihrer Internetverbindung oder dem [SECOND_LIFE_GRID].
+
+Überprüfen Sie Ihre Internetverbindung und versuchen Sie es dann erneut, oder klicken Sie auf Hilfe, um zu [SUPPORT_SITE] zu gelangen, oder klicken Sie auf Teleportieren, um nach Hause zu teleportieren.
+		<url name="url">
+			http://de.secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="Hilfe"/>
+			<button name="Teleport" text="Teleportieren"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		Ihr Avatar erscheint jeden Moment.
+
+Benutzen Sie die Pfeiltasten, um sich fortzubewegen.
+Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
+Bitte wählen Sie einen männlichen oder weiblichen Avatar.
+Sie können sich später noch umentscheiden.
+		<usetemplate name="okcancelbuttons" notext="Weiblich" yestext="Männlich"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] [PRICE] L$  Sie haben nicht genügend L$, um diese Aktion auszuführen.
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] hat Ihnen die Erlaubnis erteilt, ihre/seine Objekte zu bearbeiten.
+	</notification>
+	<notification name="RevokedModifyRights">
+		Ihnen wurden die Änderungsrechte für die Objekte von [FIRST_NAME] [LAST_NAME] entzogen.
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		Der Kartencache dieser Region wird geleert.
+Diese Aktion ist nur beim Debugging sinnvoll.
+(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		Sie können jeweils nur ein Objekt kaufen.  Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		Es kann nur jeweils der Inhalt von einem Objekt kopiert werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		Alle Einwohner in dieser Region nach Hause teleportieren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] hat eine ungültige Bit-Tiefe [TEXTURE_BIT_DEPTH].
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+	</notification>
+	<notification name="InvalidTerrainSize">
+		Die Regionstexturen konnten nicht festgelegt werden:
+Die Terraintextur [TEXTURE_NUM] ist mit [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y] zu groß.
+
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf „Übernehmen“.
+	</notification>
+	<notification name="RawUploadStarted">
+		Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt.
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufügen:
+Ãœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS].
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		Es sind maximal [MAX_GROUPS] zulässige Gruppen erlaubt.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Formen"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		Es sind maximal [MAX_MANAGER]  verbannte Einwohner erlaub.
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden.
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind.
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
+	</notification>
+	<notification name="CantSetBuyObject">
+		„Objekt kaufen“ nicht möglich, da das Objekt nicht zum Verkauf freigegeben ist.
+Geben Sie das Objekt zum Verkauf frei und versuchen Sie es erneut.
+	</notification>
+	<notification name="FinishedRawDownload">
+		Raw-Terrain-Datei wurde heruntergeladen nach:
+[DOWNLOAD_PATH].
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadWindows">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		Eine neue Version von [SUPPORT_SITE] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinux">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		Eine neue Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Sie müssen das Update herunterladen, um [APP_NAME] weiter verwenden zu können.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Beenden" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMac">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		Eine aktualisierte Version von [APP_NAME] ist verfügbar.
+[MESSAGE]
+Dieses Update ist nicht erforderlich, für bessere Leistung und Stabilität sollte es jedoch installiert werden.
+
+In Ihren Anwendungsordner herunterladen?
+		<usetemplate name="okcancelbuttons" notext="Weiter" yestext="Herunterladen"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		Bei Übertragung dieses Objekts erhält die Gruppe:
+* An das Objekt bezahlte L$
+		<usetemplate ignoretext="Bestätigen, bevor ich ein Objekt an eine Gruppe übertrage" name="okcancelignore" notext="Abbrechen" yestext="Übertragung"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Möchten Sie Ihren Internetbrowser öffnen, um diesen Inhalt anzuzeigen?
+		<usetemplate ignoretext="Meinen Browser starten, um eine Webseite anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		de.secondlife.com öffnen, um Ihr Konto zu verwalten?
+		<usetemplate ignoretext="Meinen Browser starten, um mein Konto zu verwalten" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet.
+		<usetemplate ignoretext="Meinen Browser starten, um anzuzeigen, wie ein Sicherheitsproblem gemeldet werden soll" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		Besuchen Sie das [SECOND_LIFE] QA-Wiki.
+		<usetemplate ignoretext="Meinen Browser starten, um das QA-Wiki anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		Im [SECOND_LIFE] Allgemeine-Fragen-Tracker können Sie Fehler und andere Probleme melden.
+		<usetemplate ignoretext="Meinen Browser starten, um die Datenbank für Fehler und Verbesserungsvorschläge anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Im offiziellen Linden-Blog finden Sie die neuesten Nachrichten und Informationen.
+		<usetemplate ignoretext="Meinen Browser starten, um das Blog anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		Möchten Sie den Scripting Guide öffnen?
+		<usetemplate ignoretext="Meinen Browser starten, um den Scripting Guide anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		Möchten Sie das LSL-Portal besuchen?
+		<usetemplate ignoretext="Meinen Browser starten, um das LSL-Portal anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		Möchten Sie die ausgewählten Objekte an ihre Eigentümer zurückgeben? Transferierbare übertragene Objekte werden ihren früheren Eigentümern zurückgegeben.
+
+*WARNUNG* Nicht transferierbare übertragene Objekte werden dabei gelöscht!
+		<usetemplate ignoretext="Bestätigen, bevor Objekte an Ihre Eigentümer zurückgegeben werden" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		Sie sind Mitglied der Gruppe [GROUP].
+Diese Gruppe verlassen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
+	</notification>
+	<notification name="MuteLinden">
+		Lindens können nicht stummgeschaltet werden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht versteigert werden.  Deaktivieren Sie den Landverkauf, wenn Sie das Land zur Versteigerung freigeben möchten.
+	</notification>
+	<notification label="Objekt nach Name stummschalten fehlgeschlagen" name="MuteByNameFailed">
+		Dieser Name ist bereits stummgeschaltet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		Sie können gerade keine Visitenkarte übergeben. Warten Sie kurz und versuchen Sie es dann noch einmal.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		Beschäftigt-Modus ist aktiviert.
+Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachrichten) erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden abgelehnt. Alle Inventar-Angebote werden in Ihren Papierkorb geschoben.
+		<usetemplate ignoretext="Ich ändere meinen Status zu Beschäftigt" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		Sie haben die maximale Anzahl an Gruppen erreicht. Bitte verlassen Sie eine andere Gruppe, um dieser beitreten zu können oder lehnen Sie das Angebot ab.
+[NAME]  hat Sie eingeladen, einer Gruppe beizutreten.
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="Ablehnen" yestext="Beitreten"/>
+	</notification>
+	<notification name="KickUser">
+		Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden von einem Administrator abgemeldet.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden von einem Administrator abgemeldet.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		Beim Einfrieren dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		Beim Auftauen dieses Benutzers welche Meldung anzeigen?
+		<form name="form">
+			<input name="message">
+				Sie sind nicht mehr eingefroren.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		Teleport an Ihre Position mit der folgenden Meldung anbieten?
+		<form name="form">
+			<input name="message">
+				Triff mich in [REGION]
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		Benutzer an Ihrem Standort herbeirufen?
+		<form name="form">
+			<input name="message">
+				Triff mich in [REGION]
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		Möchten Sie sich wirklich teleportieren?
+		<usetemplate ignoretext="Bestätigen, dass ich zu einer Landmarke teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
+	</notification>
+	<notification name="TeleportToPick">
+		Nach [PICK] teleportieren?
+		<usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Auswahl teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
+	</notification>
+	<notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate">
+		Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Linden-Grundstück ändern" name="ChangeLindenEstate">
+		Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+
+Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat.  Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet.
+
+Fortfahren?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess">
+		Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern.
+
+Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen.
+Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedAgentAdd">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedAgentRemove">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedGroupAdd">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateAllowedGroupRemove">
+		Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateBannedAgentAdd">
+		Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateBannedAgentRemove">
+		Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateManagerAdd">
+		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Grundstück wählen" name="EstateManagerRemove">
+		Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/>
+	</notification>
+	<notification label="Rauswurf bestätigen" name="EstateKickUser">
+		Benutzer [EVIL_USER] von diesem Grundstück werfen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		Möchten Sie den Grundstücksvertrag wirklich ändern?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich kann diese Region aufgrund der Alterseinstufung nicht betreten" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<form name="form">
+			<button name="OK" text="Einstellung ändern"/>
+			<button name="Cancel" text="Schließen"/>
+			<ignore name="ignore" text="Meine Alterseinstufung lässt nicht zu, dass ich eine Region betrete."/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich habe aufgrund der Alterseinstufung keinen Anspruch auf dieses Land" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		Sie haben aufgrund Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		Sie haben aufgrund der Einstellung Ihrer Alterseinstufung keinen Anspruch auf dieses Land.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich auf Land Anspruch erhebe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen. Der Grund hierfür ist möglicherweise, dass Sie nicht altersüberprüft sind.
+
+Bitte vergewissern Sie sich, dass Sie den aktuellsten Viewer installiert haben und besuchen Sie unsere Knowledgebase, um mehr über Regionen mit dieser Altereinstufung zu erfahren.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+
+Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Altereinstufung zu erhalten?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Alterseinstufung:_Ein_%C3%9Cberblick_(KB)
+		</url>
+		<usetemplate ignoretext="Ich kann aufgrund der Alterseinstufung dieses Land nicht kaufen" name="okcancelignore" notext="Schließen" yestext="Zur Knowledgbase"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		Sie können aufgrund Ihrer Alterseinstufung dieses Land nicht kaufen.
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		Sie können aufgrund Ihrer Einstellung für Alterseinstufung dieses Land nicht kaufen.
+
+Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen... &gt; Allgemein.
+		<usetemplate ignoretext="Meine Alterseinstufung lässt nicht zu, dass ich Land kaufe" name="okcancelignore" notext="Schließen" yestext="Einstellung ändern"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		&quot;Zu viele Prims wurden ausgewählt.  Bitte wählen Sie höchstens [MAX_PRIM_COUNT] Prims aus und versuchen Sie es erneut.&quot;
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		Problem beim Import des Grundstückvertrags.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters.  Bei mindestens einem Grundstück ist die Verwalterliste voll.
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		Problem beim Hinzufügen zu dieser Grundstücksliste.  Bei mindestens einem Grundstück ist die Liste voll.
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		Notizkarten-Asset konnte nicht geladen werden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		Unzureichende Rechte, um die mit der angeforderten Asset-ID verbundene Notizkarte anzuzeigen.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		Asset-ID für Notizkarte fehlt in Datenbank.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		Hinweis: Anzeigengebühren werden nicht zurückerstattet.
+
+Anzeige für [AMOUNT] L$ veröffentlichen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		Enthält diese Anzeige Mature-Inhalte?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="SetGroupMature">
+		Beschäftigt sich diese Gruppe mit Mature-Inhalten?
+		<usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification label="Neustart bestätigen" name="ConfirmRestart">
+		Möchten Sie diese Region in 2 Minuten neu starten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification label="Nachricht an alle in dieser Region" name="MessageRegion">
+		Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Alterseinstufung der Region ändern" name="RegionMaturityChange">
+		Die Alterseinstufung dieser Region wurde aktualisiert.
+Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
+	</notification>
+	<notification label="Falsche Voice-Version" name="VoiceVersionMismatch">
+		Diese Version von [APP_NAME] mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, müssen Sie [APP_NAME] aktualisieren.
+	</notification>
+	<notification label="Objekte können nicht gekauft werden" name="BuyObjectOneOwner">
+		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOnly">
+		Inhalte können jeweils nur für ein Objekt gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification label="Inhalte können nicht gekauft werden" name="BuyContentsOneOwner">
+		Objekte können nicht von mehreren Eigentümern gleichzeitig gekauft werden.
+Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="BuyOriginal">
+		Von [OWNER] Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		Originalobjekt für [PRICE] L$ kaufen?
+Sie werden der Eigentümer dieses Objekts.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		Von [OWNER] Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		Kopie für [PRICE] L$ kaufen?
+Das Objekt wird in Ihr Inventar kopiert.
+Sie können das Objekt:
+ Bearbeiten: [MODIFYPERM]
+ Kopieren: [COPYPERM]
+ Verkaufen oder weggeben: [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		Von [OWNER] Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		Inhalte für [PRICE] L$ kaufen?
+Die Inhalte werden in Ihr Inventar kopiert.
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		Transaktion:
+[ACTION]
+
+Möchten Sie diesen Kauf fortsetzen?
+Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
+		<form name="form">
+			<input name="message"/>
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		Hinweis:
+Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.
+Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+
+Inventarobjekt(e) verschieben?
+		<usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht kopierbare Artikel aus einem Objekt verschiebe" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		Sie haben „nicht kopierfähige“ Inventarobjekte ausgewählt.  Diese Objekte werden nicht kopiert, sondern in Ihr Inventar verschoben.
+Da es sich um ein geskriptetes Objekt handelt, geht die Skriptfunktion beim Verschieben in das Inventar möglicherweise verloren.
+
+Inventarobjekt(e) verschieben?
+		<usetemplate ignoretext="Warnhinweis anzeigen, bevor ich nicht-kopierbare Artikel verschiebe, die ein geskriptetes Objekt beschädigen können" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		Achtung: Die Klickaktion „Objekt bezahlen&quot; wurde eingestellt. Diese funktioniert jedoch nicht, wenn ein Skript mit einer Geldtransaktion () hinzugefügt wird.
+		<form name="form">
+			<ignore name="ignore" text="I habe die Aktion „Objekt bezahlen&quot; eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		Sie haben keine Berechtigung zum Kopieren von Elementen in diesem Objekt.
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		de.secondlife.com öffnen, um Ihre Konto-Statistik anzuzeigen?
+		<usetemplate ignoretext="Meinen Browser starten, um meine Konto-Statistik anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		Wirklich beenden?
+		<usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen und Community-Standards zu melden. Siehe:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Alle gemeldeten Verletzungen der Servicebedingungen und Community-Standards werden geprüft und geklärt Sie können den Prozess im Incident Report (Vorfallsbericht) verfolgen:
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		WICHTIG: Diese Meldung wird an den Eigentümer der Region gesendet, in der Sie sich gerade befinden, nicht an Linden Lab.
+-
+Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer dieser Region die Bearbeitung aller anfallenden Meldungen. Von diesem Standort aus eingereichte Meldungen werden nicht von Linden Lab bearbeitet. Der Eigentümer der Region bearbeitet Meldungen auf Grundlage der Richtlinien, die im für diese Region geltenden Grundstücksvertrag festgelegt sind.
+(Den Vertrag können Sie unter „Welt“ &gt; „Land-Info“ einsehen.)
+-
+Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken.
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		Wählen Sie eine Missbrauchskategorie aus.
+Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts.
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		Geben Sie den Namen des Täters ein.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		Bitte geben Sie den Ort an, an dem der Missbrauch stattgefunden hat.
+Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		Bitte geben Sie eine Zusammenfassung des Vorfalls ein.
+Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein.
+Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		Sehr geehrte(r) Einwohner(in),
+
+Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
+
+1. Missbrauch melden. Wenn Sie der Meinung sind, ein Einwohner nutzt das Berechtigungssystem von [SECOND_LIFE] auf unerlaubte Weise zu seinem Vorteil aus, indem er zum Beispiel einen CopyBot oder ähnliche Kopiertools verwendet und damit eine Urheberrechtsverletzung begeht, können Sie diesen Missbrauch melden. Das Missbrauchsteam untersucht etwaige Verstöße gegen die [SECOND_LIFE] Community Standards oder die Nutzungsbedingungen und verhängt entsprechende Strafen. Das Missbrauchsteam ist jedoch nicht dafür zuständig, Inhalte aus der [SECOND_LIFE]-Welt zu entfernen und reagiert auch nicht auf entsprechende Anfragen.
+
+2. Der DMCA oder das Entfernen von Inhalten. Sie können das Entfernen von Inhalten aus [SECOND_LIFE] beantragen. Dazu MÜSSEN Sie eine Urheberrechtsverletzung gemäß den in unserer DMCA-Richtlinie unter http://secondlife.com/corporate/dmca.php dargelegten Anweisungen einreichen.
+
+Wenn Sie mit der Missbrauchmeldung jetzt fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.  Möglicherweise müssen Sie Kategorie „CopyBot oder Berechtigungs-Exploit“ auswählen.
+
+Vielen Dank,
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		Die folgenden erforderlichen Komponenten fehlen in [FLOATER]:
+[COMPONENTS]
+	</notification>
+	<notification label="Vorhandenen Anhang ersetzen" name="ReplaceAttachment">
+		An dieser Körperstelle ist bereits ein Objekt angebracht.
+Möchten Sie es mit dem ausgewählten Objekt ersetzen?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Einen bestehenden Anhang mit dem ausgewählten Artikel ersetzen"/>
+			<button ignore="Automatisch ersetzen" name="Yes" text="OK"/>
+			<button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
+		Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
+
+Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Ich bin im Begriff eine Person oder ein Objekt zu bezahlen, während ich im Modus Beschäftigt bin."/>
+			<button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
+			<button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		Sind Sie sicher, dass Sie den Inhalt Ihres Papierkorbs löschen möchten?
+		<usetemplate ignoretext="Bestätigen, bevor der Ordner Papierkorb im Inventar geleert wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		Die Liste mit gespeicherten URLs wirklich löschen?
+		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		Sind Sie sicher, dass Sie den Inhalt Ihres Ordners Fundbüro löschen möchten?
+		<usetemplate ignoretext="Bestätigen, bevor der Ordner Fundbüro im Inventar geleert wird" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="CopySLURL">
+		Die folgende SLurl wurde in die Zwischenablage kopiert:
+ [SLURL]
+
+Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dieser Position zu ermöglichen. Oder versuchen Sie es selbst: kopieren Sie die SLurl in die Adressleiste eines Webbrowsers.
+		<form name="form">
+			<ignore name="ignore" text="Slurl wurde in meine Zwischenablage kopiert"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		Die gespeicherte Voreinstellung überschreiben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		[SKY] löschen?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+	</notification>
+	<notification name="WLMissingSky">
+		Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
+		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		Wählen Sie einen Namen für den neuen Himmel.
+		<form name="form">
+			<input name="message">
+				Neue Voreinstellung
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		Voreinstellung bereits vorhanden!
+	</notification>
+	<notification name="NewWaterPreset">
+		Wählen Sie einen Namen für die neue Wasservoreinstellung.
+		<form name="form">
+			<input name="message">
+				Neue Voreinstellung
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		Voreinstellung bereits vorhanden!
+	</notification>
+	<notification name="WaterNoEditDefault">
+		Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		Ihre Chat-Sitzung mit [NAME] muss beendet werden.
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		Sie können kein Objekt kaufen, während es angehängt ist.
+	</notification>
+	<notification label="Info zur Abfrage der Abbucherlaubnis" name="DebitPermissionDetails">
+		Wenn Sie dieser Anfrage zustimmen, erhält das Skript die Erlaubnis, regelmäßig Linden-Dollar (L$) von Ihrem Konto abzubuchen. Diese Erlaubnis kann nur zurückgezogen werden, wenn der Eigentümer das Objekt löscht oder die Skripts in dem Objekt zurücksetzt.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		Möchten Sie das neu erstellte Kleidungsstück automatisch anziehen?
+		<usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können.  Möchten Sie auf der [SECOND_LIFE]-Webseite Ihr Alter verifizieren lassen?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=de
+		</url>
+		<usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein.  Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=de
+		</url>
+		<usetemplate ignoretext="Meine Zahlungsinformation ist nicht gespeichert" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="MissingString">
+		Der String „[STRING_NAME]“ fehlt in strings.xml
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		Abgebrochen
+	</notification>
+	<notification name="CancelledSit">
+		Sitzen beendet
+	</notification>
+	<notification name="CancelledAttach">
+		Anhängen abgebrochen
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		Fehlende(s) Kleidung/Körperteil mit Standard ersetzt.
+	</notification>
+	<notification name="GroupNotice">
+		Betreff: [SUBJECT], Nachricht: [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] ist online
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] ist offline
+	</notification>
+	<notification name="AddSelfFriend">
+		Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		In-Welt- und Website-Fotos werden hochgeladen...
+(Dauert ca. 5 Minuten.)
+	</notification>
+	<notification name="UploadPayment">
+		Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Das Website-Foto wurde hochgeladen.
+	</notification>
+	<notification name="UploadSnapshotDone">
+		In-Welt-Foto hochgeladen
+	</notification>
+	<notification name="TerrainDownloaded">
+		Terrain.raw heruntergeladen
+	</notification>
+	<notification name="GestureMissing">
+		Geste [NAME] fehlt in Datenbank.
+	</notification>
+	<notification name="UnableToLoadGesture">
+		Geste [NAME] konnte nicht geladen werden.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="LandmarkMissing">
+		Landmarke fehlt in Datenbank.
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		Landmarke konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CapsKeyOn">
+		Die Umschalttaste ist aktiv.
+Dies kann die Eingabe Ihres Passworts beeinflussen.
+	</notification>
+	<notification name="NotecardMissing">
+		Notizkarte fehlt in Datenbank.
+	</notification>
+	<notification name="NotecardNoPermissions">
+		Ihnen fehlt die Berechtigung zur Anzeige dieser Notizkarte.
+	</notification>
+	<notification name="RezItemNoPermissions">
+		Keine Berechtigung zum Rezzen von Objekten.
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		Notizkarten-Asset konnte nicht geladen werden.
+	</notification>
+	<notification name="ScriptMissing">
+		Skript fehlt in Datenbank.
+	</notification>
+	<notification name="ScriptNoPermissions">
+		Unzureichende Rechte zur Anzeige des Skripts.
+	</notification>
+	<notification name="UnableToLoadScript">
+		Skript konnte nicht geladen werden.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="IncompleteInventory">
+		Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		Geschützte Kategorien können nicht geändert werden.
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		Geschützte Kategorien können nicht entfernt werden.
+	</notification>
+	<notification name="OfferedCard">
+		Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		Kauf nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		Verknüpfung nicht möglich. Objektdaten werden noch geladen.
+Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		Sie können nur von einem Eigentümer auf einmal Objekte kaufen.
+Wählen Sie ein einzelnes Objekt aus.
+	</notification>
+	<notification name="ObjectNotForSale">
+		Dieses Objekt wird nicht verkauft.
+	</notification>
+	<notification name="EnteringGodMode">
+		Gott-Modus aktiviert, Level [LEVEL]
+	</notification>
+	<notification name="LeavingGodMode">
+		Gott-Modus wird nun de-aktiviert, Level [LEVEL]
+	</notification>
+	<notification name="CopyFailed">
+		Ihnen fehlt die Berechtigung zum Kopieren.
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME] hat Ihr Inventarangebot akzeptiert.
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME] hat Ihr Inventarangebot abgelehnt.
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		Ihre Visitenkarte wurde akzeptiert.
+	</notification>
+	<notification name="CallingCardDeclined">
+		Ihre Visitenkarte wurde abgelehnt.
+	</notification>
+	<notification name="TeleportToLandmark">
+		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie sich an Positionen wie „[NAME]“ teleportieren, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Landmarken“ auswählen.
+Klicken Sie eine Landmarke doppelt an und wählen Sie „Teleportieren“, um an diesen Ort zu gelangen.
+	</notification>
+	<notification name="TeleportToPerson">
+		Jetzt, nachdem Sie das Mainland erreicht haben, können Sie mit Einwohnern wie „[NAME]“ Kontakt aufnehmen, indem Sie unten rechts im Fenster auf „Inventar“ klicken und den Ordner „Visitenkarten“ auswählen.
+Klicken Sie die Karte doppelt an, wählen Sie „Instant Message“ und geben Sie eine Nachricht ein.
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		Land kann nicht über Servergrenzen hinweg ausgewählt werden.
+Wählen Sie eine kleinere Landfläche.
+	</notification>
+	<notification name="SearchWordBanned">
+		Einige Begriffe in Ihrer Suchanfrage wurden ausgeschlossen, aufgrund von in den Community Standards definierten Inhaltsbeschränkungen.
+	</notification>
+	<notification name="NoContentToSearch">
+		Bitte wählen Sie mindestens eine Inhaltsart für die Suche aus (PG, Mature oder Adult).
+	</notification>
+	<notification name="GroupVote">
+		[NAME] hat eine Abstimmung vorgeschlagen über:
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="Abstimmen"/>
+			<button name="Later" text="Später"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		Event-Benachrichtigung:
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="Teleportieren"/>
+			<button name="Description" text="Beschreibung"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		Alle Objekte auf dieser Parzelle, die an den Käufer der Parzelle übertragen werden, sind jetzt markiert.
+
+* Übertragene Bäume und Gräser sind nicht markiert.
+		<form name="form">
+			<button name="Done" text="Fertig"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		Gesten mit demselben Trigger wurden deaktiviert:
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Apple QuickTime ist auf Ihrem System anscheinend nicht installiert.
+Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktime) herunter, um auf Parzellen, die diese Funktion unterstützen, Streaming-Inhalte wiederzugeben.
+	</notification>
+	<notification name="NoPlugin">
+		Es wurde kein Medien-Plugin gefunden, das &quot;[MIME_TYPE]&quot; ausführen kann.  Medien dieses Dateityps sind nicht verfügbar.
+	</notification>
+	<notification name="MediaPluginFailed">
+		Bei folgendem Plugin ist ein Fehler aufgetreten:
+    [PLUGIN]
+
+Bitte installieren Sie das Plugin erneut. Falls weiterhin Problem auftreten, kontaktieren Sie bitte den Hersteller.
+		<form name="form">
+			<ignore name="ignore" text="Ein Plugin kann nicht ausgeführt werden"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
+	</notification>
+	<notification name="OtherObjectsReturned">
+		Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		Die Objekte von [FIRST] [LAST] auf dieser
+Parzelle von „[NAME]“ wurden an ihren Eigentümer zurückgegeben.
+	</notification>
+	<notification name="GroupObjectsReturned">
+		Die mit der Gruppe [GROUPNAME] gemeinsam genutzten Objekte auf dieser Parzelle wurden in das Inventar ihrer Eigentümer transferiert.
+Transferierbare übertragene Objekte wurden an ihre früheren Eigentümer zurückgegeben.
+Nicht transferierbare an die Gruppe übertragene Objekte wurden gelöscht.
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		Alle Objekte auf der ausgewählten Parzelle, die NICHT Ihnen gehören, wurden ihren Eigentümern zurückgegeben.
+	</notification>
+	<notification name="NotSafe">
+		Auf diesem Land ist Schaden aktiviert.
+Verletzungen sind möglich. Wenn Sie sterben, werden Sie zu Ihrem Heimatstandort teleportiert.
+	</notification>
+	<notification name="NoFly">
+		In diesem Bereich ist das Fliegen deaktiviert.
+Fliegen ist hier nicht möglich.
+	</notification>
+	<notification name="PushRestricted">
+		In diesem Bereich ist Stoßen nicht erlaubt.
+Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
+	</notification>
+	<notification name="NoVoice">
+		In diesem Bereich ist Voice deaktiviert. Sie werden niemanden sprechen hören.
+	</notification>
+	<notification name="NoBuild">
+		In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
+	</notification>
+	<notification name="ScriptsStopped">
+		Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
+	</notification>
+	<notification name="ScriptsNotRunning">
+		In dieser Region werden keine Skipts ausgeführt.
+	</notification>
+	<notification name="NoOutsideScripts">
+		Auf diesem Land sind externe Skripts deaktiviert
+
+Hier funktionieren nur Skripts, die dem Landeigentümer gehören.
+	</notification>
+	<notification name="ClaimPublicLand">
+		Öffentliches Land kann nur in der Region in Besitz genommen werden, in der Sie sich befinden.
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		Sie dürfen diese Region aufgrund Ihrer Alterseinstufung nicht betreten. Sie müssen eventuell eine Altersüberprüfung vornehmen und/oder den aktuellsten Viewer installieren.
+
+Bitte besuchen Sie unsere Knowledgebase, um mehr Details über Zugang zu Regionen mit dieser Alterseinstufung zu erhalten.
+	</notification>
+	<notification name="URBannedFromRegion">
+		Sie dürfen diese Region nicht betreten.
+	</notification>
+	<notification name="NoTeenGridAccess">
+		Ihr Konto kann keine Verbindung zu dieser Teen Grid-Region herstellen.
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		Die für den Zutritt zu dieser Region erforderlichen Zahlungsinformationen liegen nicht vor.
+	</notification>
+	<notification name="MustGetAgeParcel">
+		Sie müssen alterüberprüft sein, um diese Parzelle betreten zu können.
+	</notification>
+	<notification name="NoDestRegion">
+		Keine Zielregion gefunden.
+	</notification>
+	<notification name="NotAllowedInDest">
+		Der Zutritt wurde Ihnen verweigert.
+	</notification>
+	<notification name="RegionParcelBan">
+		Diese Parzelle ist abgesperrt und kann nicht überquert werden. Versuchen Sie einen anderen Weg.
+	</notification>
+	<notification name="TelehubRedirect">
+		Sie wurden zu einem Telehub umgeleitet.
+	</notification>
+	<notification name="CouldntTPCloser">
+		Ein Teleport näher am Ziel ist leider nicht möglich.
+	</notification>
+	<notification name="TPCancelled">
+		Teleport abgebrochen.
+	</notification>
+	<notification name="FullRegionTryAgain">
+		Die Region, die Sie betreten möchten, ist im Moment voll.
+Versuchen Sie es in einigen Minuten erneut.
+	</notification>
+	<notification name="GeneralFailure">
+		Allgemeiner Fehler.
+	</notification>
+	<notification name="RoutedWrongRegion">
+		In falsche Region umgeleitet.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="NoValidAgentID">
+		Keine gültige Agent ID.
+	</notification>
+	<notification name="NoValidSession">
+		Keine gültige Sitzungs-ID.
+	</notification>
+	<notification name="NoValidCircuit">
+		Kein gültiger Verbindungscode.
+	</notification>
+	<notification name="NoValidTimestamp">
+		Kein gültiger Zeitstempel.
+	</notification>
+	<notification name="NoPendingConnection">
+		Verbindung kann nicht hergestellt werden.
+	</notification>
+	<notification name="InternalUsherError">
+		Interner Fehler beim Versuch, Verbindung mit Agent Usher herzustellen.
+	</notification>
+	<notification name="NoGoodTPDestination">
+		In dieser Region konnte kein gültiges Teleportziel gefunden werden.
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		Interner Fehler bei Teleport.
+	</notification>
+	<notification name="NoValidLanding">
+		Ein gültiger Landpunkt konnte nicht gefunden werden.
+	</notification>
+	<notification name="NoValidParcel">
+		Es konnte keine gültige Parzelle gefunden werden.
+	</notification>
+	<notification name="ObjectGiveItem">
+		Das Objekt [OBJECTFROMNAME] von [FIRST] [LAST] hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		Das Objekt [OBJECTFROMNAME] von (unbekannt) hat Ihnen Folgendes übergeben: [OBJECTTYPE] ([OBJECTNAME]).
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME] hat Ihnen ein [OBJECTTYPE] namens „[OBJECTNAME]“ gegeben.
+		<form name="form">
+			<button name="Keep" text="Behalten"/>
+			<button name="Discard" text="Verwerfen"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="Beitreten"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Info" text="Info"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME] hat angeboten, Sie zu ihrem/seinem Standort zu teleportieren:
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="Teleportieren"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="Später"/>
+			<button name="GoNow..." text="Jetzt gehen..."/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME] bietet Ihnen die Freundschaft an.
+
+[MESSAGE]
+
+(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME] bietet Ihnen die Freundschaft an.
+
+(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME] hat Ihr Freundschaftsangebot akzeptiert.
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME] hat Ihr Freundschaftsangebot abgelehnt.
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
+Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		Region wird in [MINUTES] Minuten neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+	</notification>
+	<notification name="RegionRestartSeconds">
+		Diese Region wird in [SECONDS] neu gestartet.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
+	</notification>
+	<notification name="LoadWebPage">
+		Webseite [URL] laden?
+
+[MESSAGE]
+
+Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
+		<form name="form">
+			<button name="Gotopage" text="Zur Seite"/>
+			<button name="Cancel" text="Abbrechen"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		[TYPE] nicht in Datenbank.
+	</notification>
+	<notification name="FailedToFindWearable">
+		[TYPE] namens [DESC] nicht in Datenbank.
+	</notification>
+	<notification name="InvalidWearable">
+		Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um diesen Artikel anziehen zu können.
+	</notification>
+	<notification name="ScriptQuestion">
+		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
+
+[QUESTIONS]
+Ist das OK?
+		<form name="form">
+			<button name="Yes" text="Ja"/>
+			<button name="No" text="Nein"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		Ein Objekt namens „[OBJECTNAME]“ des Eigentümers „[NAME]“ möchte:
+
+[QUESTIONS]
+Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen.
+
+Anfrage gestatten?
+		<form name="form">
+			<button name="Grant" text="Gewähren"/>
+			<button name="Deny" text="Verweigern"/>
+			<button name="Details" text="Info..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		[FIRST] [LAST]s „[TITLE]“
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorieren"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		[GROUPNAME]s „[TITLE]“
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorieren"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		Sie haben gerade [AMOUNT] L$ erhalten.
+Ihr Kontostand wird oben rechts angezeigt.
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		Sie haben gerade [AMOUNT] L$ bezahlt.
+Ihr Kontostand wird oben rechts angezeigt.
+	</notification>
+	<notification name="FirstSit">
+		Sie sitzen.
+Verwenden Sie die Pfeiltasten (oder AWSD-Tasten), um sich umzusehen.
+Um aufzustehen, klicken Sie auf die Schaltfläche „Aufstehen“.
+	</notification>
+	<notification name="FirstMap">
+		Klicken Sie auf die Karte und bewegen Sie die Maus, um sich auf der Karte umzusehen.
+Mit Doppelklick können Sie teleportieren.
+Nutzen Sie die Optionen rechts, um Objekte, Einwohner oder Events anzuzeigen und einen anderen Hintergrund auszuwählen.
+	</notification>
+	<notification name="FirstBuild">
+		Sie haben die Bauwerkzeuge geöffnet. Jedes Objekt, dass Sie sehen wurde mit diesen Werkzeugen gebaut.
+	</notification>
+	<notification name="FirstTeleport">
+		Sie können nur zu bestimmten Bereichen in dieser Region teleportieren. Der Pfeil deutet zu Ihrem Ziel hin. Klicken Sie auf den Pfeil, um diesen auszublenden.
+	</notification>
+	<notification name="FirstOverrideKeys">
+		Ihre Bewegungstasten werden jetzt von einem Objekt gesteuert.
+Probieren Sie die Pfeil- oder WASD-Tasten aus.
+Manche Objekte (wie Waffen) müssen per Mouselook gesteuert werden.
+Drücken Sie dazu „M“.
+	</notification>
+	<notification name="FirstAppearance">
+		Sie bearbeiten gerade Ihr Aussehen.
+Verwenden Sie die Pfeiltasten, um sich umzusehen.
+Klicken Sie auf „Alles speichern“, wenn Sie fertig sind.
+	</notification>
+	<notification name="FirstInventory">
+		Dies ist Ihr Inventar. Es enthält Objekte, die Ihnen gehören.
+
+* Um etwas anzuziehen, ziehen Sie es mit der Maus auf Ihren Avatar.
+* Um etwas inworld zu rezzen, ziehen Sie das Objekt auf den Boden.
+* Zum Lesen einer Notizkarte klicken Sie sie doppelt an.
+	</notification>
+	<notification name="FirstSandbox">
+		Dies ist ein Sandkasten. Hier können Einwohner lernen, wie Objekte gebaut werden. 
+
+Objekte, die Sie hier bauen, werden gelöscht, nachdem Sie den Sandkasten verlassen. Vergessen Sie nicht, Ihr Werk mit einem Rechtsklick und der Auswahl „Nehmen“ in Ihrem Inventar zu speichern.
+	</notification>
+	<notification name="FirstFlexible">
+		Dieses Objekt ist flexibel. Flexible Objekte müssen die Eigenschaft „Phantom“ haben und dürfen nicht „physisch“ sein.
+	</notification>
+	<notification name="FirstDebugMenus">
+		Sie haben das Menü „Erweitert“ geöffnet.
+
+Um dieses Menü zu aktivieren bzw. deaktivieren:
+  Windows Strg-Alt-D
+  Mac ⌘-Opt-D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		Sie bearbeiten ein geformtes Primitiv. Geformte Primitive benötigen eine spezielle Textur, die ihre Form definiert.
+	</notification>
+	<notification name="MaxListSelectMessage">
+		Sie können maximal [MAX_SELECT] Objekte
+von der Liste auswählen.
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME] lädt Sie zu einem Voice-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST] hat eine Instant Message erhalten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST] hat Geld erhalten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST] wurde ein Inventarobjekt angeboten; die Stummschaltung wurde aufgehoben.
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Anrufer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME] ist einem Voice-Konferenz-Chat beigetreten.
+Klicken Sie auf „Akzeptieren“, um dem Gespräch beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME] lädt Sie zu einem Konferenz-Chat ein.
+Klicken Sie auf „Akzeptieren“, um dem Chat beizutreten, oder auf „Ablehnen“, um die Einladung auszuschlagen. Klicken Sie auf „Stummschalten“, um diesen Benutzer stumm zu schalten.
+		<form name="form">
+			<button name="Accept" text="Akzeptieren"/>
+			<button name="Decline" text="Ablehnen"/>
+			<button name="Mute" text="Stummschalten"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		Der Voice-Chat, dem Sie beitreten möchten, [VOICE_CHANNEL_NAME], hat seine maximale Teilnehmerzahl erreicht. Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		Es tut uns Leid.  Dieses Gebiet hat seine maximale Kapazität für Voice-Gespräche erreicht.  Bitte versuchen Sie es in einem anderen Gebiet.
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		Sie haben [VOICE_CHANNEL_NAME] verlassen.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME] hat das Gespräch beendet.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME] hat Ihren Anruf abgelehnt.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME] ist zurzeit nicht erreichbar.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		Verbindung zu [VOICE_CHANNEL_NAME] nicht möglich. Bitte versuchen Sie es später.  Sie werden nun wieder mit dem Umgebungs-Voice-Chat verbunden.
+	</notification>
+	<notification name="VoiceLoginRetry">
+		Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		Nur Mitglieder einer bestimmten Gruppe dürfen diesen Bereich betreten.
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		Zugang zur Parzelle verweigert. Sie wurden verbannt.
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		Zugang zur Parzelle verweigert. Sie stehen nicht auf der Zugangsliste.
+	</notification>
+	<notification name="VoiceNotAllowed">
+		Sie sind nicht berechtigt, einem Voice-Chat in [VOICE_CHANNEL_NAME] beizutreten.
+	</notification>
+	<notification name="VoiceCallGenericError">
+		Fehler beim Versuch, eine Voice-Chat-Verbindung zu [VOICE_CHANNEL_NAME] herzustellen.  Bitte versuchen Sie es erneut.
+	</notification>
+	<notification name="ServerVersionChanged">
+		Sie haben eine Region betreten, die eine andere Server-Version verwendet. Dies kann sich auf die Leistung auswirken. Klicken Sie hier, um die Versionshinweise anzuzeigen.
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		Die SLurl, auf die Sie geklickt haben, wird nicht unterstützt.
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="Antworten"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		Der Anhang wurde gespeichert.
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		Hilfethema für dieses Element wurde nicht gefunden.
+	</notification>
+	<global name="UnsupportedCPU">
+		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="UnsupportedGLRequirements">
+		Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem.
+
+Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter [SUPPORT_SITE].
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- Ihre Grafikkarte entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="UnsupportedRAM">
+		- Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen.
+	</global>
+	<global name="PermYes">
+		Ja
+	</global>
+	<global name="PermNo">
+		Nein
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		Wenn Sie ein Stück Land besitzen, können Sie dies als Ihren Heimatort festlegen. 
+Ansonsten können Sie auf der Karte nachsehen und dort Ort suchen, die als „Infohub“ gekennzeichnet sind.
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
index 1f67e0231d06387f251a61f7addf1e6594481aae..4a163c317e2be8c7d76a78afbd78bc84bb978d9d 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Einwohner" />
-   <string name="AcctTypeTrial"
-    value="Test" />
-   <string name="AcctTypeCharterMember"
-    value="Charta-Mitglied" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab-Mitarbeiter" />
-   <string name="PaymentInfoUsed"
-    value="Zahlungsinfo verwendet" />
-   <string name="PaymentInfoOnFile"
-    value="Zahlungsinfo archiviert" />
-   <string name="NoPaymentInfoOnFile"
-    value="Keine Zahlungsinfo archiviert" />
-   <string name="AgeVerified"
-    value="Altersgeprüft" />
-   <string name="NotAgeVerified"
-    value="Nicht altersgeprüft" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=de
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Antwort für Beschäftigt-Modus:
-      </text>
-    </panel>
-    </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="Einwohner"/>
+	<string name="AcctTypeTrial" value="Test"/>
+	<string name="AcctTypeCharterMember" value="Charta-Mitglied"/>
+	<string name="AcctTypeEmployee" value="Linden Lab-Mitarbeiter"/>
+	<string name="PaymentInfoUsed" value="Zahlungsinfo verwendet"/>
+	<string name="PaymentInfoOnFile" value="Zahlungsinfo archiviert"/>
+	<string name="NoPaymentInfoOnFile" value="Keine Zahlungsinfo archiviert"/>
+	<string name="AgeVerified" value="Altersgeprüft"/>
+	<string name="NotAgeVerified" value="Nicht altersgeprüft"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=de
+	</string>
+	<string name="no_partner_text" value="Keiner"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="Klicken, um ein Bild auszuwählen"/>
+				<text name="title_homepage_text">
+					Webseite:
+				</text>
+				<check_box label="In Suchergebnissen anzeigen" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="Kontostatus:"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="Änderungen speichern" name="save_btn"/>
+		<button label="Abbrechen" name="cancel_btn"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
index 84ba91a63f9a13198703ce539df924bc4c9a20f4..81a255a14f340f777ca38b6bf4bc295a9aa22a2b 100644
--- a/indra/newview/skins/default/xui/de/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml
@@ -1,29 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitglied einladen" name="invite_panel">
-	<text name="help_text">
-		Sie können mehrere Einwohner in Ihre 
-Gruppe einladen. Klicken Sie hierzu
-auf „Einwohnerliste öffnen“.
-	</text>
-	<button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list"
-	     tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Einwohnernamen." />
-	<button label="Auswahl aus Liste löschen" name="remove_button"
-	     tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen." />
-	<text>
-		Wählen Sie eine Rolle aus:
-	</text>
-	<text name="role_text">
-		Wählen Sie eine Rolle aus:
-	</text>
-	<combo_box name="role_name"
-	     tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen." />
-	<button label="Einladungen versenden" name="ok_button" />
-	<button label="Abbrechen" name="cancel_button" />
-	<string name="confirm_invite_owner_str">
-		Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden!
-	</string>
-	<text name="loading">
-		(wird geladen...)
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglied einladen" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		Möchten Sie wirklich (einen) neue(n) Eigentümer einladen? Dies kann nicht rückgängig gemacht werden!
+	</panel.string>
+	<panel.string name="loading">
+		(wird geladen...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		Einige Avatare sind bereits Mitglied und wurden nicht eingeladen.
+	</panel.string>
+	<text name="help_text">
+		Sie können mehrere Einwohner in Ihre 
+Gruppe einladen. Klicken Sie hierzu
+auf „Einwohnerliste öffnen“.
+	</text>
+	<button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/>
+	<name_list name="invitee_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Einwohnernamen."/>
+	<button label="Auswahl aus Liste löschen" name="remove_button" tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen."/>
+	<text name="role_text">
+		Wählen Sie eine Rolle aus:
+	</text>
+	<combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/>
+	<button label="Einladungen versenden" name="ok_button"/>
+	<button label="Abbrechen" name="cancel_button"/>
+	<string name="GroupInvitation">
+		Gruppeneinladung
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
index bc39a3a1bbfadb8d83af26472ac8623678c8bced..fcd8cd358fb262c0026323edca2dce94eb92d8b1 100644
--- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
@@ -1,171 +1,170 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Land und L$" name="land_money_tab">
-	<string name="help_text">
-		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
-	</string>
-	<string name="loading_txt">
-		Wird geladen...
-	</string>
-	<text name="group_land_heading">
-		Land in Gruppenbesitz
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Gesamtbeitrag:
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] qm
-	</text>
-	<text name="total_land_in_use_label">
-		Insgesamt verwendetes Land:
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] qm
-	</text>
-	<text name="land_available_label">
-		Land verfügbar:
-	</text>
-	<text name="land_available_value">
-		[AREA] qm
-	</text>
-	<text name="your_contribution_label">
-		Ihr Beitrag:
-	</text>
-	<string name="land_contrib_error">
-		Ihr Landbeitrag kann nicht festgelegt werden.
-	</string>
-	<text name="your_contribution_units">
-		( qm )
-	</text>
-	<text name="your_contribution_max_value">
-		(max. [AMOUNT])
-	</text>
-	<text name="group_over_limit_text">
-		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
-	</text>
-	<text name="group_money_heading">
-		Gruppen-L$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planung" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Wird berechnet...
-			</text_editor>
-		</panel>
-		<panel label="Details" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-		<panel label="Verkäufe" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-	</tab_container>
-</panel>
-
-<!--
-
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Land und L$" name="land_money_tab">
-	<string name="help_text">
-		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
-	</string>
-	<string name="loading_txt">
-		Wird geladen...
-	</string>
-	<text name="group_land_heading">
-		Land in Gruppenbesitz
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parzellenname" name="name"/>
-		<column label="Region" name="location"/>
-		<column label="Typ" name="type"/>
-		<column label="Gebiet" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Gesamtbeitrag:
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] qm
-	</text>
-	<text name="total_land_in_use_label">
-		Insgesamt verwendetes Land:
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] qm
-	</text>
-	<text name="land_available_label">
-		Land verfügbar:
-	</text>
-	<text name="land_available_value">
-		[AREA] qm
-	</text>
-	<text name="your_contribution_label">
-		Ihr Beitrag:
-	</text>
-	<string name="land_contrib_error">
-		Ihr Landbeitrag kann nicht festgelegt werden.
-	</string>
-	<text name="your_contribution_max_value">
-		qm (max. [AMOUNT])
-	</text>
-	<text name="group_over_limit_text">
-		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
-das verwendete Land gehalten werden kann.
-	</text>
-	<text name="group_money_heading">
-		Gruppen-L$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planung" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Wird berechnet...
-			</text_editor>
-		</panel>
-		<panel label="Details" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-		<panel label="Verkäufe" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Wird berechnet...
-			</text_editor>
-			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
-			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
-		</panel>
-	</tab_container>
-</panel>
-
--->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+	<string name="help_text">
+		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+	</string>
+	<string name="loading_txt">
+		Wird geladen...
+	</string>
+	<text name="group_land_heading">
+		Land in Gruppenbesitz
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parzelle" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Karte" label_selected="Karte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Gesamtbeitrag:
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] qm
+	</text>
+	<text name="total_land_in_use_label">
+		Insgesamt verwendetes Land:
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] qm
+	</text>
+	<text name="land_available_label">
+		Land verfügbar:
+	</text>
+	<text name="land_available_value">
+		[AREA] qm
+	</text>
+	<text name="your_contribution_label">
+		Ihr Beitrag:
+	</text>
+	<string name="land_contrib_error">
+		Ihr Landbeitrag kann nicht festgelegt werden.
+	</string>
+	<text name="your_contribution_units">
+		( qm )
+	</text>
+	<text name="your_contribution_max_value">
+		(max. [AMOUNT])
+	</text>
+	<text name="group_over_limit_text">
+		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
+	</text>
+	<text name="group_money_heading">
+		Gruppen-L$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planung" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Wird berechnet...
+			</text_editor>
+		</panel>
+		<panel label="Details" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+		<panel label="Verkäufe" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+	</tab_container>
+</panel>
+<!--
+
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Land und L$" name="land_money_tab">
+	<string name="help_text">
+		Parzellen in Gruppenbesitz werden zusammen mit Beitragsdetails angezeigt. Ein Warnhinweis wird angezeigt, solange der Wert für das insgesamt verwendete Land gleich oder weniger ist als der Gesamtbeitrag. Die Registerkarten „Planung“, „Details“ und „Verkäufe“ enthalten Informationen über die Gruppenfinanzen.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Sie sind nicht berechtigt, Landeigentum der Gruppe anzuzeigen.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Sie sind nicht berechtigt, die Finanzinformationen der Gruppe anzuzeigen.
+	</string>
+	<string name="loading_txt">
+		Wird geladen...
+	</string>
+	<text name="group_land_heading">
+		Land in Gruppenbesitz
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parzellenname" name="name"/>
+		<column label="Region" name="location"/>
+		<column label="Typ" name="type"/>
+		<column label="Gebiet" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Auf Karte" label_selected="Auf Karte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Gesamtbeitrag:
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] qm
+	</text>
+	<text name="total_land_in_use_label">
+		Insgesamt verwendetes Land:
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] qm
+	</text>
+	<text name="land_available_label">
+		Land verfügbar:
+	</text>
+	<text name="land_available_value">
+		[AREA] qm
+	</text>
+	<text name="your_contribution_label">
+		Ihr Beitrag:
+	</text>
+	<string name="land_contrib_error">
+		Ihr Landbeitrag kann nicht festgelegt werden.
+	</string>
+	<text name="your_contribution_max_value">
+		qm (max. [AMOUNT])
+	</text>
+	<text name="group_over_limit_text">
+		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
+das verwendete Land gehalten werden kann.
+	</text>
+	<text name="group_money_heading">
+		Gruppen-L$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planung" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Wird berechnet...
+			</text_editor>
+		</panel>
+		<panel label="Details" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_details_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_details_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+		<panel label="Verkäufe" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Wird berechnet...
+			</text_editor>
+			<button label="&lt; Früher" label_selected="&lt; Früher" name="earlier_sales_button" tool_tip="Zurück in der Zeit"/>
+			<button label="Später &gt;" label_selected="Später &gt;" name="later_sales_button" tool_tip="Weiter in der Zeit"/>
+		</panel>
+	</tab_container>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml
index ff6f957a73f4b802b361569036a0d0b5d85f7363..137713b77129cbfc973d1098cc6cbdac2ad5cf36 100644
--- a/indra/newview/skins/default/xui/de/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml
@@ -1,156 +1,147 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitteilungen" name="notices_tab">
-	<text name="help_text">
-		Mitteilungen sind eine schnelle Möglichkeit, 
-Mitglieder auf dem Laufenden zu halten und 
-Objekte im Anhang zu versenden. Mitteilungen werden
-nur an Mitglieder mit einer entsprechenden Rolle 
-gesendet. Mitteilungen können unter 
-„Allgemein“ ausgeschaltet werden.
-	</text>
-	<text name="no_notices_text">
-		Keine älteren Mitteilungen.
-	</text>
-	<button label="?" label_selected="?" name="help_button" />
-	<text name="lbl">
-		Gruppenmitteilungsarchiv
-	</text>
-	<text name="lbl2">
-		Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon" />
-		<column label="Thema" name="subject" />
-		<column label="Von" name="from" />
-		<column label="Datum" name="date" />
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Nicht gefunden.
-	</text>
-	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
-	     name="create_new_notice" />
-	<button label="Aktualisieren" label_selected="Liste aktualisieren"
-	     name="refresh_notices" />
-	<panel label="Neue Mitteilung" name="panel_create_new_notice">
-		<text name="lbl">
-			Mitteilung schreiben
-		</text>
-		<text name="lbl2">
-			Sie können der Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar in dieses Feld ziehen. Angehängte Objekte müssen kopier-und transferierbar sein. Ordner können nicht gesendet werden.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<text name="lbl5">
-			Anhängen:
-		</text>
-		<button label="Anhang entfernen" label_selected="Anhang entfernen"
-		     name="remove_attachment" />
-		<button label="Senden" label_selected="Senden" name="send_notice" />
-		<panel name="drop_target"
-		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
-	</panel>
-	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
-		<text name="lbl">
-			Archivierte Mitteilung
-		</text>
-		<text name="lbl2">
-			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
-	</panel>
-</panel>
-
-
-<!-- original file
-
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Mitteilungen" name="notices_tab">
-	<text name="help_text">
-		Mitteilungen sind eine schnelle Möglichkeit, 
-Mitglieder auf dem Laufenden zu halten und 
-Objekte im Anhang zu versenden. Mitteilungen werden
-nur an Mitglieder mit einer entsprechenden Rolle 
-gesendet. Mitteilungen können unter 
-„Allgemein“ ausgeschaltet werden.
-	</text>
-	<text name="no_notices_text">
-		Keine älteren Mitteilungen.
-	</text>
-	<button label="?" label_selected="?" name="help_button" />
-	<text name="lbl">
-		Gruppenmitteilungsarchiv
-	</text>
-	<text name="lbl2">
-		Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung,
-um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen.
-Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon" />
-		<column label="Thema" name="subject" />
-		<column label="Von" name="from" />
-		<column label="Datum" name="date" />
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Nicht gefunden.
-	</text>
-	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
-	     name="create_new_notice" />
-	<button label="Aktualisieren" label_selected="Liste aktualisieren"
-	     name="refresh_notices" />
-	<panel label="Neue Mitteilung" name="panel_create_new_notice">
-		<text name="lbl">
-			Mitteilung schreiben
-		</text>
-		<text name="lbl2">
-			Geben Sie einen Betreff für die Mitteilung ein. Sie können der
-Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar
-in dieses Feld ziehen. Angehängte Objekte müssen kopier-
-und transferierbar sein. Ordner können nicht gesendet werden.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<text name="lbl5">
-			Anhängen:
-		</text>
-		<button label="Anhang entfernen" label_selected="Anhang entfernen"
-		     name="remove_attachment" />
-		<button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" />
-		<panel name="drop_target"
-		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
-	</panel>
-	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
-		<text name="lbl">
-			Archivierte Mitteilung
-		</text>
-		<text name="lbl2">
-			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
-		</text>
-		<text name="lbl3">
-			Betreff:
-		</text>
-		<text name="lbl4">
-			Nachricht:
-		</text>
-		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
-	</panel>
-</panel>
-
--->
-
-
-
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitteilungen" name="notices_tab">
+	<text name="help_text">
+		Mitteilungen sind eine schnelle Möglichkeit, 
+Mitglieder auf dem Laufenden zu halten und 
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle 
+gesendet. Mitteilungen können unter 
+„Allgemein“ ausgeschaltet werden.
+	</text>
+	<text name="no_notices_text">
+		Keine älteren Mitteilungen.
+	</text>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		Gruppenmitteilungsarchiv
+	</text>
+	<text name="lbl2">
+		Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="Thema" name="subject"/>
+		<column label="Von" name="from"/>
+		<column label="Datum" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Nicht gefunden.
+	</text>
+	<button label="Neue Mitteilung" label_selected="Neue Mitteilung" name="create_new_notice"/>
+	<button label="Aktualisieren" label_selected="Liste aktualisieren" name="refresh_notices"/>
+	<panel label="Neue Mitteilung" name="panel_create_new_notice">
+		<text name="lbl">
+			Mitteilung schreiben
+		</text>
+		<text name="lbl2">
+			Sie können ein Objekt zu einer Mitteilung hinzufügen, wenn Sie es aus Ihrem Inventar auf dieses Feld ziehen. Die angehängten Objekte müssen kopier- und übertragbar sein. Ordner können nicht verschickt werden.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<text name="lbl5">
+			Anhängen:
+		</text>
+		<button label="Anhang entfernen" label_selected="Anhang entfernen" name="remove_attachment"/>
+		<button label="Senden" label_selected="Senden" name="send_notice"/>
+		<panel name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."/>
+	</panel>
+	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+		<text name="lbl">
+			Archivierte Mitteilung
+		</text>
+		<text name="lbl2">
+			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment"/>
+	</panel>
+</panel>
+<!-- original file
+
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel label="Mitteilungen" name="notices_tab">
+	<text name="help_text">
+		Mitteilungen sind eine schnelle Möglichkeit, 
+Mitglieder auf dem Laufenden zu halten und 
+Objekte im Anhang zu versenden. Mitteilungen werden
+nur an Mitglieder mit einer entsprechenden Rolle 
+gesendet. Mitteilungen können unter 
+„Allgemein“ ausgeschaltet werden.
+	</text>
+	<text name="no_notices_text">
+		Keine älteren Mitteilungen.
+	</text>
+	<button label="?" label_selected="?" name="help_button" />
+	<text name="lbl">
+		Gruppenmitteilungsarchiv
+	</text>
+	<text name="lbl2">
+		Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung,
+um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen.
+Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon" />
+		<column label="Thema" name="subject" />
+		<column label="Von" name="from" />
+		<column label="Datum" name="date" />
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Nicht gefunden.
+	</text>
+	<button label="Neue Mitteilung" label_selected="Neue Mitteilung"
+	     name="create_new_notice" />
+	<button label="Aktualisieren" label_selected="Liste aktualisieren"
+	     name="refresh_notices" />
+	<panel label="Neue Mitteilung" name="panel_create_new_notice">
+		<text name="lbl">
+			Mitteilung schreiben
+		</text>
+		<text name="lbl2">
+			Geben Sie einen Betreff für die Mitteilung ein. Sie können der
+Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar
+in dieses Feld ziehen. Angehängte Objekte müssen kopier-
+und transferierbar sein. Ordner können nicht gesendet werden.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<text name="lbl5">
+			Anhängen:
+		</text>
+		<button label="Anhang entfernen" label_selected="Anhang entfernen"
+		     name="remove_attachment" />
+		<button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" />
+		<panel name="drop_target"
+		     tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." />
+	</panel>
+	<panel label="Ältere Notiz anzeigen" name="panel_view_past_notice">
+		<text name="lbl">
+			Archivierte Mitteilung
+		</text>
+		<text name="lbl2">
+			Klicken Sie zum Senden einer Mitteilung auf „Neue Mitteilung“.
+		</text>
+		<text name="lbl3">
+			Betreff:
+		</text>
+		<text name="lbl4">
+			Nachricht:
+		</text>
+		<button label="Anlage öffnen" label_selected="Anlage öffnen" name="open_attachment" />
+	</panel>
+</panel>
+
+-->
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml
index d7f47de46fa9492c479ed48b131a38571a91776a..a8080afeb3c622cc3ba7fcb811252a04d483ac8d 100644
--- a/indra/newview/skins/default/xui/de/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml
@@ -1,316 +1,118 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Mitglieder und Rollen" name="roles_tab">
-	<string name="default_needs_apply_text">
-		Das Unterregister enthält nicht übernommene Änderungen.
-	</string>
-	<string name="want_apply_text">
-		Diese Änderungen übernehmen?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Mitglieder und Rollen
-		</text>
-		<text name="static2">
-			Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="role_properties_modifiable">
-			Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen.
-		</text>
-		<text name="role_actions_modifiable">
-			Sie können der Rolle auch Fähigkeiten zuweisen.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Fähigkeiten
-		</text>
-		<text name="static2">
-			Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder diese Fähigkeit haben.
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="Mitgliedsname" name="name"/>
-				<column label="Ãœbertragene Landanteile" name="donated"/>
-				<column label="Letzte Anmeldung" name="online"/>
-			</name_list>
-			<button label="Neues Mitglied einladen..." name="member_invite"/>
-			<button label="Aus Gruppe werfen" name="member_eject"/>
-			<string name="help_text">
-				Sie können Mitgliedern Rollen zuweisen und entziehen.
-Drücken Sie die Strg-Taste und klicken Sie auf Namen,
-um mehrere Mitglieder auszuwählen.
-			</string>
-		</panel>
-		<panel label="Rollen" name="roles_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="Rolle" name="name"/>
-				<column label="Titel" name="title"/>
-				<column label="Mitglieder" name="members"/>
-			</scroll_list>
-			<button label="Neue Rolle erstellen..." name="role_create"/>
-			<button label="Rolle löschen" name="role_delete"/>
-			<string name="help_text">
-				Rollen haben einen Titel und umfassen bestimmte
-Fähigkeiten. Mitglieder können mehrere 
-Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
-definieren, darunter „Jeder“ und „Eigentümer“.
-			</string>
-			<string name="cant_delete_role">
-				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
-			</string>
-		</panel>
-		<panel label="Fähigkeiten" name="actions_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
-Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="static2">
-			Zulässige Fähigkeiten
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Name
-		</text>
-		<text name="static2">
-			Beschreibung
-		</text>
-		<line_editor name="role_name">
-			Angestellte
-		</line_editor>
-		<text name="static3">
-			Titel
-		</text>
-		<line_editor name="role_title">
-			(wartet)
-		</line_editor>
-		<text_editor name="role_description">
-			(wartet)
-		</text_editor>
-		<text name="static4">
-			Mitglieder in Rolle
-		</text>
-		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
-			Zulässige Fähigkeiten
-		</text>
-		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Beschreibung
-		</text>
-		<text_editor name="action_description">
-			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
-		</text_editor>
-		<text name="static2">
-			Rollen mit Fähigkeit
-		</text>
-		<text name="static3">
-			Mitglieder mit Fähigkeit
-		</text>
-	</panel>
-</panel>
-
-<!-- original file
-
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Mitglieder und Rollen" name="roles_tab">
-	<string name="default_needs_apply_text">
-		Das Unterregister enthält nicht übernommene Änderungen.
-	</string>
-	<string name="want_apply_text">
-		Diese Änderungen übernehmen?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Mitglieder und Rollen
-		</text>
-		<text name="static2">
-			Gruppenmitgliedern werden Rollen mit Fähigkeiten zugewiesen. Diese Einstellungen können zur flexibleren Organisation angepasst werden.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="role_properties_modifiable">
-			Wählen Sie eine Rolle. Sie können ihren Namen, ihre Beschreibung und den Mitgliedstitel ändern.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Rolle anklicken um Mitglieder und Fähigkeiten anzuzeigen.
-		</text>
-		<text name="role_actions_modifiable">
-			Sie können der Rolle auch Fähigkeiten zuweisen.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Sie können zugewiesene Fähigkeiten anzeigen, aber nicht bearbeiten.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Fähigkeiten
-		</text>
-		<text name="static2">
-			Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. 
-Mitglieder diese Fähigkeit haben.
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="Mitgliedsname" name="name" width="116"/>
-				<column label="Ãœbertragene Landanteile" name="donated" width="156"/>
-				<column label="Letzte Anmeldung" name="online"/>
-			</name_list>
-			<button label="Neues Mitglied einladen..." name="member_invite"/>
-			<button label="Aus Gruppe werfen" name="member_eject"/>
-			<string name="help_text">
-				Sie können Mitgliedern Rollen zuweisen und entziehen.
-Drücken Sie die Strg-Taste und klicken Sie auf Namen,
-um mehrere Mitglieder auszuwählen.
-			</string>
-		</panel>
-		<panel label="Rollen" name="roles_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="Rolle" name="name" width="126"/>
-				<column label="Titel" name="title" width="180"/>
-				<column label="Mitglieder" name="members" width="82"/>
-			</scroll_list>
-			<button label="Neue Rolle erstellen..." name="role_create"/>
-			<button label="Rolle löschen" name="role_delete"/>
-			<string name="help_text">
-				Rollen haben einen Titel und umfassen bestimmte
-Fähigkeiten. Mitglieder können mehrere 
-Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
-definieren, darunter „Jeder“ und „Eigentümer“.
-			</string>
-			<string name="cant_delete_role">
-				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
-			</string>
-		</panel>
-		<panel label="Fähigkeiten" name="actions_sub_tab">
-			<button label="Suchen" name="search_button"/>
-			<button label="Alle anzeigen" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
-Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rollen
-		</text>
-		<text name="static2">
-			Zulässige Fähigkeiten
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Name
-		</text>
-		<text name="static2">
-			Beschreibung
-		</text>
-		<line_editor name="role_name">
-			Angestellte
-		</line_editor>
-		<text name="static3">
-			Titel
-		</text>
-		<line_editor name="role_title">
-			(wartet)
-		</line_editor>
-		<text_editor name="role_description">
-			(wartet)
-		</text_editor>
-		<text name="static4">
-			Mitglieder in Rolle
-		</text>
-		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
-			Zulässige Fähigkeiten
-		</text>
-		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Beschreibung
-		</text>
-		<text_editor name="action_description">
-			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
-		</text_editor>
-		<text name="static2">
-			Rollen mit Fähigkeit
-		</text>
-		<text name="static3">
-			Mitglieder mit Fähigkeit
-		</text>
-	</panel>
-</panel>
-
--->
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Mitglieder und Rollen" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		Das Unterregister enthält nicht übernommene Änderungen.
+	</panel.string>
+	<panel.string name="want_apply_text">
+		Diese Änderungen übernehmen?
+	</panel.string>
+	<tab_container name="roles_tab_container">
+		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
+			<panel.string name="help_text">
+				Sie können Mitgliedern Rollen zuweisen und entziehen.
+Drücken Sie die Strg-Taste und klicken Sie auf Namen,
+um mehrere Mitglieder auszuwählen.
+			</panel.string>
+			<filter_editor label="Mitglieder filtern" name="filter_input"/>
+			<name_list name="member_list">
+				<name_list.columns label="Mitglied" name="name"/>
+				<name_list.columns label="Ãœbereignungen" name="donated"/>
+				<name_list.columns label="Online" name="online"/>
+			</name_list>
+			<button label="Einladen" name="member_invite"/>
+			<button label="Hinauswerfen" name="member_eject"/>
+		</panel>
+		<panel label="Rollen" name="roles_sub_tab">
+			<panel.string name="help_text">
+				Rollen haben einen Titel und umfassen bestimmte
+Fähigkeiten. Mitglieder können mehrere 
+Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen
+definieren, darunter „Jeder“ und „Eigentümer“.
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				Die Rollen „Jeder“ und „Eigentümer“ können nicht gelöscht werden.
+			</panel.string>
+			<filter_editor label="Rollen filtern" name="filter_input"/>
+			<scroll_list name="role_list">
+				<scroll_list.columns label="Rolle" name="name"/>
+				<scroll_list.columns label="Titel" name="title"/>
+				<scroll_list.columns label="Mitglieder" name="members"/>
+			</scroll_list>
+			<button label="Rolle hinzufügen" name="role_create"/>
+			<button label="Rolle löschen" name="role_delete"/>
+		</panel>
+		<panel label="Fähigkeiten" name="actions_sub_tab" tool_tip="Sie können Fähigkeiten-Beschreibungen anzeigen und welche Rollen bzw. Mitglieder über diese Fähigkeit verfügen.">
+			<panel.string name="help_text">
+				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
+Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
+			</panel.string>
+			<filter_editor label="Fähigkeiten filtern" name="filter_input"/>
+			<scroll_list name="action_list" tool_tip="Select an Ability to view more details.">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			Rollen
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			Zulässige Fähigkeiten
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			Name
+		</text>
+		<line_editor name="role_name">
+			Angestellte
+		</line_editor>
+		<text name="static3">
+			Titel
+		</text>
+		<line_editor name="role_title">
+			(wartet)
+		</line_editor>
+		<text name="static2">
+			Beschreibung
+		</text>
+		<text_editor name="role_description">
+			(wartet)
+		</text_editor>
+		<text name="static4">
+			Mitglieder in Rolle
+		</text>
+		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte „Allgemein“ für Personen außerhalb der Gruppe sichtbar sind."/>
+		<text name="static5" tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
+			Zulässige Fähigkeiten
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="Um detaillierte Informationen zu erlaubten Fähigkeiten anzuzeigen, siehe Reiter Fähigkeiten.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			Beschreibung
+		</text>
+		<text_editor name="action_description">
+			Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden.
+		</text_editor>
+		<text name="static2">
+			Rollen mit Fähigkeit
+		</text>
+		<text name="static3">
+			Mitglieder mit Fähigkeit
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..487eb07b9e4b2eb473a102a2b13f0b60ced0b113
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="Profil anzeigen" name="view_profile_btn"/>
+	<button label="Freund hinzufügen" name="add_friend_btn"/>
+	<button label="Freigeben" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="Anrufen" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 93f2d6c2576aad9e8526d1daf5c2828c4b96304f..dc170ce245faa83c65eb8180d2d1953867385e0a 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -1,43 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_login">
-	<text name="first_name_text">
-		Vorname:
-	</text>
-	<text name="last_name_text">
-		Nachname:
-	</text>
-	<text name="password_text">
-		Kennwort:
-	</text>
-	<text name="start_location_text">
-		Startposition:
-	</text>
-	<combo_box name="start_location_combo">
-		<combo_box.item name="MyHome" label="Mein Heimatort" />
-		<combo_box.item name="MyLastLocation" label="Mein letzter Standort" />
-		<combo_box.item name="Typeregionname" label="&lt;Region eingeben&gt;" />
-	</combo_box>
-	<check_box label="Kennwort merken" name="remember_check"/>
-	<text name="full_screen_text">
-		Die Anzeige schaltet bei Anmeldung auf Vollbild um.
-	</text>
-	<button label="Neues Konto..." label_selected="Neues Konto..." name="new_account_btn"/>
-	<button label="Einstellungen..." label_selected="Einstellungen..." name="preferences_btn"/>
-	<button label="Anmelden" label_selected="Anmelden" name="connect_btn"/>
-	<button label="Beenden" label_selected="Beenden" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		Konto erstellen
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-	<text name="forgot_password_text">
-		Namen oder Kennwort vergessen?
-	</text>
-	<text name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://de.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] Vorname"/>
+		<line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Nachname"/>
+		<text name="start_location_text">
+			Startposition:
+		</text>
+		<text name="create_new_account_text">
+			Neues Konto erstellen
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb4f3e0f53d0bc0ad64442617a206f4b13714879
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="Zum Chatten hier klicken." name="chat_box" tool_tip="Eingabe drücken, um zu sprechen, Strg-Eingabe drücken, um zu Rufen."/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8c1de575e920c0b11169ab0d1a0d3854346b2826
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_pick_info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_pick_info">
+	<text name="title" value="Auswahl-Info"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="pick_name" value="[name]"/>
+			<text name="pick_location" value="[wird geladen...]"/>
+			<text name="pick_desc" value="[description]"/>
+		</panel>
+	</scroll_container>
+	<panel name="buttons">
+		<button label="Teleportieren" name="teleport_btn"/>
+		<button label="Karte" name="show_on_map_btn"/>
+		<button label="Bearbeiten" name="edit_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb25fe89fddbee4f29346928b92d4c9dfc32e31a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Auswahl" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="Aktuellen Standort zur Auswahl hinzufügen"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="Karte" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index c99ba9a118d15a936f0e073989ca9ad0930b76df..a9526c901490b6852963362868782976ee20c07f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -1,58 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Text-Chat" name="chat">
-	<text name="text_box">
-		Chat-Schriftgröße:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="Klein" />
-		<radio_item name="radio2" label="Mittel" />
-		<radio_item name="radio3" label="Groß" />
-	</radio_group>
-	<color_swatch label="Sie" name="user"/>
-	<text name="text_box1">
-		Sie
-	</text>
-	<color_swatch label="Andere" name="agent"/>
-	<text name="text_box2">
-		Andere
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="System" name="system"/>
-	<text name="text_box4">
-		System
-	</text>
-	<color_swatch label="Skriptfehler" name="script_error"/>
-	<text name="text_box5">
-		Skriptfehler
-	</text>
-	<color_swatch label="Objekte" name="objects"/>
-	<text name="text_box6">
-		Objekte
-	</text>
-	<color_swatch label="Eigentümer" name="owner"/>
-	<text name="text_box7">
-		Eigentümer
-	</text>
-	<color_swatch label="Blase" name="background"/>
-	<text name="text_box8">
-		Blase
-	</text>
-	<color_swatch label="URLs" name="links"/>
-	<text name="text_box9">
-		URLs
-	</text>
-	<spinner label="Chat ausblenden nach" label_width="115" left="148" name="fade_chat_time" width="160"/>
-	<spinne left="370" name="max_chat_count"/>
-	<slider label="Deckkraft" name="console_opacity"/>
-	<check_box label="Chat verwendet volle Bildbreite (Neustart erforderlich)" name="chat_full_width_check"/>
-	<check_box label="Chatleiste nach Drücken der Eingabetaste schließen" name="close_chat_on_return_check"/>
-	<check_box label="Pfeiltasten bewegen immer den Avatar beim Chatten" name="arrow_keys_move_avatar_check"/>
-	<check_box label="Zeitstempel im lokalen Chat anzeigen" name="show_timestamps_check"/>
-	<check_box label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
-	<check_box label="Chat-Blasen anzeigen" name="bubble_text_chat"/>
-	<slider label="Deckkraft" name="bubble_chat_opacity"/>
-	<check_box label="Skriptfehler und Warnungen als normalen Chat anzeigen" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Text-Chat" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="Klein" name="radio"/>
+		<radio_item label="Mittel" name="radio2"/>
+		<radio_item label="Groß" name="radio3"/>
+	</radio_group>
+	<color_swatch label="Sie" name="user"/>
+	<text name="text_box1">
+		Ich
+	</text>
+	<color_swatch label="Andere" name="agent"/>
+	<text name="text_box2">
+		Andere
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="System" name="system"/>
+	<text name="text_box4">
+		System
+	</text>
+	<color_swatch label="Skriptfehler" name="script_error"/>
+	<text name="text_box5">
+		Skriptfehler
+	</text>
+	<color_swatch label="Objekte" name="objects"/>
+	<text name="text_box6">
+		Objekte
+	</text>
+	<color_swatch label="Eigentümer" name="owner"/>
+	<text name="text_box7">
+		Eigentümer
+	</text>
+	<color_swatch label="URLs" name="links"/>
+	<text name="text_box9">
+		URLs
+	</text>
+	<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
+	<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index fe0740690879834edd9470ac5d72b58fd942794c..7008389dd7f4ac3731d90df942ba78215e610162 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -1,171 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Grafik" name="Display panel">
-	<text name="text">
-		Anzeigeauflösung:
-	</text>
-	<button label=" ?" name="GraphicsPreferencesHelpButton" />
-	<check_box label="Second Life in einem Fenster ausführen" name="windowed mode" />
-	<text_editor name="voice_chat_description">
-		Wenn deaktiviert Anzeige bei Anmeldung in Vollbild.
-	</text_editor>
-	<text name="Fullscreen Aspect Ratio:">
-		Vollbild-Aspektverhältnis:
-	</text>
-	<text name="(width / height)">
-		(Breite/Höhe)
-	</text>
-	<text_editor name="FullScreenInfo" width="480">
-		Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um.
-	</text_editor>
-	<text name="WindowSizeLabel">
-		Fenstergröße:
-	</text>
-	<combo_box left="115" name="windowsize combo">
-		<combo_box.item name="640x480" label="640x480" />
-		<combo_box.item name="800x600" label="800x600" />
-		<combo_box.item name="720x480" label="720x480 (NTSC)" />
-		<combo_box.item name="768x576" label="768x576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024x768" />
-	</combo_box>
-	<text name="DisplayResLabel" width="100">
-		Anzeigeauflösung:
-	</text>
-	<combo_box left="115" name="fullscreen combo" />
-	<text name="AspectRatioLabel1" tool_tip="Breite/Höhe" width="100">
-		Aspektverhältnis:
-	</text>
-	<combo_box left="115" name="aspect_ratio" tool_tip="Breite/Höhe">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard-CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" />
-	</combo_box>
-	<check_box label="Verhältnis automatisch erkennen" left="275" name="aspect_auto_detect" />
-	<text name="UI Size:">
-		UI-Größe:
-	</text>
-	<text name="(meters, lower is faster)">
-		(Meter, niedriger ist schneller)
-	</text>
-	<text name="text2">
-		Anzeigeoptionen:
-	</text>
-	<check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale" />
-	<spinner label="Sichtweite:" name="draw_distance" />
-	<check_box label="Avatar in Mouselook anzeigen" name="avfp" />
-	<text name="HigherText">
-		Qualität und
-	</text>
-	<text name="QualityText">
-		Performance:
-	</text>
-	<text name="FasterText">
-		Schneller
-	</text>
-	<text name="ShadersPrefText">
-		Niedrig
-	</text>
-	<text name="ShadersPrefText2">
-		Mittel
-	</text>
-	<text name="ShadersPrefText3">
-		Hoch
-	</text>
-	<text name="ShadersPrefText4">
-		Ultra
-	</text>
-	<text name="HigherText2">
-		Höhere
-	</text>
-	<text name="QualityText2">
-		Qualität
-	</text>
-	<check_box label="Benutzerdefiniert" name="CustomSettings" />
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		Shader:
-	</text>
-	<check_box label="Bumpmapping und Glanz" name="BumpShiny" />
-	<check_box label="Einfache Shader" name="BasicShaders"
-	     tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht." />
-	<check_box label="Atmosphären-Shader" name="WindLightUseAtmosShaders" />
-	<check_box label="Wasserreflexionen" name="Reflections" />
-	<text name="ReflectionDetailText">
-		Spiegelung:
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="Terrain und Bäume" />
-		<radio_item name="1" label="Alle statischen Objekte" />
-		<radio_item name="2" label="Alle Avatare und Objekte" />
-		<radio_item name="3" label="Alles" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		Avatar-Darstellung:
-	</text>
-	<check_box label="Ersatzavatare" name="AvatarImpostors" />
-	<check_box label="Hardware-Hautberechnung" name="AvatarVertexProgram" />
-	<check_box label="Avatar-Kleidung" name="AvatarCloth" />
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="Sichtweite:" name="DrawDistance" />
-	<slider label="Max. Partikelzahl:" name="MaxParticleCount" />
-	<slider label="Post-Processing-Qualität:" name="RenderPostProcess" />
-	<text name="MeshDetailText">
-		Gitterdetails:
-	</text>
-	<slider label="   Objekte:" name="ObjectMeshDetail" />
-	<slider label="   Flexiprimitiva:" name="FlexibleMeshDetail" />
-	<slider label="   Bäume:" name="TreeMeshDetail" />
-	<slider label="   Avatare:" name="AvatarMeshDetail" />
-	<slider label="   Terrain:" name="TerrainMeshDetail" />
-	<slider label="   Himmel:" name="SkyMeshDetail" />
-	<text name="PostProcessText">
-		Niedrig
-	</text>
-	<text name="ObjectMeshDetailText">
-		Niedrig
-	</text>
-	<text name="FlexibleMeshDetailText">
-		Niedrig
-	</text>
-	<text name="TreeMeshDetailText">
-		Niedrig
-	</text>
-	<text name="AvatarMeshDetailText">
-		Niedrig
-	</text>
-	<text name="TerrainMeshDetailText">
-		Niedrig
-	</text>
-	<text name="SkyMeshDetailText">
-		Niedrig
-	</text>
-	<text name="LightingDetailText">
-		Beleuchtungsdetails:
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="Nur Sonne und Mond" />
-		<radio_item name="LocalLights" label="Lokale Lichtquellen" />
-	</radio_group>
-	<text name="TerrainDetailText">
-		Terraindetails:
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="Niedrig" />
-		<radio_item name="2" label="Hoch" />
-	</radio_group>
-	</panel>
-	<button label="Empfohlene Einstellungen" name="Defaults" />
-	<button label="Hardware-Optionen" label_selected="Hardware-Optionen"
-	     name="GraphicsHardwareButton" />
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Grafik" name="Display panel">
+	<text name="WindowSizeLabel">
+		Fenstergröße:
+	</text>
+	<check_box label="Vollbildmodus verwenden" name="windowed mode"/>
+	<combo_box left="115" name="windowsize combo">
+		<combo_box.item label="640x480" name="640x480"/>
+		<combo_box.item label="800x600" name="800x600"/>
+		<combo_box.item label="720x480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768x576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024x768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		UI-Größe:
+	</text>
+	<text name="QualitySpeed">
+		Qualität und Geschwindigkeit:
+	</text>
+	<text name="FasterText">
+		Schneller
+	</text>
+	<text name="BetterText">
+		Besser
+	</text>
+	<text name="ShadersPrefText">
+		Niedrig
+	</text>
+	<text name="ShadersPrefText2">
+		Mittel
+	</text>
+	<text name="ShadersPrefText3">
+		Hoch
+	</text>
+	<text name="ShadersPrefText4">
+		Ultra
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			Shader:
+		</text>
+		<check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/>
+		<check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht."/>
+		<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="Wasserreflexionen" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			Spiegelung:
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="Terrain und Bäume" name="0"/>
+			<radio_item label="Alle statischen Objekte" name="1"/>
+			<radio_item label="Alle Avatare und Objekte" name="2"/>
+			<radio_item label="Alles" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			Avatar-Darstellung:
+		</text>
+		<check_box initial_value="true" label="Ersatzavatare" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Hardware-Hautberechnung" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Avatar-Kleidung" name="AvatarCloth"/>
+		<slider label="Sichtweite:" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="Max. Partikelzahl:" name="MaxParticleCount"/>
+		<slider label="Post-Processing-Qualität:" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			Gitterdetails:
+		</text>
+		<slider label="   Objekte:" name="ObjectMeshDetail"/>
+		<slider label="   Flexiprimitiva:" name="FlexibleMeshDetail"/>
+		<slider label="   Bäume:" name="TreeMeshDetail"/>
+		<slider label="   Avatare:" name="AvatarMeshDetail"/>
+		<slider label="   Terrain:" name="TerrainMeshDetail"/>
+		<slider label="   Himmel:" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			Niedrig
+		</text>
+		<text name="ObjectMeshDetailText">
+			Niedrig
+		</text>
+		<text name="FlexibleMeshDetailText">
+			Niedrig
+		</text>
+		<text name="TreeMeshDetailText">
+			Niedrig
+		</text>
+		<text name="AvatarMeshDetailText">
+			Niedrig
+		</text>
+		<text name="TerrainMeshDetailText">
+			Niedrig
+		</text>
+		<text name="SkyMeshDetailText">
+			Niedrig
+		</text>
+		<text name="LightingDetailText">
+			Beleuchtungsdetails:
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="Nur Sonne und Mond" name="SunMoon"/>
+			<radio_item label="Lokale Lichtquellen" name="LocalLights"/>
+		</radio_group>
+		<text name="TerrainDetailText">
+			Terraindetails:
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="Niedrig" name="0"/>
+			<radio_item label="Hoch" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="Ãœbernehmen" label_selected="Ãœbernehmen" name="Apply"/>
+	<button label="Zurücksetzen" name="Defaults"/>
+	<button label="Erweitert" name="Advanced"/>
+	<button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
index b52e53511499147891ce87c5d85d9039e9b96670..d5305d3cbe3eb8b0ebf6cd6a9d7a3a6a402eb85f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="Kommunikation" name="im">
-	<text name="text_box">
-		Mein Onlinestatus:
-	</text>
-	<check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
-	<text name="text_box2">
-		IM-Optionen:
-	</text>
-	<text name="log_in_to_change">
-		Zum Ändern anmelden
-	</text>
-	<check_box label="IM an E-Mail senden ([EMAIL])" name="send_im_to_email"/>
-	<check_box label="IM in Chat-Konsole anzeigen" name="include_im_in_chat_console"/>
-	<check_box label="Zeitstempel in IM anzeigen" name="show_timestamps_check"/>
-	<check_box label="Online-Freundbenachrichtigungen anzeigen" name="friends_online_notify_checkbox"/>
-	<text name="text_box3">
-		Antwort für 
-Beschäftigt-Modus:
-	</text>
-	<text name="text_box4">
-		Protokolloptionen:
-	</text>
-	<check_box label="IM-Verlauf auf meinem Computer speichern" name="log_instant_messages"/>
-	<check_box label="Zeitstempel in IM-Verlauf anzeigen" name="log_instant_messages_timestamp"/>
-	<check_box label="Ende des letzten IM-Gesprächs anzeigen" name="log_show_history"/>
-	<check_box label="Verlauf des lokalen Chats auf meinem Computer speichern" name="log_chat"/>
-	<check_box label="Zeitstempel im Verlauf des lokalen Chats anzeigen" name="log_chat_timestamp"/>
-	<check_box label="Eingehende IM in Chat-Verlauf anzeigen" name="log_chat_IM"/>
-	<check_box label="Datum mit Zeitstempeln hinzufügen" name="log_date_timestamp"/>
-	<button label="Pfad ändern" label_selected="Pfad ändern" name="log_path_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kommunikation" name="im">
+	<panel.string name="log_in_to_change">
+		Zum Ändern anmelden
+	</panel.string>
+	<button label="Cache löschen" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(Positionen, Bilder, Internet, Suchverlauf)
+	</text>
+	<check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
+	<check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
+	<check_box label="Nach Beendigung von Anrufen Mikrofon abschalten." name="auto_disengage_mic_check"/>
+	<check_box label="Cookies annehmen" name="cookies_enabled"/>
+	<check_box label="Protokoll auf meinem Computer speichern" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="Chat" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="log_path_button"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 97ec745d4dc9fb8566d572d2ac24dfb1164509e1..a2c317acbb17deb8ac2bf53dde250c482c7804bb 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -1,30 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Kamera" name="Input panel">
-	<text name=" Mouselook Options:">
-		Mouselook-Optionen:
-	</text>
-	<text name=" Mouse Sensitivity:">
-		Mausempfindlichkeit:
-	</text>
-	<check_box label="Maus umkehren" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		Auto-Flug-Optionen:
-	</text>
-	<check_box label="Zum Fliegen/Landen nach oben/unten halten" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		Kameraoptionen:
-	</text>
-	<text name="camera_fov_label">
-		Kamera-Sichtwinkel:
-	</text>
-	<text name="Camera Follow Distance:">
-		Kameraabstand:
-	</text>
-	<check_box label="Automatischer Kameraschwenk im Bearbeiten-Modus" name="edit_camera_movement" tool_tip="Automatische Kamerapositionierung bei Wechsel in und aus dem Bearbeitungsmodus verwenden"/>
-	<check_box label="Automatischer Kameraschwenk im Aussehen-Modus" name="appearance_camera_movement" tool_tip="Automatische Kamerapositionierung im Bearbeitenmodus verwenden"/>
-	<text name="text2">
-		Avatar-Anzeigeoptionen:
-	</text>
-	<check_box label="Avatar in Mouselook anzeigen" name="first_person_avatar_visible"/>
-	<button label="Joystick-Einrichtung" name="joystick_setup_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Kamera" name="Input panel">
+	<button label="Andere Geräte" name="joystick_setup_button"/>
+	<text name="Mouselook:">
+		Mouselook:
+	</text>
+	<text name=" Mouse Sensitivity">
+		Mausempfindlichkeit:
+	</text>
+	<check_box label="Umkehren" name="invert_mouse"/>
+	<text name="Network:">
+		Netzwerk:
+	</text>
+	<text name="Maximum bandwidth">
+		Maximale Bandbreite
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="Benutzerdefinierter Port" name="connection_port_enabled"/>
+	<spinner label="Port-Nummer:" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		Cache
+	</text>
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
+	<button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache"/>
+	<text name="Cache location">
+		Cache-Ordner
+	</text>
+	<text name="Web:">
+		Internet:
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Den integrierten Browser für Hilfe, Internetlinks, usw. verwenden. Der Browser wird als eigenständiges Fenster in [APP_NAME] geöffnet."/>
+		<radio_item label="Meinen Browser verwenden (IE, Firefox)" name="external" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."/>
+	</radio_group>
+	<check_box initial_value="false" label="Web-Proxy:" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="Name oder IP-Adresse des Proxys"/>
+	<button label="Durchsuchen" label_selected="Durchsuchen" name="set_proxy"/>
+	<text name="Proxy location">
+		Proxy-Standort
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
new file mode 100644
index 0000000000000000000000000000000000000000..907803b32f05cb1fdb3f1dc776c2f11d392244b9
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=de-DE
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=de-DE"/>
+	<string name="no_partner_text" value="Keiner"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="Echtes Leben:"/>
+			</panel>
+			<text name="me_homepage_text">
+				Webseite:
+			</text>
+			<text name="title_member_text" value="Mitglied seit:"/>
+			<text name="title_acc_status_text" value="Kontostatus:"/>
+			<text name="title_partner_text" value="Partner:"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="Gruppen:"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="Freund hinzufügen" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="Anrufen" name="call"/>
+		<button label="Teleportieren" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="Profil bearbeiten" name="edit_profile_btn"/>
+		<button label="Aussehen bearbeiten" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ae27907aa0ebe749d0f739362b460d6f120de42
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		Online
+	</string>
+	<string name="status_offline">
+		Offline
+	</string>
+	<text name="user_name" value="(wird geladen...)"/>
+	<text name="status" value="Online"/>
+	<tab_container name="tabs">
+		<panel label="Profil" name="panel_profile"/>
+		<panel label="Auswahl" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1208f19cf5b1e810eddf1eb3af8acaab3967cc1
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		Wird geladen...
+	</panel.string>
+	<panel.string name="can_not_view">
+		Dieses Skript kann nicht angezeigt oder bearbeitet werden, da als Berechtigung „kein kopieren&quot; festgelegt wurde. Um ein Skript innerhalb eines Objektes anzuzeigen oder zu bearbeiten, benötigen Sie die vollständige Berechtigung.
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		Öffentliche Objekte können keine Skripts ausführen
+	</panel.string>
+	<panel.string name="script_running">
+		Läuft
+	</panel.string>
+	<panel.string name="Title">
+		Skript: [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		Wird geladen...
+	</text_editor>
+	<button label="Speichern" label_selected="Speichern" name="Save_btn"/>
+	<combo_box label="Einfügen..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="Datei" name="File">
+			<menu_item_call label="Speichern" name="Save"/>
+			<menu_item_call label="Alle Änderungen zurücksetzen" name="Revert All Changes"/>
+		</menu>
+		<menu label="Bearbeiten" name="Edit">
+			<menu_item_call label="Rückgängig" name="Undo"/>
+			<menu_item_call label="Wiederherstellen" name="Redo"/>
+			<menu_item_call label="Ausschneiden" name="Cut"/>
+			<menu_item_call label="Kopieren" name="Copy"/>
+			<menu_item_call label="Einfügen" name="Paste"/>
+			<menu_item_call label="Alle auswählen" name="Select All"/>
+			<menu_item_call label="Auswahl aufheben" name="Deselect"/>
+			<menu_item_call label="Suchen / Ersetzen..." name="Search / Replace..."/>
+		</menu>
+		<menu label="Hilfe" name="Help">
+			<menu_item_call label="Hilfe..." name="Help..."/>
+			<menu_item_call label="Schlüsselwort-Hilfe" name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
new file mode 100644
index 0000000000000000000000000000000000000000..59fee002b8bdff5360cfb90d5274f91bb688e375
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="Stehen" name="stand_btn" tool_tip="Klicken Sie hier, um aufzustehen."/>
+	<button label="Landen" name="stop_fly_btn" tool_tip="Landen"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml
index 01091e38fbd6b95a3c1c0a6629bee63c25499169..0ca050c81f2d9b26cba4b5d012eec37cdc65d06f 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -1,42 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen.">
-		Parzellenname hier
-	</text>
-	<text name="BalanceText" tool_tip="Kontostand">
-		Wird geladen...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen"/>
-	<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
-		12:00
-	</text>
-	<text name="StatBarDaysOfWeek">
-		Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
-	</text>
-	<text name="StatBarMonthsOfYear">
-		Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
-	</text>
-	<button label="" label_selected="" name="scriptout" tool_tip="Skriptwarnungen und -fehler"/>
-	<button label="" label_selected="" name="health" tool_tip="Gesundheit"/>
-	<text name="HealthText" tool_tip="Gesundheit">
-		100%
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="Fliegen aus"/>
-	<button label="" label_selected="" name="build" tool_tip="Bauen aus"/>
-	<button label="" label_selected="" name="scripts" tool_tip="Skripts aus"/>
-	<button name="no_fly" tool_tip="Fliegen ist unzulässig"/>
-	<button name="no_build" tool_tip="Bauen/Rezzen ist unzulässig"/>
-	<button name="no_scripts" tool_tip="Skripte sind unzulässig"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="Kein Stoßen"/>
-	<button name="status_voice" tool_tip="Voice aktiviert"/>
-	<button name="status_no_voice" tool_tip="Voice hier nicht möglich"/>
-	<button label="" label_selected="" name="buyland" tool_tip="Diese Parzelle kaufen"/>
-	<text name="packet_loss_tooltip">
-		Paketverlust
-	</text>
-	<text name="bandwidth_tooltip">
-		Bandbreite
-	</text>
-	<line_editor label="Suchen" name="search_editor" tool_tip="[SECOND_LIFE] durchsuchen"/>
-	<button name="search_btn" tool_tip="[SECOND_LIFE] durchsuchen"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Paketverlust
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bandbreite
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand: Hier klicken, um mehr L$ zu kaufen"/>
+	<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
+		12:00
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml
index 7b18c5e822edfa2ec610c7333ef0ea0887e3d31b..d83d32a9525e6102844d9a06668cd7d8f454201e 100644
--- a/indra/newview/skins/default/xui/de/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/de/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		N
-	</panel.string>
-	<panel.string name="world_map_east">
-		O
-	</panel.string>
-	<panel.string name="world_map_west">
-		W
-	</panel.string>
-	<panel.string name="world_map_south">
-		S
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		SO
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		NO
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		SW
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		NW
-	</panel.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="O" name="floater_map_east" text="O">
-		O
-	</text>
-	<text label="W" name="floater_map_west" text="W">
-		W
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SO" name="floater_map_southeast" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northeast" text="NO">
-		NO
-	</text>
-	<text label="SW" name="floater_map_southwest" text="SW">
-		SW
-	</text>
-	<text label="NW" name="floater_map_northwest" text="NW">
-		NW
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		Wird geladen...
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		Ungültige Position
+	</panel.string>
+	<panel.string name="world_map_north">
+		N
+	</panel.string>
+	<panel.string name="world_map_east">
+		O
+	</panel.string>
+	<panel.string name="world_map_west">
+		W
+	</panel.string>
+	<panel.string name="world_map_south">
+		S
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		SO
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		NO
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		SW
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		NW
+	</panel.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="O" name="floater_map_east" text="O">
+		O
+	</text>
+	<text label="W" name="floater_map_west" text="W">
+		W
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SO" name="floater_map_southeast" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northeast" text="NO">
+		NO
+	</text>
+	<text label="SW" name="floater_map_southwest" text="SW">
+		SW
+	</text>
+	<text label="NW" name="floater_map_northwest" text="NW">
+		NW
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index af9185e0b7d919383505843685720648aeb25f4a..e1ba2025cdde1b04fea27af67ea91e897a8c56f7 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1,654 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht.  Bitte warten.
-	</string>
-	<string name="LoginAuthenticating">
-		Authentifizierung
-	</string>
-	<string name="LoginMaintenance">
-		Account wird aktualisiert...
-	</string>
-	<string name="LoginAttempt">
-		Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER]
-	</string>
-	<string name="LoginPrecaching">
-		Welt wird geladen...
-	</string>
-	<string name="LoginInitializingBrowser">
-		Integrierter Webbrowser wird initialisiert...
-	</string>
-	<string name="LoginInitializingMultimedia">
-		Multimedia wird initialisiert...
-	</string>
-	<string name="LoginVerifyingCache">
-		Cache-Dateien werden überprüft (dauert 60-90 Sekunden)...
-	</string>
-	<string name="LoginProcessingResponse">
-		Antwort wird verarbeitet...
-	</string>
-	<string name="LoginInitializingWorld">
-		Welt wird initialisiert...
-	</string>
-	<string name="LoginDecodingImages">
-		Bilder werden entpackt...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		QuickTime wird initialisiert...
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		QuickTime nicht gefunden - Initialisierung nicht möglich.
-	</string>
-	<string name="LoginQuicktimeOK">
-		QuickTime wurde initialisiert.
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		Region-Handshake...
-	</string>
-	<string name="LoginConnectingToRegion">
-		Region-Verbindung...
-	</string>
-	<string name="LoginDownloadingClothing">
-		Kleidung wird geladen...
-	</string>
-	<string name="AgentLostConnection">
-		In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
-	</string>
-	<string name="TooltipPerson">
-		Person
-	</string>
-	<string name="TooltipNoName">
-		(namenlos)
-	</string>
-	<string name="TooltipOwner">
-		Eigentümer:
-	</string>
-	<string name="TooltipPublic">
-		Öffentlich
-	</string>
-	<string name="TooltipIsGroup">
-		(Gruppe)
-	</string>
-	<string name="TooltipFlagScript">
-		Skript
-	</string>
-	<string name="TooltipFlagPhysics">
-		Physik
-	</string>
-	<string name="TooltipFlagTouch">
-		Berühren
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		Inventar fallen lassen
-	</string>
-	<string name="TooltipFlagPhantom">
-		Phantom
-	</string>
-	<string name="TooltipFlagTemporary">
-		Temporär
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(Rechtsklick für Menü)
-	</string>
-	<string name="TooltipFreeToCopy">
-		Kopieren möglich
-	</string>
-	<string name="TooltipForSaleL$">
-		Zum Verkauf: [AMOUNT] L$
-	</string>
-	<string name="TooltipForSaleMsg">
-		Zum Verkauf: [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		Gruppenbau
-	</string>
-	<string name="TooltipFlagNoBuild">
-		Bauen aus
-	</string>
-	<string name="TooltipFlagNoEdit">
-		Gruppenbau
-	</string>
-	<string name="TooltipFlagNotSafe">
-		Unsicher
-	</string>
-	<string name="TooltipFlagNoFly">
-		Fliegen aus
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		Gruppenskripte
-	</string>
-	<string name="TooltipFlagNoScripts">
-		Skripte aus
-	</string>
-	<string name="TooltipLand">
-		Land:
-	</string>
-	<string name="TooltipMustSingleDrop">
-		Sie können nur ein einzelnes Objekt hierher ziehen
-	</string>
-	<string name="RetrievingData">
-		Laden...
-	</string>
-	<string name="ReleaseNotes">
-		Versionshinweise
-	</string>
-	<string name="LoadingData">
-		Wird geladen...
-	</string>
-	<string name="AvatarNameNobody">
-		(niemand)
-	</string>
-	<string name="AvatarNameWaiting">
-		(wartet)
-	</string>
-	<string name="AvatarNameHippos">
-		(hippos)
-	</string>
-	<string name="GroupNameNone">
-		(keiner)
-	</string>
-	<string name="AssetErrorNone">
-		Kein Fehler
-	</string>
-	<string name="AssetErrorRequestFailed">
-		Asset-Anforderung: fehlgeschlagen
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		Asset-Anforderung: Datei existiert nicht
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		Asset-Anforderung: Asset in Datenbank nicht gefunden
-	</string>
-	<string name="AssetErrorEOF">
-		Ende der Datei
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		Datei kann nicht geöffnet werden
-	</string>
-	<string name="AssetErrorFileNotFound">
-		Datei nicht gefunden
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		Zeitüberschreitung bei Dateiübertragung
-	</string>
-	<string name="AssetErrorCircuitGone">
-		Verbindung verloren
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		Viewer und Server sind sich nicht über Preis einig
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		Status unbekannt
-	</string>
-	<string name="AvatarEditingApparance">
-		(Aussehen wird bearbeitet)
-	</string>
-	<string name="AvatarAway">
-		Abwesend
-	</string>
-	<string name="AvatarBusy">
-		Beschäftigt
-	</string>
-	<string name="AvatarMuted">
-		Stummgeschaltet
-	</string>
-	<string name="anim_express_afraid">
-		Ängstlich
-	</string>
-	<string name="anim_express_anger">
-		Verärgert
-	</string>
-	<string name="anim_away">
-		Abwesend
-	</string>
-	<string name="anim_backflip">
-		Rückwärtssalto
-	</string>
-	<string name="anim_express_laugh">
-		Lachkrampf
-	</string>
-	<string name="anim_express_toothsmile">
-		Grinsen
-	</string>
-	<string name="anim_blowkiss">
-		Kusshand
-	</string>
-	<string name="anim_express_bored">
-		Gelangweilt
-	</string>
-	<string name="anim_bow">
-		Verbeugen
-	</string>
-	<string name="anim_clap">
-		Klatschen
-	</string>
-	<string name="anim_courtbow">
-		Diener
-	</string>
-	<string name="anim_express_cry">
-		Weinen
-	</string>
-	<string name="anim_dance1">
-		Tanz 1
-	</string>
-	<string name="anim_dance2">
-		Tanz 2
-	</string>
-	<string name="anim_dance3">
-		Tanz 3
-	</string>
-	<string name="anim_dance4">
-		Tanz 4
-	</string>
-	<string name="anim_dance5">
-		Tanz 5
-	</string>
-	<string name="anim_dance6">
-		Tanz 6
-	</string>
-	<string name="anim_dance7">
-		Tanz 7
-	</string>
-	<string name="anim_dance8">
-		Tanz 8
-	</string>
-	<string name="anim_express_disdain">
-		Verachten
-	</string>
-	<string name="anim_drink">
-		Trinken
-	</string>
-	<string name="anim_express_embarrased">
-		Verlegen
-	</string>
-	<string name="anim_angry_fingerwag">
-		Drohen
-	</string>
-	<string name="anim_fist_pump">
-		Faust pumpen
-	</string>
-	<string name="anim_yoga_float">
-		Yogaflieger
-	</string>
-	<string name="anim_express_frown">
-		Stirnrunzeln
-	</string>
-	<string name="anim_impatient">
-		Ungeduldig
-	</string>
-	<string name="anim_jumpforjoy">
-		Freudensprung
-	</string>
-	<string name="anim_kissmybutt">
-		LMA
-	</string>
-	<string name="anim_express_kiss">
-		Küssen
-	</string>
-	<string name="anim_laugh_short">
-		Lachen
-	</string>
-	<string name="anim_musclebeach">
-		Posen
-	</string>
-	<string name="anim_no_unhappy">
-		Nein (Bedauernd)
-	</string>
-	<string name="anim_no_head">
-		Nein
-	</string>
-	<string name="anim_nyanya">
-		Ällabätsch
-	</string>
-	<string name="anim_punch_onetwo">
-		Eins-Zwei-Punch
-	</string>
-	<string name="anim_express_open_mouth">
-		Mund offen
-	</string>
-	<string name="anim_peace">
-		Friede
-	</string>
-	<string name="anim_point_you">
-		Auf anderen zeigen
-	</string>
-	<string name="anim_point_me">
-		Auf mich zeigen
-	</string>
-	<string name="anim_punch_l">
-		Linker Haken
-	</string>
-	<string name="anim_punch_r">
-		Rechter Haken
-	</string>
-	<string name="anim_rps_countdown">
-		SSP zählen
-	</string>
-	<string name="anim_rps_paper">
-		SSP Papier
-	</string>
-	<string name="anim_rps_rock">
-		SSP Stein
-	</string>
-	<string name="anim_rps_scissors">
-		SSP Schere
-	</string>
-	<string name="anim_express_repulsed">
-		Angewidert
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		Rundkick
-	</string>
-	<string name="anim_express_sad">
-		Traurig
-	</string>
-	<string name="anim_salute">
-		Salutieren
-	</string>
-	<string name="anim_shout">
-		Rufen
-	</string>
-	<string name="anim_express_shrug">
-		Schulterzucken
-	</string>
-	<string name="anim_express_smile">
-		Lächeln
-	</string>
-	<string name="anim_smoke_idle">
-		Zigarette halten
-	</string>
-	<string name="anim_smoke_inhale">
-		Rauchen
-	</string>
-	<string name="anim_smoke_throw_down">
-		Zigarette wegwerfen
-	</string>
-	<string name="anim_express_surprise">
-		Ãœberraschung
-	</string>
-	<string name="anim_sword_strike_r">
-		Schwerthieb
-	</string>
-	<string name="anim_angry_tantrum">
-		Wutanfall
-	</string>
-	<string name="anim_express_tongue_out">
-		Zunge rausstrecken
-	</string>
-	<string name="anim_hello">
-		Winken
-	</string>
-	<string name="anim_whisper">
-		Flüstern
-	</string>
-	<string name="anim_whistle">
-		Pfeifen
-	</string>
-	<string name="anim_express_wink">
-		Zwinkern
-	</string>
-	<string name="anim_wink_hollywood">
-		Zwinkern (Hollywood)
-	</string>
-	<string name="anim_express_worry">
-		Sorgenvoll
-	</string>
-	<string name="anim_yes_happy">
-		Ja (Erfreut)
-	</string>
-	<string name="anim_yes_head">
-		Ja
-	</string>
-	<string name="texture_loading">
-		Wird geladen...
-	</string>
-	<string name="worldmap_offline">
-		Offline
-	</string>
-	<string name="whisper">
-		flüstert:
-	</string>
-	<string name="shout">
-		ruft:
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		Offline
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		Unbekannt
-	</string>
-	<string name="land_type_unknown">
-		(unbekannt)
-	</string>
-	<string name="covenant_never_modified">
-		Zuletzt geändert: (nie)
-	</string>
-	<string name="covenant_modified">
-		Zuletzt geändert:
-	</string>
-	<string name="all_files">
-		Alle Dateien
-	</string>
-	<string name="sound_files">
-		Sounds
-	</string>
-	<string name="animation_files">
-		Animationen
-	</string>
-	<string name="image_files">
-		Bilder
-	</string>
-	<string name="save_file_verb">
-		Speichern
-	</string>
-	<string name="load_file_verb">
-		Laden
-	</string>
-	<string name="targa_image_files">
-		Targa-Bilder
-	</string>
-	<string name="bitmap_image_files">
-		Bitmap-Bilder
-	</string>
-	<string name="avi_movie_file">
-		AVI-Filmdatei
-	</string>
-	<string name="xaf_animation_file">
-		XAF Anim-Datei
-	</string>
-	<string name="xml_file">
-		XML-Datei
-	</string>
-	<string name="dot_raw_file">
-		RAW-Datei
-	</string>
-	<string name="compressed_image_files">
-		Komprimierte Bilder
-	</string>
-	<string name="load_files">
-		Dateien laden
-	</string>
-	<string name="choose_the_directory">
-		Verzeichnis auswählen
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Strg+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Umschalt+
-	</string>
-	<string name="GraphicsQualityLow">
-		Niedrig
-	</string>
-	<string name="GraphicsQualityMid">
-		Mittel
-	</string>
-	<string name="GraphicsQualityHigh">
-		Hoch
-	</string>
-        
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Lindenort</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Kunst &amp; Kultur</string>
-	<string name="Business">Business</string>
-	<string name="Educational">Bildung</string>
-	<string name="Gaming">Spielen</string>
-	<string name="Hangout">Treffpunkt</string>
-	<string name="Newcomer Friendly">Anfängergerecht</string>
-	<string name="Parks&amp;Nature">Parks und Natur</string>
-	<string name="Residential">Wohngebiet</string>
-	<string name="Shopping">Shopping</string>
-	<string name="Other">Sonstige</string>
-	<string name="ringing">
-		Verbindung mit In-Welt-Voice-Chat...
-	</string>
-	<string name="connected">
-		Verbunden
-	</string>
-	<string name="unavailable">
-		Der aktuelle Standort unterstützt keine Voice-Kommunikation
-	</string>
-	<string name="hang_up">
-		Verbindung mit In-Welt-Voice-Chat getrennt
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS].
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS].
-	</string>
-	<string name="ScriptTakeMoney">
-		Linden-Dollar (L$) von Ihnen nehmen
-	</string>
-	<string name="ActOnControlInputs">
-		Steuerung festlegen
-	</string>
-	<string name="RemapControlInputs">
-		Steuerung neu zuweisen
-	</string>
-	<string name="AnimateYourAvatar">
-		Avatar animieren
-	</string>
-	<string name="AttachToYourAvatar">
-		An Avatar anhängen
-	</string>
-	<string name="ReleaseOwnership">
-		Eigentum aufgeben und öffentlich machen
-	</string>
-	<string name="LinkAndDelink">
-		Mit Objekten verknüpfen und davon trennen
-	</string>
-	<string name="AddAndRemoveJoints">
-		Verbindungen zu anderen Objekten hinzufügen und entfernen
-	</string>
-	<string name="ChangePermissions">
-		Berechtigungen ändern
-	</string>
-	<string name="TrackYourCamera">
-		Kameraverfolgung
-	</string>
-	<string name="ControlYourCamera">
-		Kamerasteuerung
-	</string>
-	<string name="only_user_message">
-		Sie sind der einzige Benutzer in dieser Sitzung.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] ist offline.
-	</string>
-	<string name="invite_message">
-		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
-	</string>
-	<string name="generic_request_error">
-		Fehler bei Anfrage, bitte versuchen Sie es später.
-	</string>
-	<string name="insufficient_perms_error">
-		Sie sind dazu nicht berechtigt.
-	</string>
-	<string name="session_does_not_exist_error">
-		Die Sitzung ist abgelaufen
-	</string>
-	<string name="no_ability_error">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="no_ability">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="not_a_mod_error">
-		Sie sind kein Sitzungsmoderator.
-	</string>
-	<string name="muted_error">
-		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
-	</string>
-	<string name="add_session_event">
-		Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
-	</string>
-	<string name="message_session_event">
-		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
-	</string>
-	<string name="removed_from_group">
-		Sie wurden von der Gruppe ausgeschlossen.
-	</string>
-	<string name="close_on_no_ability">
-		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
-	</string>
-			<string name="AcctTypeResident">
-				Einwohner
-			</string>
-			<string name="AcctTypeTrial">
-				Test
-			</string>
-			<string name="AcctTypeCharterMember">
-				Charta-Mitglied
-			</string>
-			<string name="AcctTypeEmployee">
-				Linden Lab-Mitarbeiter
-			</string>
-			<string name="PaymentInfoUsed">
-				Zahlungsinfo verwendet
-			</string>
-			<string name="PaymentInfoOnFile">
-				Zahlungsinfo archiviert
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				Keine Zahlungsinfo archiviert
-			</string>
-			<string name="AgeVerified">
-				Altersgeprüft
-			</string>
-			<string name="NotAgeVerified">
-				Nicht altersgeprüft
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Second Life-Grid:
+	</string>
+	<string name="SUPPORT_SITE">
+		Second Life Support-Portal
+	</string>
+	<string name="StartupDetectingHardware">
+		Hardware wird erfasst...
+	</string>
+	<string name="StartupLoading">
+		Wird geladen
+	</string>
+	<string name="Fullbright">
+		Fullbright (Legacy)
+	</string>
+	<string name="LoginInProgress">
+		Anmeldevorgang gestartet. [APP_NAME] reagiert möglicherweise nicht.  Bitte warten.
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		Anmeldung erfolgt...
+	</string>
+	<string name="LoginAuthenticating">
+		Authentifizierung
+	</string>
+	<string name="LoginMaintenance">
+		Account wird aktualisiert...
+	</string>
+	<string name="LoginAttempt">
+		Ein früherer Anmeldeversuch ist fehlgeschlagen. Anmeldung, Versuch [NUMBER]
+	</string>
+	<string name="LoginPrecaching">
+		Welt wird geladen...
+	</string>
+	<string name="LoginInitializingBrowser">
+		Integrierter Webbrowser wird initialisiert...
+	</string>
+	<string name="LoginInitializingMultimedia">
+		Multimedia wird initialisiert...
+	</string>
+	<string name="LoginVerifyingCache">
+		Cache-Dateien werden überprüft (dauert 60-90 Sekunden)...
+	</string>
+	<string name="LoginProcessingResponse">
+		Antwort wird verarbeitet...
+	</string>
+	<string name="LoginInitializingWorld">
+		Welt wird initialisiert...
+	</string>
+	<string name="LoginDecodingImages">
+		Bilder werden entpackt...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		QuickTime wird initialisiert...
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		QuickTime nicht gefunden - Initialisierung nicht möglich.
+	</string>
+	<string name="LoginQuicktimeOK">
+		QuickTime wurde initialisiert.
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		Region-Handshake...
+	</string>
+	<string name="LoginConnectingToRegion">
+		Region-Verbindung...
+	</string>
+	<string name="LoginDownloadingClothing">
+		Kleidung wird geladen...
+	</string>
+	<string name="AgentLostConnection">
+		In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
+	</string>
+	<string name="TooltipPerson">
+		Person
+	</string>
+	<string name="TooltipNoName">
+		(namenlos)
+	</string>
+	<string name="TooltipOwner">
+		Eigentümer:
+	</string>
+	<string name="TooltipPublic">
+		Öffentlich
+	</string>
+	<string name="TooltipIsGroup">
+		(Gruppe)
+	</string>
+	<string name="TooltipForSaleL$">
+		Zum Verkauf: [AMOUNT] L$
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		Gruppenbau
+	</string>
+	<string name="TooltipFlagNoBuild">
+		Bauen aus
+	</string>
+	<string name="TooltipFlagNoEdit">
+		Gruppenbau
+	</string>
+	<string name="TooltipFlagNotSafe">
+		Unsicher
+	</string>
+	<string name="TooltipFlagNoFly">
+		Fliegen aus
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		Gruppenskripte
+	</string>
+	<string name="TooltipFlagNoScripts">
+		Skripte aus
+	</string>
+	<string name="TooltipLand">
+		Land:
+	</string>
+	<string name="TooltipMustSingleDrop">
+		Sie können nur ein einzelnes Objekt hierher ziehen
+	</string>
+	<string name="TooltipHttpUrl">
+		Anklicken, um Webseite anzuzeigen
+	</string>
+	<string name="TooltipSLURL">
+		Anklicken, um Informationen zu diesem Standort anzuzeigen
+	</string>
+	<string name="TooltipAgentUrl">
+		Anklicken, um das Profil dieses Einwohners anzuzeigen
+	</string>
+	<string name="TooltipGroupUrl">
+		Anklicken, um Beschreibung der Gruppe anzuzeigen
+	</string>
+	<string name="TooltipEventUrl">
+		Anklicken, um Beschreibung der Veranstaltung anzuzeigen
+	</string>
+	<string name="TooltipClassifiedUrl">
+		Anklicken, um diese Anzeige anzuzeigen
+	</string>
+	<string name="TooltipParcelUrl">
+		Anklicken, um Beschreibung der Parzelle anzuzeigen
+	</string>
+	<string name="TooltipTeleportUrl">
+		Anklicken, um zu diesem Standort zu teleportieren
+	</string>
+	<string name="TooltipObjectIMUrl">
+		Anklicken, um Beschreibung des Objekts anzuzeigen
+	</string>
+	<string name="TooltipSLAPP">
+		Anklicken, um Befehl secondlife:// auszuführen
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		Schließen (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		Schließen (Strg+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		Wiederherstellen
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		Minimieren
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		Abnehmen
+	</string>
+	<string name="BUTTON_DOCK">
+		Andocken
+	</string>
+	<string name="BUTTON_UNDOCK">
+		Abkoppeln
+	</string>
+	<string name="BUTTON_HELP">
+		Hilfe anzeigen
+	</string>
+	<string name="RetrievingData">
+		Laden...
+	</string>
+	<string name="ReleaseNotes">
+		Versionshinweise
+	</string>
+	<string name="LoadingData">
+		Wird geladen...
+	</string>
+	<string name="AvatarNameNobody">
+		(niemand)
+	</string>
+	<string name="AvatarNameWaiting">
+		(wartet)
+	</string>
+	<string name="AvatarNameHippos">
+		(hippos)
+	</string>
+	<string name="GroupNameNone">
+		(keiner)
+	</string>
+	<string name="AssetErrorNone">
+		Kein Fehler
+	</string>
+	<string name="AssetErrorRequestFailed">
+		Asset-Anforderung: fehlgeschlagen
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		Asset-Anforderung: Datei existiert nicht
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		Asset-Anforderung: Asset in Datenbank nicht gefunden
+	</string>
+	<string name="AssetErrorEOF">
+		Ende der Datei
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		Datei kann nicht geöffnet werden
+	</string>
+	<string name="AssetErrorFileNotFound">
+		Datei nicht gefunden
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		Zeitüberschreitung bei Dateiübertragung
+	</string>
+	<string name="AssetErrorCircuitGone">
+		Verbindung verloren
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		Viewer und Server sind sich nicht über Preis einig
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		Status unbekannt
+	</string>
+	<string name="texture">
+		Textur
+	</string>
+	<string name="sound">
+		Sound
+	</string>
+	<string name="calling card">
+		Visitenkarte
+	</string>
+	<string name="landmark">
+		Landmarke
+	</string>
+	<string name="legacy script">
+		Skript (veraltet)
+	</string>
+	<string name="clothing">
+		Kleidung
+	</string>
+	<string name="object">
+		Objekt
+	</string>
+	<string name="note card">
+		Notizkarte
+	</string>
+	<string name="folder">
+		Ordner
+	</string>
+	<string name="root">
+		Hauptverzeichnis
+	</string>
+	<string name="lsl2 script">
+		LSL2 Skript
+	</string>
+	<string name="lsl bytecode">
+		LSL Bytecode
+	</string>
+	<string name="tga texture">
+		tga-Textur
+	</string>
+	<string name="body part">
+		Körperteil
+	</string>
+	<string name="snapshot">
+		Foto
+	</string>
+	<string name="lost and found">
+		Fundbüro
+	</string>
+	<string name="targa image">
+		targa-Bild
+	</string>
+	<string name="trash">
+		Papierkorb
+	</string>
+	<string name="jpeg image">
+		jpeg-Bild
+	</string>
+	<string name="animation">
+		Animation
+	</string>
+	<string name="gesture">
+		Geste
+	</string>
+	<string name="simstate">
+		simstate
+	</string>
+	<string name="favorite">
+		Favoriten
+	</string>
+	<string name="symbolic link">
+		Link
+	</string>
+	<string name="AvatarAway">
+		Abwesend
+	</string>
+	<string name="AvatarBusy">
+		Beschäftigt
+	</string>
+	<string name="AvatarMuted">
+		Stummgeschaltet
+	</string>
+	<string name="anim_express_afraid">
+		Ängstlich
+	</string>
+	<string name="anim_express_anger">
+		Verärgert
+	</string>
+	<string name="anim_away">
+		Abwesend
+	</string>
+	<string name="anim_backflip">
+		Rückwärtssalto
+	</string>
+	<string name="anim_express_laugh">
+		Lachkrampf
+	</string>
+	<string name="anim_express_toothsmile">
+		Grinsen
+	</string>
+	<string name="anim_blowkiss">
+		Kusshand
+	</string>
+	<string name="anim_express_bored">
+		Gelangweilt
+	</string>
+	<string name="anim_bow">
+		Verbeugen
+	</string>
+	<string name="anim_clap">
+		Klatschen
+	</string>
+	<string name="anim_courtbow">
+		Diener
+	</string>
+	<string name="anim_express_cry">
+		Weinen
+	</string>
+	<string name="anim_dance1">
+		Tanz 1
+	</string>
+	<string name="anim_dance2">
+		Tanz 2
+	</string>
+	<string name="anim_dance3">
+		Tanz 3
+	</string>
+	<string name="anim_dance4">
+		Tanz 4
+	</string>
+	<string name="anim_dance5">
+		Tanz 5
+	</string>
+	<string name="anim_dance6">
+		Tanz 6
+	</string>
+	<string name="anim_dance7">
+		Tanz 7
+	</string>
+	<string name="anim_dance8">
+		Tanz 8
+	</string>
+	<string name="anim_express_disdain">
+		Verachten
+	</string>
+	<string name="anim_drink">
+		Trinken
+	</string>
+	<string name="anim_express_embarrased">
+		Verlegen
+	</string>
+	<string name="anim_angry_fingerwag">
+		Drohen
+	</string>
+	<string name="anim_fist_pump">
+		Faust pumpen
+	</string>
+	<string name="anim_yoga_float">
+		Yogaflieger
+	</string>
+	<string name="anim_express_frown">
+		Stirnrunzeln
+	</string>
+	<string name="anim_impatient">
+		Ungeduldig
+	</string>
+	<string name="anim_jumpforjoy">
+		Freudensprung
+	</string>
+	<string name="anim_kissmybutt">
+		LMA
+	</string>
+	<string name="anim_express_kiss">
+		Küssen
+	</string>
+	<string name="anim_laugh_short">
+		Lachen
+	</string>
+	<string name="anim_musclebeach">
+		Posen
+	</string>
+	<string name="anim_no_unhappy">
+		Nein (Bedauernd)
+	</string>
+	<string name="anim_no_head">
+		Nein
+	</string>
+	<string name="anim_nyanya">
+		Ällabätsch
+	</string>
+	<string name="anim_punch_onetwo">
+		Eins-Zwei-Punch
+	</string>
+	<string name="anim_express_open_mouth">
+		Mund offen
+	</string>
+	<string name="anim_peace">
+		Friede
+	</string>
+	<string name="anim_point_you">
+		Auf anderen zeigen
+	</string>
+	<string name="anim_point_me">
+		Auf mich zeigen
+	</string>
+	<string name="anim_punch_l">
+		Linker Haken
+	</string>
+	<string name="anim_punch_r">
+		Rechter Haken
+	</string>
+	<string name="anim_rps_countdown">
+		SSP zählen
+	</string>
+	<string name="anim_rps_paper">
+		SSP Papier
+	</string>
+	<string name="anim_rps_rock">
+		SSP Stein
+	</string>
+	<string name="anim_rps_scissors">
+		SSP Schere
+	</string>
+	<string name="anim_express_repulsed">
+		Angewidert
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		Rundkick
+	</string>
+	<string name="anim_express_sad">
+		Traurig
+	</string>
+	<string name="anim_salute">
+		Salutieren
+	</string>
+	<string name="anim_shout">
+		Rufen
+	</string>
+	<string name="anim_express_shrug">
+		Schulterzucken
+	</string>
+	<string name="anim_express_smile">
+		Lächeln
+	</string>
+	<string name="anim_smoke_idle">
+		Zigarette halten
+	</string>
+	<string name="anim_smoke_inhale">
+		Rauchen
+	</string>
+	<string name="anim_smoke_throw_down">
+		Zigarette wegwerfen
+	</string>
+	<string name="anim_express_surprise">
+		Ãœberraschung
+	</string>
+	<string name="anim_sword_strike_r">
+		Schwerthieb
+	</string>
+	<string name="anim_angry_tantrum">
+		Wutanfall
+	</string>
+	<string name="anim_express_tongue_out">
+		Zunge rausstrecken
+	</string>
+	<string name="anim_hello">
+		Winken
+	</string>
+	<string name="anim_whisper">
+		Flüstern
+	</string>
+	<string name="anim_whistle">
+		Pfeifen
+	</string>
+	<string name="anim_express_wink">
+		Zwinkern
+	</string>
+	<string name="anim_wink_hollywood">
+		Zwinkern (Hollywood)
+	</string>
+	<string name="anim_express_worry">
+		Sorgenvoll
+	</string>
+	<string name="anim_yes_happy">
+		Ja (Erfreut)
+	</string>
+	<string name="anim_yes_head">
+		Ja
+	</string>
+	<string name="texture_loading">
+		Wird geladen...
+	</string>
+	<string name="worldmap_offline">
+		Offline
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		Unvollständige Datei
+	</string>
+	<string name="ST_NO_JOINT">
+		HAUPTVERZEICHNIS oder VERBINDUNG nicht gefunden.
+	</string>
+	<string name="whisper">
+		flüstert:
+	</string>
+	<string name="shout">
+		ruft:
+	</string>
+	<string name="ringing">
+		Verbindung mit In-Welt-Voice-Chat...
+	</string>
+	<string name="connected">
+		Verbunden
+	</string>
+	<string name="unavailable">
+		Der aktuelle Standort unterstützt keine Voice-Kommunikation
+	</string>
+	<string name="hang_up">
+		Verbindung mit In-Welt-Voice-Chat getrennt
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS].
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS].
+	</string>
+	<string name="ScriptTakeMoney">
+		Linden-Dollar (L$) von Ihnen nehmen
+	</string>
+	<string name="ActOnControlInputs">
+		Steuerung festlegen
+	</string>
+	<string name="RemapControlInputs">
+		Steuerung neu zuweisen
+	</string>
+	<string name="AnimateYourAvatar">
+		Avatar animieren
+	</string>
+	<string name="AttachToYourAvatar">
+		An Avatar anhängen
+	</string>
+	<string name="ReleaseOwnership">
+		Eigentum aufgeben und öffentlich machen
+	</string>
+	<string name="LinkAndDelink">
+		Mit Objekten verknüpfen und davon trennen
+	</string>
+	<string name="AddAndRemoveJoints">
+		Verbindungen zu anderen Objekten hinzufügen und entfernen
+	</string>
+	<string name="ChangePermissions">
+		Berechtigungen ändern
+	</string>
+	<string name="TrackYourCamera">
+		Kameraverfolgung
+	</string>
+	<string name="ControlYourCamera">
+		Kamerasteuerung
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		Offline
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		Unbekannt
+	</string>
+	<string name="land_type_unknown">
+		(unbekannt)
+	</string>
+	<string name="all_files">
+		Alle Dateien
+	</string>
+	<string name="sound_files">
+		Sounds
+	</string>
+	<string name="animation_files">
+		Animationen
+	</string>
+	<string name="image_files">
+		Bilder
+	</string>
+	<string name="save_file_verb">
+		Speichern
+	</string>
+	<string name="load_file_verb">
+		Laden
+	</string>
+	<string name="targa_image_files">
+		Targa-Bilder
+	</string>
+	<string name="bitmap_image_files">
+		Bitmap-Bilder
+	</string>
+	<string name="avi_movie_file">
+		AVI-Filmdatei
+	</string>
+	<string name="xaf_animation_file">
+		XAF Anim-Datei
+	</string>
+	<string name="xml_file">
+		XML-Datei
+	</string>
+	<string name="dot_raw_file">
+		RAW-Datei
+	</string>
+	<string name="compressed_image_files">
+		Komprimierte Bilder
+	</string>
+	<string name="load_files">
+		Dateien laden
+	</string>
+	<string name="choose_the_directory">
+		Verzeichnis auswählen
+	</string>
+	<string name="AvatarSetNotAway">
+		Als anwesend anzeigen
+	</string>
+	<string name="AvatarSetAway">
+		Als abwesend anzeigen
+	</string>
+	<string name="AvatarSetNotBusy">
+		Als nicht beschäftigt anzeigen
+	</string>
+	<string name="AvatarSetBusy">
+		Als beschäftigt anzeigen
+	</string>
+	<string name="shape">
+		Form
+	</string>
+	<string name="skin">
+		Haut
+	</string>
+	<string name="hair">
+		Haare
+	</string>
+	<string name="eyes">
+		Augen
+	</string>
+	<string name="shirt">
+		Hemd
+	</string>
+	<string name="pants">
+		Hose
+	</string>
+	<string name="shoes">
+		Schuhe
+	</string>
+	<string name="socks">
+		Socken
+	</string>
+	<string name="jacket">
+		Jacke
+	</string>
+	<string name="gloves">
+		Handschuhe
+	</string>
+	<string name="undershirt">
+		Unterhemd
+	</string>
+	<string name="underpants">
+		Unterhose
+	</string>
+	<string name="skirt">
+		Rock
+	</string>
+	<string name="invalid">
+		ungültig
+	</string>
+	<string name="BodyPartsRightArm">
+		Rechter Arm
+	</string>
+	<string name="BodyPartsHead">
+		Kopf
+	</string>
+	<string name="BodyPartsLeftArm">
+		Linker Arm
+	</string>
+	<string name="BodyPartsLeftLeg">
+		Linkes Bein
+	</string>
+	<string name="BodyPartsTorso">
+		Oberkörper
+	</string>
+	<string name="BodyPartsRightLeg">
+		Rechtes Bein
+	</string>
+	<string name="GraphicsQualityLow">
+		Niedrig
+	</string>
+	<string name="GraphicsQualityMid">
+		Mittel
+	</string>
+	<string name="GraphicsQualityHigh">
+		Hoch
+	</string>
+	<string name="LeaveMouselook">
+		ESC drücken, um zur Normalansicht zurückzukehren
+	</string>
+	<string name="InventoryNoMatchingItems">
+		Im Inventar wurden keine passenden Artikel gefunden.
+	</string>
+	<string name="InventoryNoTexture">
+		Sie haben keine Kopie dieser Textur in Ihrem Inventar.
+	</string>
+	<string name="LoadingContents">
+		Inhalte werden geladen...
+	</string>
+	<string name="NoContents">
+		Keine Inhalte
+	</string>
+	<string name="InvFolder My Inventory">
+		Mein Inventar
+	</string>
+	<string name="InvFolder My Favorites">
+		Meine Favoriten
+	</string>
+	<string name="InvFolder Library">
+		Bibliothek
+	</string>
+	<string name="InvFolder Textures">
+		Texturen
+	</string>
+	<string name="InvFolder Sounds">
+		Sounds
+	</string>
+	<string name="InvFolder Calling Cards">
+		Visitenkarten
+	</string>
+	<string name="InvFolder Landmarks">
+		Landmarken
+	</string>
+	<string name="InvFolder Scripts">
+		Skripts
+	</string>
+	<string name="InvFolder Clothing">
+		Kleidung
+	</string>
+	<string name="InvFolder Objects">
+		Objekte
+	</string>
+	<string name="InvFolder Notecards">
+		Notizkarten
+	</string>
+	<string name="InvFolder New Folder">
+		Neuer Ordner
+	</string>
+	<string name="InvFolder Inventory">
+		Inventar
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		Nicht-Komprimierte Bilder
+	</string>
+	<string name="InvFolder Body Parts">
+		Körperteile
+	</string>
+	<string name="InvFolder Trash">
+		Papierkorb
+	</string>
+	<string name="InvFolder Photo Album">
+		Fotoalbum
+	</string>
+	<string name="InvFolder Lost And Found">
+		Fundbüro
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		Nicht-Komprimierte Sounds
+	</string>
+	<string name="InvFolder Animations">
+		Animationen
+	</string>
+	<string name="InvFolder Gestures">
+		Gesten
+	</string>
+	<string name="InvFolder favorite">
+		Favoriten
+	</string>
+	<string name="InvFolder Current Outfit">
+		Aktuelles Outfit
+	</string>
+	<string name="InvFolder My Outfits">
+		Meine Outfits
+	</string>
+	<string name="InvFolder Friends">
+		Freunde
+	</string>
+	<string name="InvFolder All">
+		Alle
+	</string>
+	<string name="Buy">
+		Kaufen
+	</string>
+	<string name="BuyforL$">
+		Kaufen für L$
+	</string>
+	<string name="Stone">
+		Stein
+	</string>
+	<string name="Metal">
+		Metall
+	</string>
+	<string name="Glass">
+		Glas
+	</string>
+	<string name="Wood">
+		Holz
+	</string>
+	<string name="Flesh">
+		Fleisch
+	</string>
+	<string name="Plastic">
+		Plastik
+	</string>
+	<string name="Rubber">
+		Gummi
+	</string>
+	<string name="Light">
+		Licht
+	</string>
+	<string name="KBShift">
+		Umschalt-Taste
+	</string>
+	<string name="KBCtrl">
+		Strg
+	</string>
+	<string name="Chest">
+		Brust
+	</string>
+	<string name="Skull">
+		Schädel
+	</string>
+	<string name="Left Shoulder">
+		Linke Schulter
+	</string>
+	<string name="Right Shoulder">
+		Rechte Schulter
+	</string>
+	<string name="Left Hand">
+		Linke Hand
+	</string>
+	<string name="Right Hand">
+		Rechte Hand
+	</string>
+	<string name="Left Foot">
+		Linker Fuß
+	</string>
+	<string name="Right Foot">
+		Rechter Fuß
+	</string>
+	<string name="Spine">
+		Wirbelsäule
+	</string>
+	<string name="Pelvis">
+		Becken
+	</string>
+	<string name="Mouth">
+		Mund
+	</string>
+	<string name="Chin">
+		Kinn
+	</string>
+	<string name="Left Ear">
+		Linkes Ohr
+	</string>
+	<string name="Right Ear">
+		Rechtes Ohr
+	</string>
+	<string name="Left Eyeball">
+		Linker Augapfel
+	</string>
+	<string name="Right Eyeball">
+		Rechter Augapfel
+	</string>
+	<string name="Nose">
+		Nase
+	</string>
+	<string name="R Upper Arm">
+		R Oberarm
+	</string>
+	<string name="R Forearm">
+		R Unterarm
+	</string>
+	<string name="L Upper Arm">
+		L Oberarm
+	</string>
+	<string name="L Forearm">
+		L Unterarm
+	</string>
+	<string name="Right Hip">
+		Rechte Hüfte
+	</string>
+	<string name="R Upper Leg">
+		R Oberschenkel
+	</string>
+	<string name="R Lower Leg">
+		R Unterschenkel
+	</string>
+	<string name="Left Hip">
+		Linke Hüfte
+	</string>
+	<string name="L Upper Leg">
+		L Oberschenkel
+	</string>
+	<string name="L Lower Leg">
+		L Unterschenkel
+	</string>
+	<string name="Stomach">
+		Bauch
+	</string>
+	<string name="Left Pec">
+		Linke Brust
+	</string>
+	<string name="Right Pec">
+		Rechts
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS] alt
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS] alt
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS] alt
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS] alt
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS] alt
+	</string>
+	<string name="TodayOld">
+		Seit heute Mitglied
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] Jahr
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] Jahre
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] Jahre
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] Monat
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] Monate
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] Monate
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] Woche
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] Wochen
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] Wochen
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] Tag
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] Tage
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] Tage
+	</string>
+	<string name="AcctTypeResident">
+		Einwohner
+	</string>
+	<string name="AcctTypeTrial">
+		Test
+	</string>
+	<string name="AcctTypeCharterMember">
+		Charta-Mitglied
+	</string>
+	<string name="AcctTypeEmployee">
+		Linden Lab-Mitarbeiter
+	</string>
+	<string name="PaymentInfoUsed">
+		Zahlungsinfo verwendet
+	</string>
+	<string name="PaymentInfoOnFile">
+		Zahlungsinfo archiviert
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		Keine Zahlungsinfo archiviert
+	</string>
+	<string name="AgeVerified">
+		Altersgeprüft
+	</string>
+	<string name="NotAgeVerified">
+		Nicht altersgeprüft
+	</string>
+	<string name="Center 2">
+		Mitte 2
+	</string>
+	<string name="Top Right">
+		Oben rechts
+	</string>
+	<string name="Top">
+		Oben
+	</string>
+	<string name="Top Left">
+		Oben links
+	</string>
+	<string name="Center">
+		Zentrieren
+	</string>
+	<string name="Bottom Left">
+		Unten links
+	</string>
+	<string name="Bottom">
+		Unten
+	</string>
+	<string name="Bottom Right">
+		Unten rechts
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		Heruntergeladen, wird kompiliert
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		Skript wurde auf Server nicht gefunden.
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		Beim Herunterladen ist ein Problem aufgetreten
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		Unzureichende Rechte zum Herunterladen eines Skripts.
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		Unzureichende Berechtigungen für
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		Unbekannter Fehler beim Herunterladen
+	</string>
+	<string name="CompileQueueTitle">
+		Rekompilierung
+	</string>
+	<string name="CompileQueueStart">
+		rekompilieren
+	</string>
+	<string name="ResetQueueTitle">
+		Zurücksetzen
+	</string>
+	<string name="ResetQueueStart">
+		Zurücksetzen
+	</string>
+	<string name="RunQueueTitle">
+		Skript ausführen
+	</string>
+	<string name="RunQueueStart">
+		Skript ausführen
+	</string>
+	<string name="NotRunQueueTitle">
+		Skript anhalten
+	</string>
+	<string name="NotRunQueueStart">
+		Skript anhalten
+	</string>
+	<string name="CompileSuccessful">
+		Kompilieren erfolgreich abgeschlossen!
+	</string>
+	<string name="CompileSuccessfulSaving">
+		Kompilieren erfolgreich abgeschlossen, speichern...
+	</string>
+	<string name="SaveComplete">
+		Speichervorgang abgeschlossen.
+	</string>
+	<string name="ObjectOutOfRange">
+		Skript (Objekt außerhalb des Bereichs)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		Objekt [OBJECT], Besitzer [OWNER]
+	</string>
+	<string name="GroupsNone">
+		keine
+	</string>
+	<string name="Unknown">
+		(unbekannt)
+	</string>
+	<string name="Balance">
+		Kontostand
+	</string>
+	<string name="Credits">
+		Danksagung
+	</string>
+	<string name="Debits">
+		Soll
+	</string>
+	<string name="Total">
+		Gesamtbetrag
+	</string>
+	<string name="NoGroupDataFound">
+		Für Gruppe wurden keine Gruppendaten gefunden
+	</string>
+	<string name="IMParentEstate">
+		parent estate
+	</string>
+	<string name="IMMainland">
+		Mainland
+	</string>
+	<string name="IMTeen">
+		Teen
+	</string>
+	<string name="RegionInfoError">
+		Fehler
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		alle Grundstücke gehören [OWNER]
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		alle Grundstücke, die Ihnen gehört haben
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		alle Grundstücke, die Sie für [OWNER] verwaltet haben
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		Zulässige Einwohner: ([ALLOWEDAGENTS], max [MAXACCESS])
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		Zulässige Gruppen: ([ALLOWEDGROUPS], max [MAXACCESS])
+	</string>
+	<string name="CursorPos">
+		Zeile [LINE], Spalte [COLUMN]
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] gefunden
+	</string>
+	<string name="PanelContentsNewScript">
+		Neues Skript
+	</string>
+	<string name="MuteByName">
+		(nach Namen)
+	</string>
+	<string name="MuteAgent">
+		(Einwohner)
+	</string>
+	<string name="MuteObject">
+		(Objekt)
+	</string>
+	<string name="MuteGroup">
+		(Gruppe)
+	</string>
+	<string name="RegionNoCovenant">
+		Für dieses Grundstück liegt kein Vertrag vor.
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		Für dieses Grundstück liegt kein Vertrag vor. Das Land auf diesem Grundstück wird vom Grundstückseigentümer und nicht von Linden Lab verkauft.  Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundstückseigentümer in Verbindung.
+	</string>
+	<string name="covenant_last_modified">
+		Zuletzt geändert:
+	</string>
+	<string name="GroupOwned">
+		In Gruppenbesitz
+	</string>
+	<string name="Public">
+		Öffentlich
+	</string>
+	<string name="ClassifiedClicksTxt">
+		Klicks: [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(wird nach Veröffentlichung aktualisiert)
+	</string>
+	<string name="GroupVoteYes">
+		Ja
+	</string>
+	<string name="GroupVoteNo">
+		Nein
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		Zurzeit sind keine Umfragen aktiv
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		Zurzeit sind keine Umfragen aktiv
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		Archivierte Umfragen werden geladen
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		Aktive Umfragen werden geladen
+	</string>
+	<string name="MultiPreviewTitle">
+		Vorschau
+	</string>
+	<string name="MultiPropertiesTitle">
+		Eigenschaften
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		Ein Objekt namens
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		im Besitz der Gruppe
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		im Besitz einer unbekannten Gruppe
+	</string>
+	<string name="InvOfferOwnedBy">
+		im Besitz von
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		im Besitz eines unbekannten Einwohners
+	</string>
+	<string name="InvOfferGaveYou">
+		hat Ihnen folgendes übergeben
+	</string>
+	<string name="InvOfferYouDecline">
+		Sie lehnen folgendes ab:
+	</string>
+	<string name="InvOfferFrom">
+		von
+	</string>
+	<string name="GroupMoneyTotal">
+		Gesamtbetrag
+	</string>
+	<string name="GroupMoneyBought">
+		gekauft
+	</string>
+	<string name="GroupMoneyPaidYou">
+		bezahlte Ihnen
+	</string>
+	<string name="GroupMoneyPaidInto">
+		bezahlte an
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		kaufte Pass für
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		bezahlte Gebühr für Event
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		bezahlte Preis für Event
+	</string>
+	<string name="GroupMoneyBalance">
+		Kontostand
+	</string>
+	<string name="GroupMoneyCredits">
+		Danksagung
+	</string>
+	<string name="GroupMoneyDebits">
+		Soll
+	</string>
+	<string name="ViewerObjectContents">
+		Inhalte
+	</string>
+	<string name="AcquiredItems">
+		Erworbene Artikel
+	</string>
+	<string name="Cancel">
+		Abbrechen
+	</string>
+	<string name="UploadingCosts">
+		Hochladen von %s kostet
+	</string>
+	<string name="UnknownFileExtension">
+		Unbekanntes Dateiformat .%s
+Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		Landmarke hinzufügen...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		Landmarke bearbeiten...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Strg+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Umschalt+
+	</string>
+	<string name="FileSaved">
+		Datei wurde gespeichert
+	</string>
+	<string name="Receiving">
+		Daten werden empfangen
+	</string>
+	<string name="AM">
+		Uhr
+	</string>
+	<string name="PM">
+		Uhr
+	</string>
+	<string name="PST">
+		PST
+	</string>
+	<string name="PDT">
+		PDT
+	</string>
+	<string name="Forward">
+		Vorwärts
+	</string>
+	<string name="Left">
+		Links
+	</string>
+	<string name="Right">
+		Rechts
+	</string>
+	<string name="Back">
+		Zurück
+	</string>
+	<string name="North">
+		Norden
+	</string>
+	<string name="South">
+		Süden
+	</string>
+	<string name="West">
+		Westen
+	</string>
+	<string name="East">
+		Osten
+	</string>
+	<string name="Up">
+		Nach oben
+	</string>
+	<string name="Down">
+		Nach unten
+	</string>
+	<string name="Any Category">
+		Alle Kategorien
+	</string>
+	<string name="Shopping">
+		Shopping
+	</string>
+	<string name="Land Rental">
+		Land mieten
+	</string>
+	<string name="Property Rental">
+		Immobilie mieten
+	</string>
+	<string name="Special Attraction">
+		Attraktionen
+	</string>
+	<string name="New Products">
+		Neue Produkte
+	</string>
+	<string name="Employment">
+		Stellenangebote
+	</string>
+	<string name="Wanted">
+		Gesucht
+	</string>
+	<string name="Service">
+		Dienstleistungen
+	</string>
+	<string name="Personal">
+		Verschiedenes
+	</string>
+	<string name="None">
+		Keiner
+	</string>
+	<string name="Linden Location">
+		Lindenort
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		Kunst &amp; Kultur
+	</string>
+	<string name="Business">
+		Business
+	</string>
+	<string name="Educational">
+		Bildung
+	</string>
+	<string name="Gaming">
+		Spielen
+	</string>
+	<string name="Hangout">
+		Treffpunkt
+	</string>
+	<string name="Newcomer Friendly">
+		Anfängergerecht
+	</string>
+	<string name="Parks&amp;Nature">
+		Parks und Natur
+	</string>
+	<string name="Residential">
+		Wohngebiet
+	</string>
+	<string name="Stage">
+		Phase
+	</string>
+	<string name="Other">
+		Sonstige
+	</string>
+	<string name="Any">
+		Alle
+	</string>
+	<string name="You">
+		Sie
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		Beim Parsen der Befehlszeile wurde ein Fehler festgestellt.
+Weitere Informationen: http://wiki.secondlife.com/wiki/Client_parameters (EN)
+Fehler:
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] Verwendung in Befehlszeile:
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] kann auf die erforderliche Datei nicht zugreifen.
+
+Grund hierfür ist, dass Sie entweder mehrere Instanzen gleichzeitig ausführen oder dass Ihr System denkt, eine Datei sei geöffnet.
+Falls diese Nachricht erneut angezeigt wird, starten Sie bitte Ihren Computer neu und probieren Sie es noch einmal.
+Falls der Fehler dann weiterhin auftritt, müssen Sie [APP_NAME] von Ihrem System de-installieren und erneut installieren.
+	</string>
+	<string name="MBFatalError">
+		Unbehebbarer Fehler
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] erfordert einen Prozessor mit AltiVec (G4 oder später).
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] läuft bereits.
+Bitte sehen Sie in Ihrer Menüleiste nach, dort sollte ein Symbol für das Programm angezeigt werden.
+Falls diese Nachricht erneut angezeigt wird, starten Sie Ihren Computer bitte neu.
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] scheint eingefroren zu sein oder ist abgestürzt.
+Möchten Sie einen Absturz-Bericht einschicken?
+	</string>
+	<string name="MBAlert">
+		Alarm
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] kann DirectX 9.0b oder höher nicht feststellen.
+[APP_NAME] verwendet DirectX, um nach Hardware und/oder veralteten Treibern zu suchen, die zu Problemen mit der Stabilität, Leistung und Abstürzen führen können.  Sie können [APP_NAME] auch so ausführen, wir empfehlen jedoch, dass DirectX 9.0b vorhanden ist und ausgeführt wird.
+
+Möchten Sie fortfahren?
+	</string>
+	<string name="MBWarning">
+		Hinweis
+	</string>
+	<string name="MBNoAutoUpdate">
+		Für Linux ist zur Zeit noch kein automatisches Aktualisieren möglich.
+Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass fehlgeschlagen
+	</string>
+	<string name="MBError">
+		Fehler
+	</string>
+	<string name="MBFullScreenErr">
+		Vollbildschirm mit [WIDTH] x [HEIGHT] kann nicht ausgeführt werden.
+Ausführung erfolgt in Fenster.
+	</string>
+	<string name="MBDestroyWinFailed">
+		Fehler beim Herunterfahren während Fenster geschlossen wurde (DestroyWindow() fehlgeschlagen)
+	</string>
+	<string name="MBShutdownErr">
+		Fehler beim Herunterfahren
+	</string>
+	<string name="MBDevContextErr">
+		Kann keinen Kontext für GL-Gerät erstellen
+	</string>
+	<string name="MBPixelFmtErr">
+		Passendes Pixelformat wurde nicht gefunden
+	</string>
+	<string name="MBPixelFmtDescErr">
+		Beschreibung für Pixelformat nicht verfügbar
+	</string>
+	<string name="MBTrueColorWindow">
+		Um [APP_NAME] in einem Fenster auszuführen, ist True Color (32-bit) erforderlich.
+Klicken Sie auf Systemsteuerung &gt; Anzeige &gt; Einstellungen und stellen Sie den Bildschirm auf 32-bit Farbe ein.
+Wenn Sie die Anwendung im Modus Vollbildschirm ausführen möchten, dann wird [APP_NAME] den Bildschirm automatisch während der Ausführung anpassen.
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] kann nicht ausgeführt werden, da kein 8-Bit-Alpha-Kanal verfügbar ist.  Dies geschieht normalerweise bei Problemen mit dem Treiber der Video-Karte.
+Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für Ihre Videokarte installiert haben.
+Vergewissern Sie sich außerdem, dass Ihr Bildschirm auf True Color (32-Bit) eingestellt ist (Systemsteuerung &gt; Anzeige &gt; Einstellungen).
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</string>
+	<string name="MBPixelFmtSetErr">
+		Pixel-Format kann nicht eingestellt werden.
+	</string>
+	<string name="MBGLContextErr">
+		Kann keinen Kontext für GL-Gerät erstellen
+	</string>
+	<string name="MBGLContextActErr">
+		Kann keinen Kontext für GL-Gerät aktivieren
+	</string>
+	<string name="MBVideoDrvErr">
+		[APP_NAME] kann nicht ausgeführt werden, da die Treiber Ihrer Videokarte entweder nicht richtig installiert oder veraltet sind, oder die entsprechende Hardware nicht unterstützt wird. Bitte vergewissern Sie sich, dass Sie die aktuellsten Treiber für die Videokarte installiert haben. Falls Sie die aktuellsten Treiber bereits installiert haben, installieren Sie diese bitte erneut.
+
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		Bartschatten
+	</string>
+	<string name="All White">
+		Ganz weiß
+	</string>
+	<string name="Anime Eyes">
+		Anime-Augen
+	</string>
+	<string name="Arced">
+		Gewölbt
+	</string>
+	<string name="Arm Length">
+		Armlänge
+	</string>
+	<string name="Attached">
+		Angewachsen
+	</string>
+	<string name="Attached Earlobes">
+		Angewachsene Ohrläppchen
+	</string>
+	<string name="Back Bangs">
+		Nackenhaar
+	</string>
+	<string name="Back Bangs Down">
+		Lang
+	</string>
+	<string name="Back Bangs Up">
+		Kurz
+	</string>
+	<string name="Back Fringe">
+		Nackenfransen
+	</string>
+	<string name="Back Hair">
+		Hinterkopfhaar
+	</string>
+	<string name="Back Hair Down">
+		lang
+	</string>
+	<string name="Back Hair Up">
+		kurz
+	</string>
+	<string name="Baggy">
+		Tränensäcke
+	</string>
+	<string name="Bangs">
+		Pony
+	</string>
+	<string name="Bangs Down">
+		Pony lang
+	</string>
+	<string name="Bangs Up">
+		Pony kurz
+	</string>
+	<string name="Beady Eyes">
+		Knopfaugen
+	</string>
+	<string name="Belly Size">
+		Bauchgröße
+	</string>
+	<string name="Big">
+		Groß
+	</string>
+	<string name="Big Butt">
+		Großer Hintern
+	</string>
+	<string name="Big Eyeball">
+		Großer Augapfel
+	</string>
+	<string name="Big Hair Back">
+		Volumen: Hinten
+	</string>
+	<string name="Big Hair Front">
+		Volumen: Vorne
+	</string>
+	<string name="Big Hair Top">
+		Volumen: Oben
+	</string>
+	<string name="Big Head">
+		Großer Kopf
+	</string>
+	<string name="Big Pectorals">
+		Große Brustmuskeln
+	</string>
+	<string name="Big Spikes">
+		Große Stacheln
+	</string>
+	<string name="Black">
+		Schwarz
+	</string>
+	<string name="Blonde">
+		Blond
+	</string>
+	<string name="Blonde Hair">
+		Blondes Haar
+	</string>
+	<string name="Blush">
+		Rouge
+	</string>
+	<string name="Blush Color">
+		Rougefarbe
+	</string>
+	<string name="Blush Opacity">
+		Rouge Deckkraft
+	</string>
+	<string name="Body Definition">
+		Körperkonturen
+	</string>
+	<string name="Body Fat">
+		Körperfett
+	</string>
+	<string name="Body Freckles">
+		Sommersprossen
+	</string>
+	<string name="Body Thick">
+		Körper - breit
+	</string>
+	<string name="Body Thickness">
+		Körperbreite
+	</string>
+	<string name="Body Thin">
+		Körper - schmal
+	</string>
+	<string name="Bow Legged">
+		o-beinig
+	</string>
+	<string name="Breast Buoyancy">
+		Brust, Straffheit
+	</string>
+	<string name="Breast Cleavage">
+		Dekolleté
+	</string>
+	<string name="Breast Size">
+		Brustgröße
+	</string>
+	<string name="Bridge Width">
+		Rückenbreite
+	</string>
+	<string name="Broad">
+		Breit
+	</string>
+	<string name="Brow Size">
+		Brauengröße
+	</string>
+	<string name="Bug Eyes">
+		Glubschaugen
+	</string>
+	<string name="Bugged Eyes">
+		Hervortretend
+	</string>
+	<string name="Bulbous">
+		Knollennase
+	</string>
+	<string name="Bulbous Nose">
+		Knollennase
+	</string>
+	<string name="Bushy Eyebrows">
+		Buschige Augenbrauen
+	</string>
+	<string name="Bushy Hair">
+		Buschiges Haar
+	</string>
+	<string name="Butt Size">
+		Hintern, Größe
+	</string>
+	<string name="bustle skirt">
+		Tournürenrock
+	</string>
+	<string name="no bustle">
+		Ohne
+	</string>
+	<string name="more bustle">
+		Mit
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		Wangenknochen
+	</string>
+	<string name="Chest Size">
+		Brustgröße
+	</string>
+	<string name="Chin Angle">
+		Kinnwinkel
+	</string>
+	<string name="Chin Cleft">
+		Kinnspalte
+	</string>
+	<string name="Chin Curtains">
+		Schifferfräse
+	</string>
+	<string name="Chin Depth">
+		Kinnlänge
+	</string>
+	<string name="Chin Heavy">
+		Kinn ausgeprägt
+	</string>
+	<string name="Chin In">
+		Kinn zurück
+	</string>
+	<string name="Chin Out">
+		Kinn nach vorne
+	</string>
+	<string name="Chin-Neck">
+		Kinn-Hals
+	</string>
+	<string name="Clear">
+		Löschen
+	</string>
+	<string name="Cleft">
+		Spalte
+	</string>
+	<string name="Close Set Eyes">
+		Eng stehende Augen
+	</string>
+	<string name="Closed">
+		Geschlossen
+	</string>
+	<string name="Closed Back">
+		Hinten geschlossen
+	</string>
+	<string name="Closed Front">
+		Vorne geschlossen
+	</string>
+	<string name="Closed Left">
+		Links geschlossen
+	</string>
+	<string name="Closed Right">
+		Rechts geschlossen
+	</string>
+	<string name="Coin Purse">
+		Klein
+	</string>
+	<string name="Collar Back">
+		Kragen hinten
+	</string>
+	<string name="Collar Front">
+		Kragen vorne
+	</string>
+	<string name="Corner Down">
+		Nach unten
+	</string>
+	<string name="Corner Normal">
+		Normal
+	</string>
+	<string name="Corner Up">
+		Nach oben
+	</string>
+	<string name="Creased">
+		Schlupflid
+	</string>
+	<string name="Crooked Nose">
+		Krumme Nase
+	</string>
+	<string name="Cropped Hair">
+		Kurze Haare
+	</string>
+	<string name="Cuff Flare">
+		Hosenaufschlag
+	</string>
+	<string name="Dark">
+		Dunkel
+	</string>
+	<string name="Dark Green">
+		Dunkelgrün
+	</string>
+	<string name="Darker">
+		Dunkler
+	</string>
+	<string name="Deep">
+		Tief
+	</string>
+	<string name="Default Heels">
+		Standardabsätze
+	</string>
+	<string name="Default Toe">
+		Standardspitze
+	</string>
+	<string name="Dense">
+		Dicht
+	</string>
+	<string name="Dense hair">
+		Dichtes Haar
+	</string>
+	<string name="Double Chin">
+		Doppelkinn
+	</string>
+	<string name="Downturned">
+		Nach unten
+	</string>
+	<string name="Duffle Bag">
+		Groß
+	</string>
+	<string name="Ear Angle">
+		Ohrenwinkel
+	</string>
+	<string name="Ear Size">
+		Ohrengröße
+	</string>
+	<string name="Ear Tips">
+		Ohrenspitzen
+	</string>
+	<string name="Egg Head">
+		Eierkopf
+	</string>
+	<string name="Eye Bags">
+		Augenränder
+	</string>
+	<string name="Eye Color">
+		Augenfarbe
+	</string>
+	<string name="Eye Depth">
+		Augentiefe
+	</string>
+	<string name="Eye Lightness">
+		Helligkeit
+	</string>
+	<string name="Eye Opening">
+		Öffnung
+	</string>
+	<string name="Eye Pop">
+		Symmetrie
+	</string>
+	<string name="Eye Size">
+		Augengröße
+	</string>
+	<string name="Eye Spacing">
+		Augenstand
+	</string>
+	<string name="Eyeball Size">
+		Größe des Augapfels
+	</string>
+	<string name="Eyebrow Arc">
+		Brauenbogen
+	</string>
+	<string name="Eyebrow Density">
+		Brauendichte
+	</string>
+	<string name="Eyebrow Height">
+		Brauenhöhe
+	</string>
+	<string name="Eyebrow Points">
+		Brauenenden
+	</string>
+	<string name="Eyebrow Size">
+		Brauengröße
+	</string>
+	<string name="Eyelash Length">
+		Wimpernlänge
+	</string>
+	<string name="Eyeliner">
+		Eyeliner
+	</string>
+	<string name="Eyeliner Color">
+		Farbe des Eyeliners
+	</string>
+	<string name="Eyes Back">
+		Augen zurück
+	</string>
+	<string name="Eyes Bugged">
+		Glubschaugen
+	</string>
+	<string name="Eyes Forward">
+		Augen nach vorne
+	</string>
+	<string name="Eyes Long Head">
+		Augen langer Kopf
+	</string>
+	<string name="Eyes Shear Left Up">
+		Augen Verzerrung links hoch
+	</string>
+	<string name="Eyes Shear Right Up">
+		Augen Verzerrung rechts hoch
+	</string>
+	<string name="Eyes Short Head">
+		Augen kurzer Kopf
+	</string>
+	<string name="Eyes Spread">
+		Augen auseinander
+	</string>
+	<string name="Eyes Sunken">
+		eingesunkene Augen
+	</string>
+	<string name="Eyes Together">
+		Augen zusammen
+	</string>
+	<string name="Face Shear">
+		Gesichtsverzerrung
+	</string>
+	<string name="Facial Definition">
+		Gesichtskonturen
+	</string>
+	<string name="Far Set Eyes">
+		Weit auseinander
+	</string>
+	<string name="Fat">
+		Dick
+	</string>
+	<string name="Fat Head">
+		Dicker Kopf
+	</string>
+	<string name="Fat Lips">
+		Volle Lippen
+	</string>
+	<string name="Fat Lower">
+		Volle Unterlippe
+	</string>
+	<string name="Fat Lower Lip">
+		Volle Unterlippe
+	</string>
+	<string name="Fat Torso">
+		Dicker Körper
+	</string>
+	<string name="Fat Upper">
+		Volle Oberlippe
+	</string>
+	<string name="Fat Upper Lip">
+		Volle Oberlippe
+	</string>
+	<string name="Female">
+		weiblich
+	</string>
+	<string name="Fingerless">
+		Ohne Finger
+	</string>
+	<string name="Fingers">
+		Finger
+	</string>
+	<string name="Flared Cuffs">
+		Ausgestellt
+	</string>
+	<string name="Flat">
+		Flach
+	</string>
+	<string name="Flat Butt">
+		Flacher Hintern
+	</string>
+	<string name="Flat Head">
+		Flacher Kopf
+	</string>
+	<string name="Flat Toe">
+		Flache Spitze
+	</string>
+	<string name="Foot Size">
+		Fußgröße
+	</string>
+	<string name="Forehead Angle">
+		Stirnwinkel
+	</string>
+	<string name="Forehead Heavy">
+		Stirn ausgeprägt
+	</string>
+	<string name="Freckles">
+		Sommersprossen
+	</string>
+	<string name="Front Bangs Down">
+		Langer Pony
+	</string>
+	<string name="Front Bangs Up">
+		Kurzer Pony
+	</string>
+	<string name="Front Fringe">
+		Fransen, vorne
+	</string>
+	<string name="Front Hair">
+		Vorderhaar
+	</string>
+	<string name="Front Hair Down">
+		langes Vorderhaar
+	</string>
+	<string name="Front Hair Up">
+		Kurzes Vorderhaar
+	</string>
+	<string name="Full Back">
+		Hinten volles Haar
+	</string>
+	<string name="Full Eyeliner">
+		Starker Eyeliner
+	</string>
+	<string name="Full Front">
+		Vorne volles Haar
+	</string>
+	<string name="Full Hair Sides">
+		Seitlich volles Haar
+	</string>
+	<string name="Full Sides">
+		Volle Seiten
+	</string>
+	<string name="Glossy">
+		Glänzend
+	</string>
+	<string name="Glove Fingers">
+		Handschuhfinger
+	</string>
+	<string name="Glove Length">
+		Handschuhlänge
+	</string>
+	<string name="Hair">
+		Haare
+	</string>
+	<string name="Hair Back">
+		Haare: Hinten
+	</string>
+	<string name="Hair Front">
+		Haare: Vorne
+	</string>
+	<string name="Hair Sides">
+		Haare: Seiten
+	</string>
+	<string name="Hair Sweep">
+		Haartolle
+	</string>
+	<string name="Hair Thickess">
+		Haardicke
+	</string>
+	<string name="Hair Thickness">
+		Haardicke
+	</string>
+	<string name="Hair Tilt">
+		Haarneigung
+	</string>
+	<string name="Hair Tilted Left">
+		Nach links
+	</string>
+	<string name="Hair Tilted Right">
+		Nach rechts
+	</string>
+	<string name="Hair Volume">
+		Haare: Volumen
+	</string>
+	<string name="Hand Size">
+		Handgröße
+	</string>
+	<string name="Handlebars">
+		Zwirbelbart
+	</string>
+	<string name="Head Length">
+		Kopflänge
+	</string>
+	<string name="Head Shape">
+		Kopfform
+	</string>
+	<string name="Head Size">
+		Kopfgröße
+	</string>
+	<string name="Head Stretch">
+		Kopfstreckung
+	</string>
+	<string name="Heel Height">
+		Absatzhöhe
+	</string>
+	<string name="Heel Shape">
+		Absatzform
+	</string>
+	<string name="Height">
+		Höhe
+	</string>
+	<string name="High">
+		Hoch
+	</string>
+	<string name="High Heels">
+		Hohe Absätze
+	</string>
+	<string name="High Jaw">
+		Hoch
+	</string>
+	<string name="High Platforms">
+		Hohe Plattformsohlen
+	</string>
+	<string name="High and Tight">
+		Hoch und eng
+	</string>
+	<string name="Higher">
+		Höhere
+	</string>
+	<string name="Hip Length">
+		Länge der Hüfte
+	</string>
+	<string name="Hip Width">
+		Breite der Hüfte
+	</string>
+	<string name="In">
+		In
+	</string>
+	<string name="In Shdw Color">
+		Farbe Innenseite
+	</string>
+	<string name="In Shdw Opacity">
+		Deckkraft: innerer Lidschatten
+	</string>
+	<string name="Inner Eye Corner">
+		Ecke: Nasenseite
+	</string>
+	<string name="Inner Eye Shadow">
+		Innerer Lidschatten
+	</string>
+	<string name="Inner Shadow">
+		Innerer Lidschatten
+	</string>
+	<string name="Jacket Length">
+		Jackenlänge
+	</string>
+	<string name="Jacket Wrinkles">
+		Jackenfalten
+	</string>
+	<string name="Jaw Angle">
+		Kinnansatz
+	</string>
+	<string name="Jaw Jut">
+		Kinnposition
+	</string>
+	<string name="Jaw Shape">
+		Kinnform
+	</string>
+	<string name="Join">
+		Zusammen
+	</string>
+	<string name="Jowls">
+		Hängebacken
+	</string>
+	<string name="Knee Angle">
+		Kniewinkel
+	</string>
+	<string name="Knock Kneed">
+		X-beinig
+	</string>
+	<string name="Large">
+		Groß
+	</string>
+	<string name="Large Hands">
+		Große Hände
+	</string>
+	<string name="Left Part">
+		Linksscheitel
+	</string>
+	<string name="Leg Length">
+		Beinlänge
+	</string>
+	<string name="Leg Muscles">
+		Beinmuskeln
+	</string>
+	<string name="Less">
+		Weniger
+	</string>
+	<string name="Less Body Fat">
+		Weniger Speck
+	</string>
+	<string name="Less Curtains">
+		Weniger
+	</string>
+	<string name="Less Freckles">
+		Weniger
+	</string>
+	<string name="Less Full">
+		Weniger
+	</string>
+	<string name="Less Gravity">
+		Weniger
+	</string>
+	<string name="Less Love">
+		Weniger
+	</string>
+	<string name="Less Muscles">
+		Weniger
+	</string>
+	<string name="Less Muscular">
+		Weniger
+	</string>
+	<string name="Less Rosy">
+		Weniger
+	</string>
+	<string name="Less Round">
+		Weniger
+	</string>
+	<string name="Less Saddle">
+		Weniger
+	</string>
+	<string name="Less Square">
+		Weniger
+	</string>
+	<string name="Less Volume">
+		Weniger
+	</string>
+	<string name="Less soul">
+		Weniger
+	</string>
+	<string name="Lighter">
+		Heller
+	</string>
+	<string name="Lip Cleft">
+		Amorbogen
+	</string>
+	<string name="Lip Cleft Depth">
+		Tiefe: Amorbogen
+	</string>
+	<string name="Lip Fullness">
+		Fülle
+	</string>
+	<string name="Lip Pinkness">
+		Pinkton
+	</string>
+	<string name="Lip Ratio">
+		Lippenproportionen
+	</string>
+	<string name="Lip Thickness">
+		Lippendicke
+	</string>
+	<string name="Lip Width">
+		Mundbreite
+	</string>
+	<string name="Lipgloss">
+		Lipgloss
+	</string>
+	<string name="Lipstick">
+		Lippenstift
+	</string>
+	<string name="Lipstick Color">
+		Farbe
+	</string>
+	<string name="Long">
+		Lang
+	</string>
+	<string name="Long Head">
+		Langer Kopf
+	</string>
+	<string name="Long Hips">
+		Lange Hüften
+	</string>
+	<string name="Long Legs">
+		Lange Beine
+	</string>
+	<string name="Long Neck">
+		Langer Hals
+	</string>
+	<string name="Long Pigtails">
+		Lange Zöpfe
+	</string>
+	<string name="Long Ponytail">
+		Langer Pferdeschwanz
+	</string>
+	<string name="Long Torso">
+		Langer Oberkörper
+	</string>
+	<string name="Long arms">
+		Lange Arme
+	</string>
+	<string name="Longcuffs">
+		Manschetten
+	</string>
+	<string name="Loose Pants">
+		Weite Hosen
+	</string>
+	<string name="Loose Shirt">
+		Weites Hemd
+	</string>
+	<string name="Loose Sleeves">
+		Weite Ärmel
+	</string>
+	<string name="Love Handles">
+		Fettpölsterchen
+	</string>
+	<string name="Low">
+		Niedrig
+	</string>
+	<string name="Low Heels">
+		Niedrig
+	</string>
+	<string name="Low Jaw">
+		Niedrig
+	</string>
+	<string name="Low Platforms">
+		Niedrig
+	</string>
+	<string name="Low and Loose">
+		Weit
+	</string>
+	<string name="Lower">
+		Absenken
+	</string>
+	<string name="Lower Bridge">
+		Brücke, Unterer Teil
+	</string>
+	<string name="Lower Cheeks">
+		Wangen, unterer Bereich
+	</string>
+	<string name="Male">
+		Männlich
+	</string>
+	<string name="Middle Part">
+		Mittelscheitel
+	</string>
+	<string name="More">
+		Mehr
+	</string>
+	<string name="More Blush">
+		Mehr
+	</string>
+	<string name="More Body Fat">
+		Mehr Speck
+	</string>
+	<string name="More Curtains">
+		Mehr
+	</string>
+	<string name="More Eyeshadow">
+		Mehr
+	</string>
+	<string name="More Freckles">
+		Mehr
+	</string>
+	<string name="More Full">
+		Voller
+	</string>
+	<string name="More Gravity">
+		Mehr
+	</string>
+	<string name="More Lipstick">
+		Mehr
+	</string>
+	<string name="More Love">
+		Mehr
+	</string>
+	<string name="More Lower Lip">
+		Größer
+	</string>
+	<string name="More Muscles">
+		Mehr
+	</string>
+	<string name="More Muscular">
+		Mehr
+	</string>
+	<string name="More Rosy">
+		Mehr
+	</string>
+	<string name="More Round">
+		Runder
+	</string>
+	<string name="More Saddle">
+		Mehr
+	</string>
+	<string name="More Sloped">
+		Mehr
+	</string>
+	<string name="More Square">
+		Mehr
+	</string>
+	<string name="More Upper Lip">
+		Mehr
+	</string>
+	<string name="More Vertical">
+		Mehr
+	</string>
+	<string name="More Volume">
+		Mehr
+	</string>
+	<string name="More soul">
+		Mehr
+	</string>
+	<string name="Moustache">
+		Schnauzer
+	</string>
+	<string name="Mouth Corner">
+		Mundwinkel
+	</string>
+	<string name="Mouth Position">
+		Mundposition
+	</string>
+	<string name="Mowhawk">
+		Irokese
+	</string>
+	<string name="Muscular">
+		Muskulös
+	</string>
+	<string name="Mutton Chops">
+		Koteletten
+	</string>
+	<string name="Nail Polish">
+		Nagellack
+	</string>
+	<string name="Nail Polish Color">
+		Farbe
+	</string>
+	<string name="Narrow">
+		Schmal
+	</string>
+	<string name="Narrow Back">
+		Wenig
+	</string>
+	<string name="Narrow Front">
+		Wenig
+	</string>
+	<string name="Narrow Lips">
+		Schmale Lippen
+	</string>
+	<string name="Natural">
+		Natürlich
+	</string>
+	<string name="Neck Length">
+		Halslänge
+	</string>
+	<string name="Neck Thickness">
+		Halsdicke
+	</string>
+	<string name="No Blush">
+		Kein Rouge
+	</string>
+	<string name="No Eyeliner">
+		Kein Eyeliner
+	</string>
+	<string name="No Eyeshadow">
+		Kein Lidschatten
+	</string>
+	<string name="No Heels">
+		Keine Absätze
+	</string>
+	<string name="No Lipgloss">
+		Kein Lipgloss
+	</string>
+	<string name="No Lipstick">
+		Kein Lippenstift
+	</string>
+	<string name="No Part">
+		Kein Scheitel
+	</string>
+	<string name="No Polish">
+		Kein Nagellack
+	</string>
+	<string name="No Red">
+		Nicht rot
+	</string>
+	<string name="No Spikes">
+		Keine Stachel
+	</string>
+	<string name="No White">
+		Kein Weiß
+	</string>
+	<string name="No Wrinkles">
+		Keine Falten
+	</string>
+	<string name="Normal Lower">
+		Normal unten
+	</string>
+	<string name="Normal Upper">
+		Normal oben
+	</string>
+	<string name="Nose Left">
+		Links
+	</string>
+	<string name="Nose Right">
+		Rechts
+	</string>
+	<string name="Nose Size">
+		Größe
+	</string>
+	<string name="Nose Thickness">
+		Dicke
+	</string>
+	<string name="Nose Tip Angle">
+		Nasenspitze
+	</string>
+	<string name="Nose Tip Shape">
+		Nasenspitze
+	</string>
+	<string name="Nose Width">
+		Nasenbreite
+	</string>
+	<string name="Nostril Division">
+		Teilung
+	</string>
+	<string name="Nostril Width">
+		Größe
+	</string>
+	<string name="Old">
+		Alt
+	</string>
+	<string name="Opaque">
+		Deckend
+	</string>
+	<string name="Open">
+		Öffnen
+	</string>
+	<string name="Open Back">
+		Hinten offen
+	</string>
+	<string name="Open Front">
+		Vorne offen
+	</string>
+	<string name="Open Left">
+		Links offen
+	</string>
+	<string name="Open Right">
+		Rechts offen
+	</string>
+	<string name="Orange">
+		Orange
+	</string>
+	<string name="Out">
+		Aus
+	</string>
+	<string name="Out Shdw Color">
+		Farbe: Oberer Lidschatten
+	</string>
+	<string name="Out Shdw Opacity">
+		Deckkraft: Oberer Lidschatten
+	</string>
+	<string name="Outer Eye Corner">
+		Äußerer Augenwinkel
+	</string>
+	<string name="Outer Eye Shadow">
+		Lidschatten: Oben
+	</string>
+	<string name="Outer Shadow">
+		Lidschatten: Oben
+	</string>
+	<string name="Overbite">
+		Ãœberbiss
+	</string>
+	<string name="Package">
+		Ausbeulung
+	</string>
+	<string name="Painted Nails">
+		Lackierte Nägel
+	</string>
+	<string name="Pale">
+		Blass
+	</string>
+	<string name="Pants Crotch">
+		Schritt
+	</string>
+	<string name="Pants Fit">
+		Passform
+	</string>
+	<string name="Pants Length">
+		Hosenlänge
+	</string>
+	<string name="Pants Waist">
+		Hüfte
+	</string>
+	<string name="Pants Wrinkles">
+		Falten
+	</string>
+	<string name="Part">
+		Scheitel
+	</string>
+	<string name="Part Bangs">
+		Pony scheiteln
+	</string>
+	<string name="Pectorals">
+		Brustmuskel
+	</string>
+	<string name="Pigment">
+		Pigmentierung
+	</string>
+	<string name="Pigtails">
+		Zöpfe
+	</string>
+	<string name="Pink">
+		Pink
+	</string>
+	<string name="Pinker">
+		Mehr Pink
+	</string>
+	<string name="Platform Height">
+		Höhe
+	</string>
+	<string name="Platform Width">
+		Breite
+	</string>
+	<string name="Pointy">
+		Spitz
+	</string>
+	<string name="Pointy Heels">
+		Pfennigabsätze
+	</string>
+	<string name="Pointy Toe">
+		Spitz
+	</string>
+	<string name="Ponytail">
+		Pferdeschwanz
+	</string>
+	<string name="Poofy Skirt">
+		Weit ausgestellt
+	</string>
+	<string name="Pop Left Eye">
+		Linkes Auge größer
+	</string>
+	<string name="Pop Right Eye">
+		Rechtes Auge größer
+	</string>
+	<string name="Puffy">
+		Geschwollen
+	</string>
+	<string name="Puffy Eyelids">
+		Geschwollene Lider
+	</string>
+	<string name="Rainbow Color">
+		Regenbogenfarben
+	</string>
+	<string name="Red Hair">
+		Rote Haare
+	</string>
+	<string name="Red Skin">
+		Rote Haut
+	</string>
+	<string name="Regular">
+		Normal
+	</string>
+	<string name="Regular Muscles">
+		Normal muskulös
+	</string>
+	<string name="Right Part">
+		Scheitel rechts
+	</string>
+	<string name="Rosy Complexion">
+		Rosiger Teint
+	</string>
+	<string name="Round">
+		Rund
+	</string>
+	<string name="Round Forehead">
+		Runde Stirn
+	</string>
+	<string name="Ruddiness">
+		Röte
+	</string>
+	<string name="Ruddy">
+		Rötlich
+	</string>
+	<string name="Rumpled Hair">
+		Zerzauste Haare
+	</string>
+	<string name="Saddle Bags">
+		Hüftspeck
+	</string>
+	<string name="Saddlebags">
+		Hüftspeck
+	</string>
+	<string name="Scrawny">
+		Dürr
+	</string>
+	<string name="Scrawny Leg">
+		Dürres Bein
+	</string>
+	<string name="Separate">
+		Auseinander
+	</string>
+	<string name="Shading">
+		Schattierung
+	</string>
+	<string name="Shadow hair">
+		Schattenhaar
+	</string>
+	<string name="Shallow">
+		Flach
+	</string>
+	<string name="Shear Back">
+		Hinterkopf rasiert
+	</string>
+	<string name="Shear Face">
+		Gesicht verzerren
+	</string>
+	<string name="Shear Front">
+		Vorne rasiert
+	</string>
+	<string name="Shear Left">
+		Links
+	</string>
+	<string name="Shear Left Up">
+		Links
+	</string>
+	<string name="Shear Right">
+		Rechts
+	</string>
+	<string name="Shear Right Up">
+		Rechts
+	</string>
+	<string name="Sheared Back">
+		Hinterkopf rasiert
+	</string>
+	<string name="Sheared Front">
+		Vorne rasiert
+	</string>
+	<string name="Shift Left">
+		Nach links
+	</string>
+	<string name="Shift Mouth">
+		Mund verschieben
+	</string>
+	<string name="Shift Right">
+		Nach rechts
+	</string>
+	<string name="Shirt Bottom">
+		Hemdlänge
+	</string>
+	<string name="Shirt Fit">
+		Passform
+	</string>
+	<string name="Shirt Wrinkles">
+		Falten
+	</string>
+	<string name="Shoe Height">
+		Höhe
+	</string>
+	<string name="Short">
+		Kurz
+	</string>
+	<string name="Short Arms">
+		Kurze Arme
+	</string>
+	<string name="Short Legs">
+		Kurze Beine
+	</string>
+	<string name="Short Neck">
+		Kurzer Hals
+	</string>
+	<string name="Short Pigtails">
+		Kurze Zöpfe
+	</string>
+	<string name="Short Ponytail">
+		Kurzer Pferdeschwanz
+	</string>
+	<string name="Short Sideburns">
+		Kurze Koteletten
+	</string>
+	<string name="Short Torso">
+		Kurzer Oberkörper
+	</string>
+	<string name="Short hips">
+		Kurze Hüften
+	</string>
+	<string name="Shoulders">
+		Schultern
+	</string>
+	<string name="Side Bangs">
+		Seitlicher Pony
+	</string>
+	<string name="Side Bangs Down">
+		Lang
+	</string>
+	<string name="Side Bangs Up">
+		Kurz
+	</string>
+	<string name="Side Fringe">
+		Seitliche Fransen
+	</string>
+	<string name="Sideburns">
+		Koteletten
+	</string>
+	<string name="Sides Hair">
+		Seitliches Haar
+	</string>
+	<string name="Sides Hair Down">
+		Lang
+	</string>
+	<string name="Sides Hair Up">
+		Kurz
+	</string>
+	<string name="Skinny">
+		Dünn
+	</string>
+	<string name="Skinny Neck">
+		Dünner Hals
+	</string>
+	<string name="Skirt Fit">
+		Passform
+	</string>
+	<string name="Skirt Length">
+		Rocklänge
+	</string>
+	<string name="Slanted Forehead">
+		Fliehende Stirn
+	</string>
+	<string name="Sleeve Length">
+		Ärmellänge
+	</string>
+	<string name="Sleeve Looseness">
+		Passform Ärmel
+	</string>
+	<string name="Slit Back">
+		Schlitz: Hinten
+	</string>
+	<string name="Slit Front">
+		Schlitz: Vorne
+	</string>
+	<string name="Slit Left">
+		Schlitz: Links
+	</string>
+	<string name="Slit Right">
+		Schlitz: Rechts
+	</string>
+	<string name="Small">
+		Klein
+	</string>
+	<string name="Small Hands">
+		Kleine Hände
+	</string>
+	<string name="Small Head">
+		Kleiner Kopf
+	</string>
+	<string name="Smooth">
+		Glätten
+	</string>
+	<string name="Smooth Hair">
+		Glattes Haar
+	</string>
+	<string name="Socks Length">
+		Strumpflänge
+	</string>
+	<string name="Some">
+		Etwas
+	</string>
+	<string name="Soulpatch">
+		Unterlippenbart
+	</string>
+	<string name="Sparse">
+		Wenig
+	</string>
+	<string name="Spiked Hair">
+		Stachelhaare
+	</string>
+	<string name="Square">
+		Rechteck
+	</string>
+	<string name="Square Toe">
+		Eckig
+	</string>
+	<string name="Squash Head">
+		Gestaucht
+	</string>
+	<string name="Squash/Stretch Head">
+		Gestretcht/Gestaucht
+	</string>
+	<string name="Stretch Head">
+		Gestreckt
+	</string>
+	<string name="Sunken">
+		Eingefallen
+	</string>
+	<string name="Sunken Chest">
+		Trichterbrust
+	</string>
+	<string name="Sunken Eyes">
+		Eingesunkene Augen
+	</string>
+	<string name="Sweep Back">
+		Nach hinten
+	</string>
+	<string name="Sweep Forward">
+		Nach vorne
+	</string>
+	<string name="Swept Back">
+		Nach hinten
+	</string>
+	<string name="Swept Back Hair">
+		Haar nach hinten
+	</string>
+	<string name="Swept Forward">
+		Haare nach vorne
+	</string>
+	<string name="Swept Forward Hair">
+		Haare nach vorne
+	</string>
+	<string name="Tall">
+		Groß
+	</string>
+	<string name="Taper Back">
+		Ansatzbreite hinten
+	</string>
+	<string name="Taper Front">
+		Ansatzbreite vorne
+	</string>
+	<string name="Thick Heels">
+		Dicke Absätze
+	</string>
+	<string name="Thick Neck">
+		Dicker Hals
+	</string>
+	<string name="Thick Toe">
+		Dick
+	</string>
+	<string name="Thickness">
+		Dicke
+	</string>
+	<string name="Thin">
+		Dünn
+	</string>
+	<string name="Thin Eyebrows">
+		Dünne Augenbrauen
+	</string>
+	<string name="Thin Lips">
+		Dünne Lippen
+	</string>
+	<string name="Thin Nose">
+		Dünne Nase
+	</string>
+	<string name="Tight Chin">
+		Straffes Kinn
+	</string>
+	<string name="Tight Cuffs">
+		Eng
+	</string>
+	<string name="Tight Pants">
+		Enge Hosen
+	</string>
+	<string name="Tight Shirt">
+		Enges Hemd
+	</string>
+	<string name="Tight Skirt">
+		Enger Rock
+	</string>
+	<string name="Tight Sleeves">
+		Enge Ärmel
+	</string>
+	<string name="Tilt Left">
+		Nach links
+	</string>
+	<string name="Tilt Right">
+		Nach rechts
+	</string>
+	<string name="Toe Shape">
+		Spitze
+	</string>
+	<string name="Toe Thickness">
+		Dicke
+	</string>
+	<string name="Torso Length">
+		Länge des Oberkörpers
+	</string>
+	<string name="Torso Muscles">
+		Muskeln
+	</string>
+	<string name="Torso Scrawny">
+		Dürr
+	</string>
+	<string name="Unattached">
+		Frei
+	</string>
+	<string name="Uncreased">
+		Straffes Lid
+	</string>
+	<string name="Underbite">
+		Unterbiss
+	</string>
+	<string name="Unnatural">
+		Unnatürlich
+	</string>
+	<string name="Upper Bridge">
+		Brücke, oberer Teil
+	</string>
+	<string name="Upper Cheeks">
+		Obere Wangen
+	</string>
+	<string name="Upper Chin Cleft">
+		Obere Kinnspalte
+	</string>
+	<string name="Upper Eyelid Fold">
+		Obere Lidfalte
+	</string>
+	<string name="Upturned">
+		Stupsnase
+	</string>
+	<string name="Very Red">
+		Sehr rot
+	</string>
+	<string name="Waist Height">
+		Bund
+	</string>
+	<string name="Well-Fed">
+		Gut genährt
+	</string>
+	<string name="White Hair">
+		Weiße Haare
+	</string>
+	<string name="Wide">
+		Breit
+	</string>
+	<string name="Wide Back">
+		Breit
+	</string>
+	<string name="Wide Front">
+		Breit
+	</string>
+	<string name="Wide Lips">
+		Breit
+	</string>
+	<string name="Wild">
+		Wild
+	</string>
+	<string name="Wrinkles">
+		Falten
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		Zu meinen Landmarken hinzufügen
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		Meine Landmarken bearbeiten
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] Aktualisierung
+	</string>
+	<string name="UpdaterNowUpdating">
+		[APP_NAME] wird aktualisiert...
+	</string>
+	<string name="UpdaterNowInstalling">
+		[APP_NAME] wird installiert...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		Ihr [APP_NAME]-Viewer wird aktualisiert.  Dies kann einen Moment dauern. Wir bitten um Ihr Verständnis.
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		Aktualisierung wird heruntergeladen...
+	</string>
+	<string name="UpdaterProgressBarText">
+		Aktualisierung wird heruntergeladen
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		Herunterladen ist fehlgeschlagen
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		Beim Aktualisieren von [APP_NAME] ist ein Fehler aufgetreten. Bitte laden Sie die aktuellste Version von www.secondlife.com herunter.
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		Aktualisierung konnte nicht installiert werden
+	</string>
+	<string name="UpdaterFailStartTitle">
+		Viewer konnte nicht gestartet werden
+	</string>
+	<string name="only_user_message">
+		Sie sind der einzige Benutzer in dieser Sitzung.
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST] ist offline.
+	</string>
+	<string name="invite_message">
+		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
+	</string>
+	<string name="generic_request_error">
+		Fehler bei Anfrage, bitte versuchen Sie es später.
+	</string>
+	<string name="insufficient_perms_error">
+		Sie sind dazu nicht berechtigt.
+	</string>
+	<string name="session_does_not_exist_error">
+		Die Sitzung ist abgelaufen
+	</string>
+	<string name="no_ability_error">
+		Sie besitzen diese Fähigkeit nicht.
+	</string>
+	<string name="no_ability">
+		Sie besitzen diese Fähigkeit nicht.
+	</string>
+	<string name="not_a_mod_error">
+		Sie sind kein Sitzungsmoderator.
+	</string>
+	<string name="muted_error">
+		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
+	</string>
+	<string name="add_session_event">
+		Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
+	</string>
+	<string name="message_session_event">
+		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
+	</string>
+	<string name="removed_from_group">
+		Sie wurden von der Gruppe ausgeschlossen.
+	</string>
+	<string name="close_on_no_ability">
+		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml
index 31f92dc920b382e8f9fe1492ec6e88d29f7efc31..231798c6a6f0fda31630f8bd4d0abee963ab5a14 100644
--- a/indra/newview/skins/default/xui/de/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/de/teleport_strings.xml
@@ -1,78 +1,78 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-		</message>
-		<message name="invalid_region_handoff">
-			Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen sich zum Wechsel der Region eventuell neu anmelden. Wenn Sie diese Nachricht weiterhin erhalten, konsultieren Sie bitte die Tech-Support-FAQ unter:
-www.secondlife.com/support
-		</message>
-		<message name="blocked_tport">
-			Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
-Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
-		</message>
-		<message name="nolandmark_tport">
-			Das System konnte das Landmarken-Ziel nicht finden.
-		</message>
-		<message name="timeout_tport">
-			Das System konnte keine Teleport-Verbindung herstellen.
-Versuchen Sie es später noch einmal.
-		</message>
-		<message name="noaccess_tport">
-			Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
-		</message>
-		<message name="missing_attach_tport">
-			Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
-		</message>
-		<message name="too_many_uploads_tport">
-			Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
-Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
-		</message>
-		<message name="expired_tport">
-			Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="expired_region_handoff">
-			Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="no_host">
-			Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
-		</message>
-		<message name="no_inventory_host">
-			Das Inventarsystem ist zurzeit nicht verfügbar.
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			Transport zum Ziel.
-		</message>
-		<message name="redirecting">
-			Weiterleitung an anderes Ziel.
-		</message>
-		<message name="relaying">
-			Weiterleitung zum Ziel.
-		</message>
-		<message name="sending_home">
-			Zuhause-Position wird ermittelt.
-		</message>
-		<message name="sending_landmark">
-			Landmarken-Position wird ermittelt.
-		</message>
-		<message name="completing">
-			Teleport wird abgeschlossen.
-		</message>
-		<message name="resolving">
-			Ziel wird ermittelt.
-		</message>
-		<message name="contacting">
-			Verbindung zu neuer Region.
-		</message>
-		<message name="arriving">
-			Ziel erreicht...
-		</message>
-		<message name="requesting">
-			Teleport wird initialisiert...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			Bei der Bearbeitung Ihrer Teleport-Anfrage ist ein Problem aufgetreten. Sie müssen sich zum Teleportieren eventuell neu anmelden.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+		</message>
+		<message name="invalid_region_handoff">
+			Bei der Bearbeitung Ihres Regionswechsels ist ein Problem aufgetreten. Sie müssen eventuell neu anmelden, um die Region wechseln zu können.
+Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_SITE].
+		</message>
+		<message name="blocked_tport">
+			Teleportieren ist zurzeit leider nicht möglich. Versuchen Sie es später noch einmal.
+Wenn der Teleport dann immer noch nicht funktioniert, melden Sie sich bitte ab und wieder an.
+		</message>
+		<message name="nolandmark_tport">
+			Das System konnte das Landmarken-Ziel nicht finden.
+		</message>
+		<message name="timeout_tport">
+			Das System konnte keine Teleport-Verbindung herstellen.
+Versuchen Sie es später noch einmal.
+		</message>
+		<message name="noaccess_tport">
+			Sie haben leider keinen Zugang zu diesem Teleport-Ziel.
+		</message>
+		<message name="missing_attach_tport">
+			Ihre Anhänge sind noch nicht eingetroffen. Warten Sie kurz oder melden Sie sich ab und wieder an, bevor Sie einen neuen Teleport-Versuch unternehmen.
+		</message>
+		<message name="too_many_uploads_tport">
+			Die Asset-Warteschlange in dieser Region ist zurzeit überlastet.
+Ihre Teleport-Anfrage kann nicht sofort bearbeitet werden. Versuchen Sie es in einigen Minuten erneut oder besuchen Sie eine weniger überfüllte Region.
+		</message>
+		<message name="expired_tport">
+			Das System konnte Ihre Teleport-Anfrage nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="expired_region_handoff">
+			Das System konnte Ihre Anfrage zum Regionswechsel nicht rechtzeitig bearbeiten. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="no_host">
+			Teleport-Ziel wurde nicht gefunden. Das Ziel ist entweder im Moment nicht verfügbar oder existiert nicht mehr. Versuchen Sie es in einigen Minuten erneut.
+		</message>
+		<message name="no_inventory_host">
+			Das Inventarsystem ist zurzeit nicht verfügbar.
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			Transport zum Ziel.
+		</message>
+		<message name="redirecting">
+			Weiterleitung an anderes Ziel.
+		</message>
+		<message name="relaying">
+			Weiterleitung zum Ziel.
+		</message>
+		<message name="sending_home">
+			Zuhause-Position wird ermittelt.
+		</message>
+		<message name="sending_landmark">
+			Landmarken-Position wird ermittelt.
+		</message>
+		<message name="completing">
+			Teleport wird abgeschlossen.
+		</message>
+		<message name="resolving">
+			Ziel wird ermittelt.
+		</message>
+		<message name="contacting">
+			Verbindung zu neuer Region.
+		</message>
+		<message name="arriving">
+			Ziel erreicht...
+		</message>
+		<message name="requesting">
+			Teleport wird initialisiert...
+		</message>
+	</message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index c35cbb15393aa446f5a4cf386518fae8573306b6..361f5a7bc827dad2abd8b5d9ab312b16134f38c8 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -9,10 +9,10 @@
  image_disabled_selected="transparent.j2c"
  image_selected="transparent.j2c"
  image_unselected="transparent.j2c"
- image_hover_selected="FileMenu_BarSelect"
- image_hover_unselected="FileMenu_BarSelect"
- image_pressed="FileMenu_BarSelect"
- image_pressed_selected="FileMenu_BarSelect"
+ image_hover_selected="Favorite_Link_Over"
+ image_hover_unselected="Favorite_Link_Over"
+ image_pressed="Favorite_Link_Over"
+ image_pressed_selected="Favorite_Link_Over"
  hover_glow_amount="0.15"
  layout="topleft"
  left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 3789369e7437ef6d2b2e90b99b049460fee0082a..d0d0cc64c55ee442f775141b8850b98c77fd7579 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
- legacy_header_height="18"
- height="440"
+ height="768"
  layout="topleft"
  name="floater_aaa"
- help_topic="floater_aaa"
- save_rect="true"
  can_resize="true" 
- title="About [APP_NAME]"
- width="470">
-    <text_editor
-     follows="left|top|right|bottom"
-     height="400"
-     layout="topleft"
-     left="6"
-     max_length="65536"
-     name="credits_editor"
-     top="25"
-     width="458"
-     word_wrap="true">
-This is line 4
-    </text_editor>
+ width="1024">
+  <panel filename="main_view.xml" follows="all" width="1024" height="768" top="0"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index e168f964b7402638c1a13fc5c1c3572b5b800f1f..056d08e6dafc8041b4b1dcadcbdb956d95e2d6ed 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -6,7 +6,7 @@
  name="floater_about"
  help_topic="floater_about"
  save_rect="true"
- title="About [APP_NAME]"
+ title="ABOUT [APP_NAME]"
  width="470">
   <floater.string
      name="AboutHeader">
@@ -69,7 +69,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
     tab_position="top">
     <panel
       border="true" 
-      label="Support"
+      label="Info"
       help_topic="about_support_tab"
       name="support_panel">
       <text_editor
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index e13aa610e535d118259e86ce2d530297267e765b..615d1bf18d4e9e764f164db93e4a4ce39f439f94 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,13 +1,12 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
- legacy_header_height="18"
  can_tear_off="false"
  height="420"
  layout="topleft"
  name="floaterland"
  help_topic="floaterland"
  save_rect="true"
- title="About Land"
+ title="ABOUT LAND"
  width="460">
     <floater.string
      name="Minutes">
@@ -26,28 +25,24 @@
         remaining
     </floater.string>
     <tab_container
-     follows="all"
+     follows="left|top|right|bottom"
      height="400"
-   halign="center"
      layout="topleft"
-     font="SansSerifSmall"
      left="1"
-      tab_padding_right="5"
-      tab_height="20"
      name="landtab"
      tab_position="top"
      top="20"
      width="459">
-   <panel
+        <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="General"
          layout="topleft"
          left="1"
          help_topic="land_general_tab"
          name="land_general_panel"
-         top="0"
+         top="-31"
          width="458">
             <panel.string
              name="new users only">
@@ -536,7 +531,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="Covenant"
          layout="topleft"
@@ -632,7 +627,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              length="1"
              enabled="false"
              follows="left|top|right|bottom"
-             handle_edit_keys_directly="true"
+             handle_edit_keys_directly="true" 
              height="115"
              layout="topleft"
              left_delta="0"
@@ -803,7 +798,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="380"
          label="Objects"
          layout="topleft"
@@ -854,7 +849,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left_delta="152"
              name="objects_available"
              top_delta="0"
-             width="212">
+             width="260">
                 [COUNT] out of [MAX] ([AVAILABLE] available)
             </text>
             <text
@@ -875,7 +870,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="152"
+             left_delta="200"
              name="object_contrib_text"
              top_delta="0"
              width="212">
@@ -899,7 +894,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="152"
+             left_delta="200"
              name="total_objects_text"
              top_delta="0"
              width="48">
@@ -914,7 +909,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Owned by parcel owner:"
              top="84"
-             width="128">
+             width="176">
                 Owned by parcel owner:
             </text>
             <text
@@ -923,7 +918,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="owner_objects_text"
              top_delta="0"
              width="48">
@@ -939,7 +934,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowOwner"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="100"
@@ -951,7 +946,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnOwner..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -963,7 +958,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Set to group:"
              top="104"
-             width="128">
+             width="176">
                 Set to group:
             </text>
             <text
@@ -972,7 +967,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="group_objects_text"
              top_delta="0"
              width="48">
@@ -988,7 +983,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowGroup"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="120"
@@ -1000,7 +995,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnGroup..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -1012,7 +1007,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Owned by others:"
              top="124"
-             width="128">
+             width="176">
                 Owned by others:
             </text>
             <text
@@ -1021,7 +1016,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="other_objects_text"
              top_delta="0"
              width="48">
@@ -1037,7 +1032,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Show"
              layout="topleft"
              name="ShowOther"
-             right="-190"
+             right="-140"
              width="60" />
             <button
              bottom="140"
@@ -1049,7 +1044,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              label_selected="Return..."
              layout="topleft"
              name="ReturnOther..."
-             right="-60"
+             right="-10"
              tool_tip="Return objects to their owners."
              width="119" />
             <text
@@ -1061,7 +1056,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              left="28"
              name="Selected / sat upon:"
              top="144"
-             width="128">
+             width="176">
                 Selected / sat upon:
             </text>
             <text
@@ -1070,7 +1065,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="128"
+             left_delta="176"
              name="selected_objects_text"
              top_delta="0"
              width="48">
@@ -1097,7 +1092,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              layout="topleft"
              max_length="6"
              name="clean other time"
-             right="-100"
+             right="-50"
              width="56" />
             <text
              type="string"
@@ -1169,7 +1164,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="333"
          label="Options"
          layout="topleft"
@@ -1492,16 +1487,6 @@ Only large parcels can be listed in search.
                  name="item12"
                  value="other" />
             </combo_box>
-            <button
-             follows="left|top"
-             height="18"
-             label="?"
-             label_selected="?"
-             layout="topleft"
-             left_pad="15"
-             name="?"
-             top_delta="0"
-             width="18" />
             <check_box
              height="16"
              label="Mature Content"
@@ -1605,15 +1590,16 @@ Only large parcels can be listed in search.
                  value="Anywhere" />
             </combo_box>
         </panel>
-     <panel
+        <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="363"
          label="Media"
          layout="topleft"
          left_delta="0"
          help_topic="land_media_tab"
          name="land_media_panel"
+         top_delta="1"
          width="458">
             <text
              type="string"
@@ -1624,22 +1610,24 @@ Only large parcels can be listed in search.
              left="10"
              name="with media:"
              top="9"
-             width="100">
+             width="65">
                 Type:
             </text>
             <combo_box
-            height="20"
+             height="18"
              layout="topleft"
-             left_pad="10"
+             left_pad="5"
              name="media type"
              tool_tip="Specify if the URL is a movie, web page, or other media"
-             width="150" />
+             top_delta="-2"
+             width="120" />
             <text
              follows="left|top"
              height="16"
              layout="topleft"
              left_pad="10"
              name="mime_type"
+             top_delta="2"
              width="200" />
             <text
              type="string"
@@ -1649,30 +1637,32 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="at URL:"
-             top_pad="10"
-             width="100">
+             top="29"
+             width="65">
                 Home URL:
             </text>
             <line_editor
+             bottom_delta="0"
              follows="left|top"
-             height="20"
+             height="16"
              layout="topleft"
-             left_pad="10"
+             left="80"
              max_length="255"
              name="media_url"
+             right="-80"
              select_on_focus="true"
-             width="270"
-            />
+             text_readonly_color="0.576471 0.662745 0.835294 1" />
             <button
              follows="left|top"
              font="SansSerifSmall"
-             height="20"
-             label="Set"
-             label_selected="Set"
+             height="16"
+             label="Set..."
+             label_selected="Set..."
              layout="topleft"
-             left_pad="5"
+             left_pad="8"
              name="set_media_url"
-             width="50" />
+             top_delta="0"
+             width="60" />
             <text
              type="string"
              length="1"
@@ -1681,34 +1671,37 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="CurrentURL:"
-             top_pad="10"
-             width="100">
+             top="49"
+             width="65">
                 Current URL:
             </text>
             <text
              follows="left|top"
              height="16"
              layout="topleft"
-             left_pad="10"
+             left_pad="5"
              name="current_url"
-             width="260">http://</text>
+             top_delta="0"
+             width="300" />
             <button
              follows="left|top"
-             height="20"
-             label="Reset"
-             label_selected="Reset"
+             font="SansSerifSmall"
+             height="16"
+             label="Reset..."
+             label_selected="Reset..."
              layout="topleft"
              left_pad="6"
              name="reset_media_url"
+             top_delta="0"
              width="60" />
             <check_box
              height="16"
              label="Hide URL"
              layout="topleft"
-             left="120"
+             left="100"
              name="hide_media_url"
              tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
-             top_pad="2"
+             top="89"
              width="200" />
             <text
              type="string"
@@ -1718,20 +1711,23 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Description:"
-             top_pad="10"
-             width="100">
+             top="49"
+             width="364">
                 Description:
             </text>
             <line_editor
+             border_style="line"
+             border_thickness="1"
+             bottom_delta="0"
              follows="left|top"
-             height="35"
+             height="16"
              layout="topleft"
+             left="80"
+             max_length="255"
              name="url_description"
-             left_pad="10"
+             right="-80"
              select_on_focus="true"
-             tool_tip="Text displayed next to play/load button"
-             top_delta="0"
-             width="270" />
+             tool_tip="Text displayed next to play/load button" />
             <text
              type="string"
              length="1"
@@ -1740,9 +1736,10 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Media texture:"
-             top_pad="10"
-             width="100">
-                Replace Texture:
+             top="69"
+             width="364">
+                Replace
+Texture:
             </text>
             <texture_picker
              allow_no_texture="true"
@@ -1750,7 +1747,7 @@ Only large parcels can be listed in search.
              follows="left|top"
              height="80"
              layout="topleft"
-             left_pad="10"
+             left_delta="70"
              name="media texture"
              tool_tip="Click to choose a picture"
              top_delta="0"
@@ -1759,22 +1756,25 @@ Only large parcels can be listed in search.
              type="string"
              length="1"
              follows="left|top"
-             height="50"
+             height="16"
              layout="topleft"
-             left_pad="10"
+             left_delta="75"
              name="replace_texture_help"
-             top_delta="0"
-             word_wrap="true"
-             width="240">
-                Objects using this texture will show the movie or  web page after you click the play arrow.
+             top="85"
+             width="270">
+                Objects using this texture will show the movie or
+        web page after you click the play arrow.
+
+        Select the thumbnail to choose a different texture.
             </text>
             <check_box
              height="16"
              label="Auto scale"
              layout="topleft"
+             left_delta="70"
              name="media_auto_scale"
              tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
-             top_pad="3"
+             top_delta="0"
              width="200" />
             <text
              type="string"
@@ -1782,11 +1782,11 @@ Only large parcels can be listed in search.
              follows="left|top"
              height="16"
              layout="topleft"
-             left="10"
-             top_pad="10"
+             left="85"
              name="media_size"
              tool_tip="Size to render Web media, leave 0 for default."
-             width="100">
+             top="185"
+             width="85">
                 Size:
             </text>
             <spinner
@@ -1798,22 +1798,12 @@ Only large parcels can be listed in search.
              increment="1"
              initial_value="0"
              layout="topleft"
-             left_pad="10"
+             left_delta="65"
              max_val="1024"
              name="media_size_width"
              tool_tip="Size to render Web media, leave 0 for default."
              top_delta="0"
              width="64" />
-                         <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left_pad="5"
-             name="pixels">
-                px wide
-            </text>
             <spinner
              decimal_digits="0"
              enabled="false"
@@ -1823,21 +1813,23 @@ Only large parcels can be listed in search.
              increment="1"
              initial_value="0"
              layout="topleft"
-             left="120"
-             top_pad="3"
+             left_pad="16"
              max_val="1024"
              name="media_size_height"
              tool_tip="Size to render Web media, leave 0 for default."
+             top_delta="0"
              width="64" />
             <text
              type="string"
              length="1"
+             bottom_delta="0"
              follows="left|top"
              height="16"
              layout="topleft"
-             left_pad="5"
-             name="pixels">
-                px high
+             left_delta="70"
+             name="pixels"
+             right="-10">
+                pixels
             </text>
             <text
              type="string"
@@ -1847,15 +1839,15 @@ Only large parcels can be listed in search.
              layout="topleft"
              left="10"
              name="Options:"
-             top_pad="10"
-             width="100">
+             top="237"
+             width="292">
                 Options:
             </text>
             <check_box
              height="16"
              label="Loop"
              layout="topleft"
-             left_pad="10"
+             left_delta="70"
              name="media_loop"
              tool_tip="Play media in a loop.  When the media has finished playing, it will restart from the beginning."
              top_delta="0"
@@ -1863,9 +1855,9 @@ Only large parcels can be listed in search.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="363"
-         label="Sound"
+         label="Audio"
          layout="topleft"
          left_delta="0"
          help_topic="land_audio_tab"
@@ -1916,16 +1908,6 @@ Only large parcels can be listed in search.
              name="check sound local"
              top_delta="0"
              width="292" />
-            <button
-             follows="left|top"
-             height="18"
-             label="?"
-             label_selected="?"
-             layout="topleft"
-             left_delta="292"
-             name="?"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1967,7 +1949,7 @@ Only large parcels can be listed in search.
         </panel>
         <panel
          border="true"
-         follows="all"
+         follows="left|top|right|bottom"
          height="333"
          label="Access"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml
index 1bc9cde044257f33a1f1488dacd088cbea8b1e08..96fe0aa70c1f6b9dac0ef30aa8a297177490a917 100644
--- a/indra/newview/skins/default/xui/en/floater_activeim.xml
+++ b/indra/newview/skins/default/xui/en/floater_activeim.xml
@@ -30,4 +30,4 @@
 			name="chiclet_row_panel_list"
 			width="318"/>
 	</scroll_container>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index ab3d5722f0a174e89bc2f89934034e7d872ad2e1..ebce758d3d7ac8cb21b8b9cd48889e824350eadc 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -455,7 +455,6 @@ Maximum animation length is [MAX_LENGTH] seconds.
      layout="topleft"
      left="10"
      name="play_btn"
-     picture_style="true"
      tool_tip="Play/pause your animation"
      top_pad="0"
      width="28" />
@@ -467,7 +466,6 @@ Maximum animation length is [MAX_LENGTH] seconds.
      layout="topleft"
      left_pad="4"
      name="stop_btn"
-     picture_style="true"
      tool_tip="Stop animation playback"
      top_delta="0"
      width="28" />
diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml
index aae6508041f3079e3e137d4c80b699d5d38c661c..9c6d114c4ca1792c875b553bb4655cec7fac0c2b 100644
--- a/indra/newview/skins/default/xui/en/floater_auction.xml
+++ b/indra/newview/skins/default/xui/en/floater_auction.xml
@@ -8,7 +8,7 @@
  min_width="420"
  name="floater_auction"
  help_topic="floater_auction"
- title="Start Linden Land Sale"
+ title="START LINDEN LAND SALE"
  width="420">
     <floater.string
      name="already for sale">
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 1fd9b9531873f45bf164b84663a3fa1a24cc3cb0..a0f9bb59fd2cb0849e75cd369e5a585115010e5c 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -8,7 +8,7 @@
  min_width="265"
  name="avatarpicker"
  help_topic="avatarpicker"
- title="Choose Resident"
+ title="CHOOSE RESIDENT"
  width="265">
     <floater.string
      name="not_found">
@@ -116,7 +116,6 @@
              height="20"
              width="20"
              name="RefreshFriends"
-             picture_style="true"
              image_overlay="Refresh_Off">
              <button.commit_callback 
               function="Refresh.FriendList"/>
@@ -188,7 +187,6 @@
              height="28"
              width="28"
              name="Refresh"
-             picture_style="true"
              image_overlay="Refresh_Off" />
             <scroll_list
              follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
index 4f2a36e5182f7628ac75e503a7d40e39ab097c9d..a0cb94eb691e9153e1e257f09f1a319311e32f42 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="avatar_texture_debug"
  help_topic="avatar_texture_debug"
- title="Avatar Textures"
+ title="AVATAR TEXTURES"
  width="1250">
     <floater.string
      name="InvalidAvatar">
diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml
index 1c83799e72145a7928328cdc257a021ab7657fc1..c8f6c613af27a9cd92d7f365d2e9af113fc4c2ab 100644
--- a/indra/newview/skins/default/xui/en/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/en/floater_beacons.xml
@@ -8,7 +8,7 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="Beacons"
+ title="BEACONS"
  width="240">
     <panel
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index bddbbdd3b2f902578ad80a280b714da56bebc42d..f0e678af003cde855731e9e347028c6692b1b5a6 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -7,7 +7,7 @@
  name="build options floater"
  help_topic="build_options_floater"
  save_rect="true"
- title="Grid Options"
+ title="GRID OPTIONS"
  width="264">
     <spinner
      control_name="GridResolution"
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index 02958bee743927d49d26c32a7de12cce39a0f3e7..7ae079f553ac6bb149c77f5346c2c514cd687a4c 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="floaterbulkperms"
  help_topic="floaterbulkperms"
- title="Edit Content Permissions"
+ title="EDIT CONTENT PERMISSIONS"
  width="270">
     <floater.string
      name="nothing_to_modify_text">
diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml
index 2917096f3cec2ad2ff7ae85e9d8d4a3b98a65c3d..303c28d7c88a5bcd8df7a3d7c63444524ff7d4ee 100644
--- a/indra/newview/skins/default/xui/en/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/en/floater_bumps.xml
@@ -6,7 +6,7 @@
  name="floater_bumps"
  help_topic="floater_bumps"
  save_rect="true"
- title="Bumps, Pushes &amp; Hits"
+ title="BUMPS, PUSHES &amp; HITS"
  width="400">
     <floater.string
      name="none_detected">
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
index aacc3ad8d0c9eb6c11b402f718b3b2da0642e50f..833e8beb8d4116c627607ed9b71c9cb9e3422f81 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
@@ -9,7 +9,7 @@
  name="floater_buy_contents"
  help_topic="floater_buy_contents"
  save_rect="true"
- title="Buy Contents"
+ title="BUY CONTENTS"
  width="280">
     <floater.string
      name="no_copy_text">
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index 88712bda5e6aa6e4a1eb1a8ecc320cfb0a0b556f..75711cdf89e88eb9bfe0de60b5f8fb4cf4ddc0af 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -4,7 +4,7 @@
  can_minimize="false"
  height="275"
  layout="topleft"
- title="Buy L$"
+ title="BUY L$"
  name="buy currency"
  help_topic="buy_linden_dollars"
  single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index 83145491324b207533278e491338dc7ed355995f..6e0c3dfe5403b98a295da8a7bf8cf37bc4324893 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -7,7 +7,7 @@
  name="buy land"
  help_topic="buy_land"
  single_instance="true"
- title="Buy Land"
+ title="BUY LAND"
  width="740">
     <floater.string
      name="can_resell">
@@ -115,7 +115,7 @@ Try selecting a smaller area.
     </floater.string>
     <floater.string
      name="buy_for_US">
-        Buy L$ [AMOUNT] for approx. US$ [AMOUNT2],
+        Buy L$ [AMOUNT] for approx. [LOCAL_AMOUNT],
     </floater.string>
     <floater.string
      name="parcel_meters">
@@ -172,10 +172,6 @@ supports [AMOUNT2] objects
      name="no_parcel_selected">
         (no parcel selected)
     </floater.string>
-    <floater.string
-     name="buy_currency">
-        Buy L$ [LINDENS] for approx. US$ [USD]
-    </floater.string>
     <text
      type="string"
      length="1"
@@ -667,7 +663,7 @@ This parcel is 512 m² of land.
      name="currency_est"
      top="409"
      width="178">
-        for approx. US$ [AMOUNT2]
+        for approx. [LOCAL_AMOUNT]
     </text>
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml
index 49ea3f5dd15179dd9bb7ad48654170421a762291..f0e5e30010913707cf4d4394a4f085736d57aff0 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml
@@ -10,7 +10,7 @@
  help_topic="contents"
  save_rect="true"
  single_instance="true"
- title="Buy Copy of Object"
+ title="BUY COPY OF OBJECT"
  width="280">
     <floater.string
      name="title_buy_text">
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 1b694180130cf6dff0e59b91fbf8c5201c47eb91..5c09bc3a02b338eacc634d029fe4fc7c4ae4cb76 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -34,7 +34,7 @@
      mouse_opaque="false"
      name="controls"
      width="148">
-        <joystick_track
+    <joystick_track
          follows="top|left"
          height="78"
          image_selected="Cam_Tracking_In"
@@ -42,7 +42,6 @@
          layout="topleft"
          left="45"
          name="cam_track_stick"
-         picture_style="true"
          quadrant="left"
          scale_image="false"
          sound_flags="3"
@@ -51,7 +50,7 @@
          visible="false"
          width="78" />
          <!--TODO: replace with slider, + - images -->
-        <joystick_zoom
+ <joystick_zoom
          follows="top|left"
          height="78"
          image_unselected="ScrollThumb_Vert"
@@ -59,7 +58,6 @@
          left="7"
          minus_image="ScrollThumb_Vert"
          name="zoom"
-         picture_style="true"
          plus_image="ScrollThumb_Vert"
          quadrant="left"
          scale_image="false"
@@ -75,7 +73,6 @@
          layout="topleft"
          left="45"
          name="cam_rotate_stick"
-         picture_style="true"
          quadrant="left"
          scale_image="false"
          sound_flags="3"
@@ -83,70 +80,65 @@
          tool_tip="Orbit camera around focus"
          top="22"
          width="78" />
-        <panel
+            <panel
          height="78"
          layout="topleft"
          left="36"
          name="camera_presets"
-         top="30"
+         top="20"
          visible="false"
          width="78">
             <button
-             height="30"
-             image_selected="CameraPreset_Rear"
-             image_unselected="CameraPreset_Rear"
+             height="40"
+             image_selected="Cam_Preset_Back_On"
+             image_unselected="Cam_Preset_Back_Off"
              layout="topleft"
-             left="5"
+             left="0"
              name="rear_view"
-             picture_style="true"
              tool_tip="Rear View"
              top="2"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="rear_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_3_4"
-             image_unselected="CameraPreset_3_4"
+             height="40"
+             image_selected="Cam_Preset_Side_On"
+             image_unselected="Cam_Preset_Side_Off"
              layout="topleft"
              left_pad="5"
              name="group_view"
-             picture_style="true"
              tool_tip="Group View"
              top="2"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="group_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_Front"
-             image_unselected="CameraPreset_Front"
+             height="40"
+             image_selected="Cam_Preset_Front_On"
+             image_unselected="Cam_Preset_Front_Off"
              layout="topleft"
-             left="5"
+             left="0"
              name="front_view"
-             picture_style="true"
              tool_tip="Front View"
              top_pad="5"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="front_view" />
             </button>
             <button
-             height="30"
-             image_selected="CameraPreset_Mouselook"
-             image_unselected="CameraPreset_Mouselook"
+             height="40"
+             image_selected="Cam_Preset_Eye_Off"
+             image_unselected="Cam_Preset_Eye_Off"
              layout="topleft"
              left_pad="5"
              name="mouselook_view"
-             picture_style="true"
              tool_tip="Mouselook View"
-             top_pad="-30"
-             width="30">
+             width="40">
                 <click_callback
                  function="CameraPresets.ChangeView"
                  parameter="mouselook_view" />
@@ -172,7 +164,6 @@
          name="orbit_btn"
          tab_stop="false"
          tool_tip="Orbit camera"
-         value="true"
          width="25">
         </button>
         <button
diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml
index 8b34fda96c64934ab05a8fabbe5c9b8bbadf0f2f..dc1ee5f24e21f5b4bf7591adb1d9a4a40e831ca4 100644
--- a/indra/newview/skins/default/xui/en/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/en/floater_choose_group.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="groups"
  help_topic="groups"
- title="Groups"
+ title="GROUPS"
  width="280">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
index 686b8dc40fb808c54fa848941b86c41d7efd79d7..4380ff8f4b082bb8ac26784c5095042a828c55f6 100644
--- a/indra/newview/skins/default/xui/en/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml
@@ -7,7 +7,7 @@
  layout="topleft"
  name="ColorPicker"
  help_topic="colorpicker"
- title="Color Picker"
+ title="COLOR PICKER"
  width="440">
     <text
      type="string"
@@ -168,27 +168,29 @@
     <check_box
      follows="left|bottom"
      height="20"
-     label="Apply Now"
+     label="Apply now"
      layout="topleft"
      left="12"
      name="apply_immediate"
      top_pad="185"
      width="100" />
-    <button
-     follows="left|top"
-     height="32"
+         <button
+     follows="left|bottom"
+     height="28"
+     image_selected="eye_button_active.tga"
+     image_unselected="eye_button_inactive.tga"
      layout="topleft"
-     left_pad="30"
-     name="color_pipette"
-     picture_style="true"
-     width="32" />
+     left_pad="50"
+     name="Pipette"
+     width="28" />
     <button
      follows="right|bottom"
      height="20"
      label="Ok"
-     label_selected="Select"
+     label_selected="Ok"
      layout="topleft"
-     left_pad="50"
+     right="-120"
+     top_delta="9"
      name="select_btn"
      width="100" />
     <button
@@ -198,6 +200,7 @@
      label_selected="Cancel"
      layout="topleft"
      left_pad="5"
+     right="-10"
      name="cancel_btn"
      width="100" />
     <text
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 07d76f4810025e8d62a59d9b3d4d4d0b9b7869ee..6c4f10e61e17e923b19e0fde220054a95a4aaa05 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -9,7 +9,7 @@
  name="floater customize"
  help_topic="floater_customize"
  save_rect="true"
- title="Appearance"
+ title="APPEARANCE"
  top_delta="-185"
  width="494">
     <tab_container
@@ -193,7 +193,7 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -299,7 +299,7 @@ scratch and wear it.
              left="8"
              name="Create New"
              top="104"
-             width="120" />
+             width="140" />
             <button
              follows="right|bottom"
              height="20"
@@ -342,9 +342,10 @@ scratch and wear it.
              top="4"
              width="18" />
             <icon
+             follows="left|top"
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -399,7 +400,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -599,7 +600,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -654,7 +655,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -1015,7 +1016,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -1100,7 +1101,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
@@ -1221,7 +1222,7 @@ scratch and wear it.
             <icon
              height="16"
              layout="topleft"
-             left_delta="-325"
+             left="8"
              mouse_opaque="true"
              top_delta="3"
              width="16" />
@@ -1306,7 +1307,7 @@ scratch and wear it.
              font="SansSerif"
              height="16"
              layout="topleft"
-             left="26"
+             left="8"
              name="title"
              top="8"
              width="355">
diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
index b8fa104352a362b0b196bd12a1f88c003fb80ee9..35f3e643c3858c040a24a1705df6ae58c08c3a24 100644
--- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
@@ -6,7 +6,7 @@
  name="Day Cycle Floater"
  help_topic="day_cycle_floater"
  save_rect="true"
- title="Day Cycle Editor"
+ title="DAY CYCLE EDITOR"
  width="646">
     <tab_container
      follows="left|top"
@@ -28,16 +28,6 @@
          name="Day Cycle"
          top="0"
          width="642">
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="15"
-             label="?"
-             layout="topleft"
-             left="612"
-             name="WLDayCycleHelp"
-             top="3"
-             width="18" />
             <multi_slider
              can_edit_text="true"
              control_name="WLTimeSlider"
diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml
index 2b23980423c0eac007abc17bb4dafda19e628f6c..91a7a678da1f7d4d2d50b794b90b28803efcd3ac 100644
--- a/indra/newview/skins/default/xui/en/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_device_settings.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  height="260"
  layout="topleft"
  name="floater_device_settings"
  help_topic="floater_device_settings"
- title="Voice Chat Device Settings"
+ title="VOICE CHAT DEVICE SETTINGS"
  width="405">
     <panel
      bottom="260"
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
index 7c22311f66a6cf2002da42d6373601ce57383d8a..5233cb023d4a2f798c797511d229beb7d04eaf09 100644
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml
@@ -6,7 +6,7 @@
  name="Environment Editor Floater"
  help_topic="environment_editor_floater"
  save_rect="true"
- title="Environment Editor"
+ title="ENVIRONMENT EDITOR"
  width="600">
     <floater.string
      name="timeStr">
diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml
index 8b14f691d682a74eea8f482be2c9c3c4a3b0bf37..3ab19ec9d92f97481e7a94c2673175f1146e85dc 100644
--- a/indra/newview/skins/default/xui/en/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/en/floater_font_test.xml
@@ -8,7 +8,7 @@
  min_width="154"
  name="contents"
  help_topic="contents"
- title="Font Test"
+ title="FONT TEST"
  width="500">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
index 128d518e12a07a04dc61022a5dbe82d46080106e..b23482655cf524845464bf121cd5188e966d7b5b 100644
--- a/indra/newview/skins/default/xui/en/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_gesture.xml
@@ -5,7 +5,7 @@
  height="465"
  name="gestures"
  help_topic="gestures"
- title="Gestures"
+ title="GESTURES"
  background_visible="true"
  follows="all"
  label="Places"
@@ -68,7 +68,6 @@
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
-               picture_style="true"
                top="5"
                width="18" />
               <button
@@ -81,7 +80,6 @@
                  layout="topleft"
                  left_pad="5"
                  name="new_gesture_btn"
-                 picture_style="true"
                  tool_tip="Make new gesture"
                  top_delta="0"
                  width="18" />
@@ -95,7 +93,6 @@
                  layout="topleft"
                  left_pad="230"
                  name="del_btn"
-                 picture_style="true"
                  tool_tip="Delete this gesture"
                  top_delta="0"
                  width="18" />
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index 97cb6e259c4c966f6c456a66ecac74e832d3bd55..79eed52fbfaf663ee7969283a1825739e3725689 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="godtools floater"
  help_topic="godtools_floater"
- title="God Tools"
+ title="GOD TOOLS"
  width="400">
     <tab_container
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index cd98f21918488ae18dac9759501e68250037f19a..1e2440580e1bc02327d48beebe8d8ea11337286c 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Hardware Settings Floater"
  help_topic="hardware_settings_floater"
- title="Hardware Settings"
+ title="HARDWARE SETTINGS"
  width="500">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index d2fe8d0e6d71630bf8642f53825230fb1520b68b..f50ff01230cabf3159e08039d0aaa33d5d77c91d 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -10,7 +10,7 @@
  help_topic="floater_help_browser"
  save_rect="true"
  single_instance="true"
- title="Help Browser"
+ title="HELP BROWSER"
  width="620">
     <floater.string
      name="home_page_url">
diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml
index 6e8950c49a49d9a4bf91871ffb41b6d08354e872..99a6a95828edad946f52ddd0c23ecd604e407b19 100644
--- a/indra/newview/skins/default/xui/en/floater_hud.xml
+++ b/indra/newview/skins/default/xui/en/floater_hud.xml
@@ -8,7 +8,7 @@
  help_topic="floater_hud"
  save_rect="true"
  save_visibility="true"
- title="Tutorial"
+ title="TUTORIAL"
  width="362">
     <web_browser
      border_visible="false"
diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml
index b6cf05aefcee636379de9d58b38d2e8e2fa38e16..92a611175981dab7a66b5d291067330aba897db9 100644
--- a/indra/newview/skins/default/xui/en/floater_im.xml
+++ b/indra/newview/skins/default/xui/en/floater_im.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater
+ legacy_header_height="18" 
  can_resize="true"
  follows="left|bottom"
  height="422"
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 26d2f4e497f707eb7cc6dd9647a4a9fe664d002f..452d28d4eab6004fc0fa66918cfe3676dbf56fa3 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  background_visible="true"
  follows="left|top|right|bottom"
- height="270"
+ height="369"
  layout="topleft"
  left="0"
  name="panel_im"
@@ -12,13 +12,13 @@
  can_dock="true"
  can_minimize="true"
  visible="true" 
- width="365"
+ width="520"
  can_resize="true"
- min_width="200"
- min_height="150">
+ min_width="350"
+ min_height="369">
   <layout_stack follows="left|top|right|bottom"
-                height="255"
-                width="365"
+                height="354"
+                width="520"
                 layout="topleft"
                 orientation="horizontal"
                 name="im_panels"
@@ -28,13 +28,13 @@
       name="panel_im_control_panel"
       layout="topleft"
       top_delta="-3"
-      width="146"
-      height="255"
+      height="354"
       follows="left"
       label="IM Control Panel"
+      auto_resize="false"
       user_resize="false" />
-    <layout_panel height="255"
-                  width="200"
+    <layout_panel height="354"
+                  width="355"
                   left_delta="146" 
                   top="0"
                   user_resize="false">
@@ -56,14 +56,20 @@
        length="1"
        follows="left|top|right|bottom"
        font="SansSerif"
-       height="205"
+       height="300"
        layout="topleft"
        name="chat_history"
        parse_highlights="true"
        allow_html="true" 
-       width="195">
+       width="350">
       </chat_history>
-      <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="190">
+      <line_editor
+       follows="left|right"
+       height="20"
+       label="To"
+       layout="topleft"
+       name="chat_editor"
+       width="345">
       </line_editor>
     </layout_panel>
   </layout_stack>
diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
index dcb93c6e2fa8d6aaff12d4059fc10871ab279ff2..16873df31014cde3a7c43512d89e3b94d45c3ce4 100644
--- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
@@ -8,7 +8,7 @@
  layout="topleft"
  name="incoming call"
  help_topic="incoming_call"
- title="Unknown Person is calling"
+ title="UNKNOWN PERSON IS CALLING"
  width="240">
      <floater.string
      name="anonymous">
diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml
index 9f7723c51bff9a3b9aa261da1ad0bdcd3a4a1789..3f7642fafef07128cdc97d562279eb90be5b9f81 100644
--- a/indra/newview/skins/default/xui/en/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/en/floater_inspect.xml
@@ -9,7 +9,7 @@
  name="inspect"
  help_topic="inspect"
  save_rect="true"
- title="Inspect Objects"
+ title="INSPECT OBJECTS"
  width="400">
     <floater.string
      name="timeStamp">
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 5e324f1c6ec65aee27c42e0114cd32cca78f3408..5720030af4986e836f7b80f4d6f5f07d05909e32 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -12,7 +12,7 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="Inventory"
+ title="INVENTORY"
  width="467">
     <floater.string
      name="Title">
@@ -30,102 +30,18 @@
      name="Fetched">
         Fetched
     </floater.string>
-    <filter_editor
-     search_button_visible="false"
-     text_pad_left="12"
-     follows="left|top|right"
-     height="16"
-     label="Type here to search"
-     layout="topleft"
-     left="6"
-     name="inventory search editor"
-     top="34"
-     width="455" />
-    <tab_container
-     follows="all"
-     height="508"
-     halign="center"
-     layout="topleft"
-     left_delta="-4"
-     name="inventory filter tabs"
-     tab_position="top"
-     tab_height="20"
-     top_pad="5"
-     width="463">
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="491"
-         label="All Items"
-         layout="topleft"
-         left="1"
-         name="All Items"
-         top="16"
-         width="461" />
-        <inventory_panel
-         follows="left|top|right|bottom"
-         height="491"
-         label="Recent Items"
-         layout="topleft"
-         left_delta="0"
-         name="Recent Items"
-         top_delta="0"
-         width="461" />
-    </tab_container>
-    <menu_bar
-     bg_visible="false"
-     follows="left|top|right"
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="Inventory Menu"
-     top_delta="-38"
-     width="461">
-        <menu
-         height="101"
-         label="File"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="File"
-         tear_off="true"
-         top="-117"
-         width="128">
-            <menu_item_call
-             label="Open"
-             layout="topleft"
-             name="Open">
-                <menu_item_call.on_click
-                 function="Inventory.DoToSelected"
-                 parameter="open" />
-            </menu_item_call>
-            <menu
-             create_jump_keys="true"
-             label="Upload"
-             layout="topleft"
-             name="upload"
-             tear_off="true">
-                <menu_item_call
-                 label="Image (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Image"
-                 shortcut="control|U">
-                    <menu_item_call.on_click
-                     function="File.UploadImage"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Sound (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Sound">
-                    <menu_item_call.on_click
-                     function="File.UploadSound"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
+<panel
+     bottom="560"
+	 class="panel_main_inventory"
+	 filename="panel_main_inventory.xml"
+	 follows="all"
+	 layout="topleft"
+	 left="0"
+	 label="Inventory Panel"
+	 name="Inventory Panel"
+	 top="15"
+	 width="467">
+</panel>
               <menu_item_call
                  label="Model (L$[COST])..."
                  layout="topleft"
@@ -147,308 +63,4 @@
                  function="File.EnableUpload" />
               </menu_item_call>
                 <menu_item_call
-                 label="Animation (L$[COST])..."
-                 layout="topleft"
-                 name="Upload Animation">
-                    <menu_item_call.on_click
-                     function="File.UploadAnim"
-                     parameter="" />
-                    <menu_item_call.on_enable
-                     function="File.EnableUpload" />
-                </menu_item_call>
-                <menu_item_call
-                 label="Bulk (L$[COST] per file)..."
-                 layout="topleft"
-                 name="Bulk Upload">
-                    <menu_item_call.on_click
-                     function="File.UploadBulk"
-                     parameter="" />
-                </menu_item_call>
-                <menu_item_separator
-                 layout="topleft" />
-            </menu>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_call
-             label="New Window"
-             layout="topleft"
-             name="New Window">
-                <menu_item_call.on_click
-                 function="Inventory.NewWindow" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator2" />
-            <menu_item_call
-             label="Show Filters"
-             layout="topleft"
-             name="Show Filters">
-                <menu_item_call.on_click
-                 function="Inventory.ShowFilters" />
-            </menu_item_call>
-            <menu_item_call
-             label="Reset Filters"
-             layout="topleft"
-             name="Reset Current">
-                <menu_item_call.on_click
-                 function="Inventory.ResetFilter" />
-            </menu_item_call>
-            <menu_item_call
-             label="Close All Folders"
-             layout="topleft"
-             name="Close All Folders">
-                <menu_item_call.on_click
-                 function="Inventory.CloseAllFolders" />
-            </menu_item_call>
-            <menu_item_separator
-             layout="topleft"
-             name="separator3" />
-            <menu_item_call
-             label="Empty Trash"
-             layout="topleft"
-             name="Empty Trash">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyTrash" />
-            </menu_item_call>
-            <menu_item_call
-             label="Empty Lost And Found"
-             layout="topleft"
-             name="Empty Lost And Found">
-                <menu_item_call.on_click
-                 function="Inventory.EmptyLostAndFound" />
-            </menu_item_call>
-        </menu>
-        <menu
-         height="121"
-         label="Create"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Create"
-         tear_off="true"
-         top="-201"
-         width="121">
-            <menu_item_call
-             label="New Folder"
-             layout="topleft"
-             name="New Folder">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="category" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Script"
-             layout="topleft"
-             name="New Script">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="lsl" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Note"
-             layout="topleft"
-             name="New Note">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="notecard" />
-            </menu_item_call>
-            <menu_item_call
-             label="New Gesture"
-             layout="topleft"
-             name="New Gesture">
-                <menu_item_call.on_click
-                 function="Inventory.DoCreate"
-                 parameter="gesture" />
-            </menu_item_call>
-            <menu
-             height="175"
-             label="New Clothes"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Clothes"
-             top_pad="514"
-             width="125">
-                <menu_item_call
-                 label="New Shirt"
-                 layout="topleft"
-                 name="New Shirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Pants"
-                 layout="topleft"
-                 name="New Pants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="pants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Shoes"
-                 layout="topleft"
-                 name="New Shoes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shoes" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Socks"
-                 layout="topleft"
-                 name="New Socks">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="socks" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Jacket"
-                 layout="topleft"
-                 name="New Jacket">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="jacket" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skirt"
-                 layout="topleft"
-                 name="New Skirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Gloves"
-                 layout="topleft"
-                 name="New Gloves">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="gloves" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Undershirt"
-                 layout="topleft"
-                 name="New Undershirt">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="undershirt" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Underpants"
-                 layout="topleft"
-                 name="New Underpants">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="underpants" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Alpha"
-                 layout="topleft"
-                 name="New Alpha">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="alpha" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Tattoo"
-                 layout="topleft"
-                 name="New Tattoo">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="tattoo" />
-                </menu_item_call>
-            </menu>
-            <menu
-             height="85"
-             label="New Body Parts"
-             layout="topleft"
-             left_delta="0"
-             mouse_opaque="false"
-             name="New Body Parts"
-             top_pad="514"
-             width="118">
-                <menu_item_call
-                 label="New Shape"
-                 layout="topleft"
-                 name="New Shape">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="shape" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Skin"
-                 layout="topleft"
-                 name="New Skin">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="skin" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Hair"
-                 layout="topleft"
-                 name="New Hair">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="hair" />
-                </menu_item_call>
-                <menu_item_call
-                 label="New Eyes"
-                 layout="topleft"
-                 name="New Eyes">
-                    <menu_item_call.on_click
-                     function="Inventory.DoCreate"
-                     parameter="eyes" />
-                </menu_item_call>
-            </menu>
-        </menu>
-        <menu
-         height="49"
-         label="Sort"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="Sort"
-         tear_off="true"
-         top="-113"
-         width="118">
-            <menu_item_check
-             control_name="Inventory.SortByName"
-             label="By Name"
-             layout="topleft"
-             name="By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="name" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SortByDate"
-             label="By Date"
-             layout="topleft"
-             name="By Date">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="date" />
-            </menu_item_check>
-            <menu_item_separator
-             layout="topleft" />
-            <menu_item_check
-             control_name="Inventory.FoldersAlwaysByName"
-             label="Folders Always By Name"
-             layout="topleft"
-             name="Folders Always By Name">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="foldersalwaysbyname" />
-            </menu_item_check>
-            <menu_item_check
-             control_name="Inventory.SystemFoldersToTop"
-             label="System Folders To Top"
-             layout="topleft"
-             name="System Folders To Top">
-                <menu_item_check.on_click
-                 function="Inventory.SetSortBy"
-                 parameter="systemfolderstotop" />
-            </menu_item_check>
-        </menu>
-    </menu_bar>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 4f0609c7f8ae68705ae1a0b0395206f8a22a4e3b..4ca6002c13e98af4cf39a6bfa6e342ad904615cc 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -7,7 +7,7 @@
  name="item properties"
  help_topic="item_properties"
  save_rect="true"
- title="Inventory Item Properties"
+ title="INVENTORY ITEM PROPERTIES"
  width="350">
     <floater.string
      name="unknown">
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index 0042f97a8ee77d129454c47a039c2764ccdde637..90fee857fbb8e6dcd26a6d505662d50b91a9e0af 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="Inventory Finder"
  help_topic="inventory_finder"
- title="inventory_recent_items"
+ title="INVENTORY_RECENT_ITEMS"
  width="280">
     <icon
      height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml
index e2da059ace18d682c145653caad527b0671a5679..4d67e4c343cf390db4359b4d69acd5b4b460e53c 100644
--- a/indra/newview/skins/default/xui/en/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/en/floater_joystick.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Joystick"
  help_topic="joystick"
- title="Joystick Configuration"
+ title="JOYSTICK CONFIGURATION"
  width="550">
     <floater.string
      name="NoDevice">
diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
index d98fdc5118be58d3176bcdc6a2c0c3397a5ffb4a..19f5155f884a07132caf51ab261f5311cfc31253 100644
--- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
@@ -6,7 +6,7 @@
  name="floater_lagmeter"
  help_topic="floater_lagmeter"
  save_rect="true"
- title="Lag Meter"
+ title="LAG METER"
  width="350">
     <floater.string
      name="max_title_msg">
@@ -184,7 +184,6 @@
      layout="topleft"
      left="8"
      name="client_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Client lag status"
      top="24"
@@ -233,7 +232,6 @@
      layout="topleft"
      left="8"
      name="network_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Network lag status"
      top="64"
@@ -282,7 +280,6 @@
      layout="topleft"
      left="8"
      name="server_lagmeter"
-     picture_style="true"
      tab_stop="false"
      tool_tip="Server lag status"
      top="104"
@@ -323,15 +320,6 @@
      left="40"
      name="server_lag_cause"
      right="-32" />
-    <!--button
-     bottom="145"
-     follows="left|top"
-     height="18"
-     label="?"
-     layout="topleft"
-     name="server_help"
-     right="-10"
-     width="18" /-->
     <button
      follows="left|top"
      height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
index 46d74b6aff8a258eb284285f1cb31f650791c42e..2c04a946131d1427ff80089b8d8dee86091db739 100644
--- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
- height="400"
+ height="430"
  layout="topleft"
  name="land holdings floater"
  help_topic="land_holdings_floater"
- title="My Land"
- width="280">
+ title="MY LAND"
+ width="600">
     <floater.string
      name="area_string">
         [AREA] m²
@@ -15,81 +15,82 @@
      draw_heading="true"
      height="170"
      layout="topleft"
-     left="8"
+     left="10"
      name="parcel list"
-     top="24"
-     width="270">
+     top="28"
+     width="580">
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="69" />
+         width="167" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="74" />
+         width="180" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="55" />
+         width="145" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="10" />
+         width="88" />
         <scroll_list.columns
          label=""
          name="hidden"
          width="-1" />
     </scroll_list>
     <button
-     height="20"
-     font="SansSerifSmall"
+     height="23"
+     font="SansSerifBold"
      label="Teleport"
      label_selected="Teleport"
      layout="topleft"
-     left_delta="4"
+     top="208"
+     left="10"
      name="Teleport"
      tool_tip="Teleport to the center of this land."
-     top_pad="4"
-     width="100" />
+     width="80" />
     <button
-     height="20"
-     font="SansSerifSmall"
+     height="23"
+     font="SansSerifBold"
      label="Map"
      label_selected="Map"
      layout="topleft"
-     left_pad="4"
+     top="208"
+     left="95"
      name="Show on Map"
      tool_tip="Show this land on the world map"
-     top_delta="0"
-     width="100" />
+     width="80" />
     <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
      layout="topleft"
-     left="12"
+     top="251"
+     left="10"
      name="contrib_label"
-     top="222"
-     width="480">
+     height="16"
+     width="580">
         Contributions to your groups:
     </text>
     <scroll_list
      draw_heading="true"
      height="75"
      layout="topleft"
-     left_delta="-4"
      name="grant list"
-     top_pad="4"
-     width="270">
+     top="271"
+     left="10"
+     width="580">
         <scroll_list.columns
          label="Group"
          name="group"
-         width="125" />
+         width="290"
+	 left_pad="10" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="125" />
+         width="290" />
     </scroll_list>
     <text
      type="string"
@@ -97,12 +98,11 @@
      follows="left|top"
      height="16"
      layout="topleft"
-     left_delta="4"
      name="allowed_label"
-     top_pad="4"
-     width="150">
-        Allowed land holdings at
-current payment plan:
+     top="366"
+     left="10"
+     width="290">
+        Allowed land holdings at current payment plan:
     </text>
     <text
      type="string"
@@ -110,10 +110,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
      name="allowed_text"
-     top_delta="10"
-     width="132">
+     top="366"
+     left="305"
+     width="290">
         [AREA] m²
     </text>
     <text
@@ -122,10 +122,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left="12"
+     top="386"
+     left="10"
      name="current_label"
-     top_pad="5"
-     width="150">
+     width="290">
         Current land holdings:
     </text>
     <text
@@ -134,10 +134,10 @@ current payment plan:
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
+     top="386"
+     left="305"
      name="current_text"
-     top_delta="0"
-     width="132">
+     width="290">
         [AREA] m²
     </text>
     <text
@@ -147,12 +147,11 @@ current payment plan:
      font="SansSerifBold"
      height="16"
      layout="topleft"
-     left="12"
+     top="406"
+     left="10"
      name="available_label"
-     top_pad="5"
-     width="150">
-        Available for land
-purchases:
+     width="290">
+        Available for land purchases:
     </text>
     <text
      type="string"
@@ -161,10 +160,10 @@ purchases:
      font="SansSerifBold"
      height="16"
      layout="topleft"
-     left_pad="5"
      name="available_text"
-     top_delta="5"
-     width="140">
+     top="406"
+     left="305"
+     width="290">
         [AREA] m²
     </text>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
index 93bbb0107eee8d437decbe3cc563bc6cb62c85c5..e94717fe3241b3f08c4c011cdeba4ec1a829b132 100644
--- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  bevel_style="none"
@@ -12,7 +12,7 @@
  name="script ed float"
  help_topic="script_ed_float"
  save_rect="true"
- title="Script: New Script"
+ title="SCRIPT: NEW SCRIPT"
  width="500">
     <floater.string
      name="not_allowed">
diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
index 4dcf1686053701e0f280a42fd56a80b6f0d2f172..a5b477313ccec0f0b53560a775ae9de1cc2c07e4 100644
--- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
@@ -10,7 +10,7 @@
  name="script ed float"
  help_topic="script_ed_float"
  save_rect="true"
- title="LSL Wiki"
+ title="LSL WIKI"
  width="370">
     <check_box
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index b11892be74ca4d229af3e8b4156665b5db4ac71b..d6b20c80159ede8227fff41b0df76b701644efbd 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -10,7 +10,7 @@
  help_topic="floater_about"
  save_rect="true"
  single_instance="true"
- title="Media Browser"
+ title="MEDIA BROWSER"
  width="820">
     <floater.string
      name="home_page_url">
@@ -127,7 +127,6 @@
              layout="topleft"
              left_delta="55"
              name="play"
-             picture_style="true"
              top_delta="0"
              width="55" />
             <button
@@ -138,7 +137,6 @@
              layout="topleft"
              left_delta="0"
              name="pause"
-             picture_style="true"
              top_delta="0"
              width="55" />
             <button
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
index 4218c15408150e88c936d6899c6430c8f9813330..68dd2001afb9809ab62fd563e4fff33e331d1325 100644
--- a/indra/newview/skins/default/xui/en/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml
@@ -15,9 +15,9 @@
  min_height="430" 
  min_width="620"
  mouse_opaque="true" 
- name="Medis Settings" 
+ name="Media Settings" 
  help_topic = "media_settings"
- title="Media Settings">
+ title="MEDIA SETTINGS">
 	<button 
 	 bottom="-525" 
 	 enabled="true" 
diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
index 560acafd4f8f65e74c0751e947b9e1724e982994..28a29c42aac37287bda427efa55db6888b675997 100644
--- a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
@@ -7,7 +7,7 @@
  layout="topleft"
  name="MemLeak"
  help_topic="memleak"
- title="Simulate a Memory Leak"
+ title="SIMULATE A MEMORY LEAK"
  width="350">
     <spinner
      decimal_digits="0"
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 02cbef5987e3591121b3dfb15fe3a77ca6fe39a6..5a8ffcebea5b1c238710f4f208c580e8ce65ee07 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -56,7 +56,6 @@
          layout="topleft"
          left="17"
          name="turn left btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Turn left (press Left Arrow or A)"
          top="45"
@@ -70,7 +69,6 @@
          layout="topleft"
          left_pad="34"
          name="turn right btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Turn right (press Right Arrow or D)"
          top_delta="0"
@@ -84,7 +82,6 @@
          layout="topleft"
          left="10"
          name="move up btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Fly up, press &quot;E&quot;"
          top="14"
@@ -98,7 +95,6 @@
          layout="topleft"
          left_pad="45"
          name="move down btn"
-         picture_style="true"
          scale_image="false"
          tool_tip="Fly down, press &quot;C&quot;"
          top_delta="0"
@@ -112,7 +108,6 @@
          layout="topleft"
          left="46"
          name="forward btn"
-         picture_style="true"
          quadrant="up"
          scale_image="false"
          tool_tip="Walk forward (press up arrow or W)"
@@ -127,7 +122,6 @@
          layout="topleft"
          left_delta="0"
          name="backward btn"
-         picture_style="true"
          quadrant="down"
          scale_image="false"
          tool_tip="Walk backward (press down arrow or S)"
diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml
index 33b1dac8a559c3bdf3159a0e4994ad3654e66f00..454b1c43b2d997cba513578923979c3f255cf8cb 100644
--- a/indra/newview/skins/default/xui/en/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  can_minimize="false"
@@ -6,7 +6,7 @@
  layout="topleft"
  name="block by name"
  help_topic="mute_by_name"
- title="Block object by name"
+ title="BLOCK OBJECT BY NAME"
  width="375">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml
index 689221b9c791954198c5d90b14e8182d7af2d4a8..e7efcc78444355bc343468a5ac8bd3d5ebeb41b9 100644
--- a/indra/newview/skins/default/xui/en/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_friends.xml
@@ -11,7 +11,7 @@
  help_topic="floater_my_friends"
  save_rect="true"
  single_instance="true"
- title="Contacts"
+ title="CONTACTS"
  width="395">
     <tab_container
      follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index e7c5bf85857f34e08b37a4b02f176e6b0f2cc6fd..7f58ea132ea907935c75c33d0d641582287bd03f 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -13,7 +13,7 @@
  name="nearby_chat"
  help_topic="nearby_chat"
  save_rect="true"
- title="Nearby Chat"
+ title="NEARBY CHAT"
  save_dock_state="true"
  save_visibility="true"
  single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml
index f9cb22055ae67db6bc0aa78c01d0c2f5ad107a3b..1f9ddecac277c996b5cecd6ac85498fb45db93db 100644
--- a/indra/newview/skins/default/xui/en/floater_notification.xml
+++ b/indra/newview/skins/default/xui/en/floater_notification.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  min_height="50"
  name="notification"
- title="Notifications Console"
+ title="NOTIFICATIONS CONSOLE"
  width="200">
     <text_editor
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
index 03a2aad96d48c1906d6ef1f4088ecf3a26ce77dc..ca81b9bcf0f9ea0a2d74e7f8d9f5a3756977e840 100644
--- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
@@ -8,7 +8,7 @@
  name="notifications_console"
  help_topic="notifications_console"
  single_instance="true"
- title="Notifications Console"
+ title="NOTIFICATIONS CONSOLE"
  width="500">
     <combo_box
      follows="left|right|top"
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index cc50f43339c9d02152577f10eeed1a2061021c0a..3fd118df1c3b6e74b6b45e37f635a637a5f93579 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -10,7 +10,7 @@
  name="objectcontents"
  help_topic="objectcontents"
  save_rect="true"
- title="Object Contents"
+ title="OBJECT CONTENTS"
  width="300">
    <text
      type="string"
@@ -26,7 +26,7 @@
      width="284">
         [DESC]:
     </text>
-    <panel_inventory
+    <panel_inventory_object
      background_visible="false"
      draw_border="false"
      follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index b4becfa0225e606ae3f597a868f7d2d2a7b0c947..509cffe490b7460add9b0d298a17bef22d0b64e6 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -2,22 +2,29 @@
 <floater
  legacy_header_height="18"
  can_minimize="false"
- height="185"
+ height="200"
  layout="topleft"
  name="Give Money"
  help_topic="give_money"
  save_rect="true"
  width="225">
+   <string
+    name="payee_group">
+        Pay Group
+   </string>
+   <string
+    name="payee_resident">
+        Pay Resident
+   </string>
    <text
      type="string"
      length="1"
      follows="left|top"
-     font="SansSerifBold"
      height="18"
      layout="topleft"
      left="12"
      name="payee_label"
-     top="7"
+     top="22"
      width="75">
         Pay:
     </text>
@@ -45,7 +52,6 @@
     </text>
     <button
      height="23"
-     font="SansSerifSmall"  
      label="L$1"
      label_selected="L$1"
      layout="topleft"
@@ -55,8 +61,7 @@
      width="80" />
     <button
      height="23"
-     label="L$1"
-     font="SansSerif"  
+     label="L$5"
      label_selected="L$5"
      layout="topleft"
      left_pad="15"
@@ -65,7 +70,6 @@
     <button
      height="23"
      label="L$10"
-     font="SansSerifHuge"  
      label_selected="L$10"
      layout="topleft"
      left="25"
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 8d230023cc85296bbb37009efaa23bba248674de..1946920a9ceae623fbc2edd8e585beda9b54276e 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -8,32 +8,14 @@
  help_topic="give_money"
  save_rect="true"
  width="225">
-   <text
-     type="string"
-     length="1"
-     follows="left|top"
-     font="SansSerifBold"
-     height="18"
-     layout="topleft"
-     left="12"
-     name="payee_group"
-     top="7"
-     width="75">
-        Pay group:
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     font="SansSerifBold"
-     height="18"
-     layout="topleft"
-     left="12"
-     name="payee_resident"
-     top="7"
-     width="75">
-        Pay resident:
-    </text>
+    <string
+     name="payee_group">
+        Pay Group
+    </string>
+    <string
+     name="payee_resident">
+        Pay Resident
+    </string>
    <icon
      height="16"
      width="16"
@@ -41,7 +23,7 @@
      mouse_opaque="true"
      name="icon_person"
      tool_tip="Person"
-     top_pad="0"
+     top_pad="24"
      left="10"
      />
     <text
diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
index eb0c22b9c493e92725cfdace4751950093a7abb4..6faab84159d3d520ae73dd60cb3afba814c6a4f0 100644
--- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
@@ -6,7 +6,7 @@
  name="perm prefs"
  help_topic="perm_prefs"
  save_rect="true"
- title="Default Upload Permissions"
+ title="DEFAULT UPLOAD PERMISSIONS"
  width="315">
     <panel
      follows="left|top|right|bottom"
@@ -17,20 +17,6 @@
      name="permissions"
      top="20"
      width="315">
-        <button
-         follows="left"
-         height="18"
-         label="?"
-         label_selected="?"
-         layout="topleft"
-         left="260"
-         name="help"
-         top="7"
-         width="22">
-            <button.commit_callback
-            function="Notification.Show" 
-			parameter="ClickUploadHelpPermissions" />
-        </button>
         <check_box
          control_name="ShareWithGroup"
          height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml
index 46554beedea917db56d691744d4631aa3eab0a7f..05559adf89b26933dddb8144418be649807a01db 100644
--- a/indra/newview/skins/default/xui/en/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/en/floater_post_process.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Post-Process Floater"
  help_topic="post_process_floater"
- title="Post-Process Settings"
+ title="POST-PROCESS SETTINGS"
  width="400">
     <tab_container
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml
index b13bd1740cd5adbd77458ea3da7186a1e99d7ab8..3a7b6cc8323dc662d806b945b7a2dddc2f439898 100644
--- a/indra/newview/skins/default/xui/en/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/en/floater_postcard.xml
@@ -10,7 +10,7 @@
  min_width="450"
  name="Postcard"
  help_topic="postcard"
- title="Email Snapshot"
+ title="EMAIL SNAPSHOT"
  width="450">
     <floater.string
      name="default_subject">
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index d2a2a7ce023e1c0fb6b5951ed80d9fc10ab8a422..d182cdc6bbd1a1e0ea7ce097fa26db3aa24be3e3 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -9,7 +9,7 @@
  name="Preferences"
  help_topic="preferences"
  single_instance="true"
- title="Preferences"
+ title="PREFERENCES"
  width="620">
     <button
      follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
index 7c8c6d72077d8a16d2bfdc307f3cb60e788b61ef..2017cf2bd102aaed5f659ab6127517012c028d21 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
@@ -7,7 +7,7 @@
  name="classified_preview"
  help_topic="classified_preview"
  save_rect="true"
- title="Classified Information"
+ title="CLASSIFIED INFORMATION"
  width="440">
     <floater.string
      name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml
index f5ab8c95d710c8f044f8824daeecfc9a4f080d22..a4066b34c56d57a3241eae44201da7131532aef7 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_event.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
  auto_tile="true"
@@ -7,7 +7,7 @@
  name="event_preview"
  help_topic="event_preview"
  save_rect="true"
- title="Event Information"
+ title="EVENT INFORMATION"
  width="440">
     <floater.string
      name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
index fc838f27b4ba30b4e9c071a3ec780c8da7db1be3..66408a50572f3d23c06553851e4b63180730b27d 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
     <scroll_list
      follows="top|left"
@@ -54,4 +54,4 @@
      name="save_btn"
      top_delta="0"
      width="80" /-->   
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
index b489ae2e771ffdf0343326109bff58c21b09a5ef..26252a7a16d91baf9ce358ce27d40ec327be7481 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
       <text
      type="string"
@@ -85,4 +85,4 @@
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
      top_delta="-4"
      width="135" />
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
index 8a07f3ad1ed84c6059f64ece762092413a90faf9..34f707cd2aea957b915dff6f7d8857b5fc62f603 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
@@ -8,7 +8,7 @@
  name="Gesture"
  help_topic="gesture"
  save_rect="true"
- title="Gesture Shortcut"
+ title="GESTURE SHORTCUT"
  width="260">
     <scroll_list
      follows="top|left"
@@ -239,4 +239,4 @@ unless you add wait steps.
      name="wait_time_editor"
      top_delta="0"
      width="50" /-->   
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index 3797055054863f87ed92372093f4c0851efee938..06dbdc95393c4cb33703e288860c880c641244bf 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -11,7 +11,7 @@
  min_width="234"
  name="preview notecard"
  help_topic="preview_notecard"
- title="Note:"
+ title="NOTE:"
  width="400">
     <floater.string
      name="no_object">
@@ -75,7 +75,7 @@
      left="4"
      max_length="65536"
      name="Notecard Editor"
-     allow_html="true" 
+     allow_html="false" 
      handle_edit_keys_directly="true"
      tab_group="1"
      top="46"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index e7abfb075af419bb3d92da1130e0606fc97fe7ea..52a19ac6b3ddb90ccd9df81ba24fa6441c8d8f6d 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -109,10 +109,10 @@
     	<combo_item name="Unconstrained" value="Unconstrained">
     		Unconstrained
     	</combo_item>
-   	<combo_item name="1:1" value="1:1" tool_tip="Group insignia or 1st Life profile">
+   	<combo_item name="1:1" value="1:1" tool_tip="Group insignia or Real World profile">
 		1:1
 	</combo_item>
-	<combo_item name="4:3" value="4:3" tool_tip="2nd Life profile">
+	<combo_item name="4:3" value="4:3" tool_tip="[SECOND_LIFE] profile">
 		4:3
 	</combo_item>
 	<combo_item name="10:7" value="10:7" tool_tip="Classifieds and search listings, landmarks">
diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml
index ae01d0bdf43feb31cd05cc728599c7a4654446fc..9bb30f8e86daeb121c8041c5318eaf829d604d3b 100644
--- a/indra/newview/skins/default/xui/en/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_info.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="regioninfo"
  save_rect="true"
- title="Region/Estate"
+ title="REGION/ESTATE"
  width="480">
     <tab_container
      bottom="512"
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 88f09b521cc87f7139a70ba0d6d984460173b44f..696233676cd19dd4343b77d76f32fb9014b4f4c9 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="floater_report_abuse"
  help_topic="floater_report_abuse"
- title="Report Abuse"
+ title="REPORT ABUSE"
  width="333">
     <floater.string
      name="Screenshot">
@@ -126,7 +126,6 @@
      layout="topleft"
      left_delta="0"
      name="pick_btn"
-     picture_style="true"
      image_overlay="Inv_Object"
      tool_tip="Object Picker - Identify an object as the subject of this report"
      top_pad="0"
diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
index 0029fcb09b5a79154cb009244ea1fb6fa4df8706..bd9925be1da7d882c1918f1969fc79b50eb4f1bf 100644
--- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
@@ -7,8 +7,8 @@
  layout="topleft"
  name="script"
  help_topic="script"
- short_title="[All scripts]"
- title="[All scripts]"
+ short_title="[ALL SCRIPTS]"
+ title="[ALL SCRIPTS]"
  width="440">
     <text_editor
      bottom="197"
diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml
index c29a2f4516c8ef6c4610a037258cb1e66ed2f7ec..bb0702c3531f9596912d60ab7d005ac573578b06 100644
--- a/indra/newview/skins/default/xui/en/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml
@@ -11,7 +11,7 @@
  name="preview lsl text"
  help_topic="preview_lsl_text"
  save_rect="true"
- title="Script: Rotation Script"
+ title="SCRIPT: ROTATION SCRIPT"
  top_delta="0"
  width="500">
     <floater.string
diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml
index 8a442524266268d8c7a738dbfd46ecd959e30853..60a26fcf1d4d7afa18933f6af48009680c3dd0be 100644
--- a/indra/newview/skins/default/xui/en/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml
@@ -8,7 +8,7 @@
  name="queue"
  help_topic="queue"
  save_rect="true"
- title="Reset Progress"
+ title="RESET PROGRESS"
  width="300">
     <floater.string
      name="Starting">
diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml
index 79c4438dd6b06c58c47bdd26c5f3843de11416b6..ade0156bc798ec48a47cf82ac2f2db181a9db824 100644
--- a/indra/newview/skins/default/xui/en/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_search.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="script search"
  help_topic="script_search"
- title="Script Search"
+ title="SCRIPT SEARCH"
  width="300">
     <check_box
      control_name="LSLFindCaseInsensitivity"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 2f4d7c50a161c19bb4188c53b2fa47c0c4b99290..edc1fb88385a69452c950457361d6453185f4771 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -10,7 +10,7 @@
  help_topic="floater_search"
  save_rect="true"
  single_instance="true"
- title="Search [SECOND_LIFE]"
+ title="FIND"
  width="620">
     <floater.string
      name="search_url">
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 8fedd0a89f0cfead5a933fc073c8c05f69805a66..2cf800fb155da7c34934169ca81c277e5396fa46 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -7,13 +7,12 @@
  name="sell land"
  help_topic="sell_land"
  single_instance="true"
- title="Sell Land"
+ title="SELL LAND"
  width="313">
     <scroll_container
      color="DkGray2"
      follows="left|top|right|bottom"
      height="435"
-     min_height="300"
      layout="topleft"
      name="profile_scroll"
      reserve_scroll_corner="true"
@@ -96,27 +95,16 @@
      width="200">
         To sell this parcel:
     </text>
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_price"
-     top="206"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="price_label"
-     right="-20">
-        Set a price:
+     left="30"
+     name="price_label">
+        1. Set a price:
     </text>
     <text
      type="string"
@@ -124,9 +112,8 @@
      follows="top|left"
      height="16"
      layout="topleft"
-     left="72"
-     name="price_text"
-     right="-20">
+     left="40"
+     name="price_text">
         Choose an appropriate price.
     </text>
     <text
@@ -134,7 +121,7 @@
      length="1"
      height="16"
      layout="topleft"
-     left="72"
+     left="40"
      name="price_ld"
      width="20">
         L$
@@ -156,32 +143,22 @@
      length="1"
      height="16"
      layout="topleft"
-     left="72"
+     left="40"
      name="price_per_m"
      top_delta="25"
      width="200">
         (L$[PER_METER] per m²)
     </text>
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_sell_to"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="sell_to_label"
-     right="-20">
-        Sell the land to:
+     left="30"
+     name="sell_to_label">
+        2. Sell the land to:
     </text>
     <text
      type="string"
@@ -189,7 +166,7 @@
      follows="top|left"
      height="25"
      layout="topleft"
-     left="72"
+     left="40"
      word_wrap="true"
      name="sell_to_text"
      right="-20">
@@ -235,26 +212,16 @@
      name="sell_to_select_agent"
      top_delta="0"
      width="60" />
-    <icon
-     follows="top|left"
-     height="64"
-     image_name="badge_note.j2c"
-     layout="topleft"
-     left="0"
-     name="step_sell_objects"
-     width="64" />
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
      follows="top|left"
      font="SansSerif"
      height="16"
      layout="topleft"
-     left="72"
-     name="sell_objects_label"
-     right="-20">
-        Sell the objects with the land?
+     left="30"
+     name="sell_objects_label">
+        3. Sell the objects with the land?
     </text>
     <text
      type="string"
@@ -264,7 +231,7 @@
      height="25"
      layout="topleft"
      word_wrap="true"
-     left="72"
+     left="40"
      name="sell_objects_text">
         Land owner&apos;s transferable objects on parcel will change ownership.
     </text>
@@ -273,7 +240,7 @@
      follows="top|right"
      height="40"
      layout="topleft"
-     left="72"
+     left="40"
      name="sell_objects"
      right="420">
         <radio_item
@@ -304,7 +271,7 @@
      label="Show Objects"
      layout="topleft"
      name="show_objects"
-     left="100"
+     left="70"
      top_pad="10"
      width="110" />
     <text
diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml
index 02b3cee97c25ac2c1249eecb652e2ddb95cf0e87..ffb11f3f18f5da69b345d7c937b36640883184ca 100644
--- a/indra/newview/skins/default/xui/en/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/en/floater_settings_debug.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="settings_debug"
  help_topic="settings_debug"
- title="Debug Settings"
+ title="DEBUG SETTINGS"
  width="350">
     <combo_box
      allow_text_entry="true"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 4f2be37ade687b2166acfc179706bb656590ed04..95a40e27f75bcf75ba3f8e9c20eea0107e18e77a 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -8,7 +8,7 @@
  name="Snapshot"
  help_topic="snapshot"
  save_rect="true"
- title="Snapshot Preview"
+ title="SNAPSHOT PREVIEW"
  width="215">
     <floater.string
      name="unknown">
diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
index 6145b722f1c062902e02f47528244b35bfd2b6ef..ca54ee66049019ea9478b12e82be91260d31e5ce 100644
--- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="Sound Preview"
  help_topic="sound_preview"
- title="sound.wav"
+ title="SOUND.WAV"
  width="300">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml
index ab783b0735a7778db1477567a9c73e58444cc472..3a4e84514111db6c6b35e95e8b518a276922be36 100644
--- a/indra/newview/skins/default/xui/en/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/en/floater_statistics.xml
@@ -8,5 +8,5 @@
  mouse_opaque="false"
  name="stats floater"
  help_topic="stats_floater"
- title="Statistics"
+ title="STATISTICS"
  width="250" />
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index bdc287428149e690481412986e1412a0258302d7..68a4867167ff1d7bea764ad41d99addf5ecc8938 100644
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -9,7 +9,7 @@
  help_topic="statistics"
  save_rect="true"
  save_visibility="true"
- title="Statistics"
+ title="STATISTICS"
  width="250">
     <scroll_container
      follows="top|left|bottom|right"
diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml
index faf1a378f259a8fb84a54e43f14fafc6f00e6d46..cc0ab8c57e8fd2b7552293844daee58982f51b01 100644
--- a/indra/newview/skins/default/xui/en/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/en/floater_telehub.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="telehub"
  help_topic="telehub"
- title="Telehub"
+ title="TELEHUB"
  width="280">
     <text
      type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml
index 89a1ddda99ee8c793d58bc1b318c1a47e5d51613..2bd0d1a0fabf9a6e7a22f4ff06b3cf6e0c4820cd 100644
--- a/indra/newview/skins/default/xui/en/floater_test_button.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_button.xml
@@ -96,7 +96,6 @@
      layout="topleft"
      left="200"
      name="image_button"
-     picture_style="true"
      top="20"
      width="16" />
     <button
@@ -107,7 +106,6 @@
      layout="topleft"
      left_delta="0"
      name="image_color_button"
-     picture_style="true"
      top_pad="10"
      width="16" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
index c954607ffe7e82bf69f765b43ed99c15c2e854ac..9143048aeb8a850b1cf6971a74db5f66eeff8a5e 100644
--- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
@@ -6,7 +6,7 @@
  layout="topleft"
  name="floater_test_inspectors"
  help_topic="floater_test_inspectors"
- title="Test Inspectors" 
+ title="TEST INSPECTORS" 
  width="400">
   <text
    height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
index f39d27761cdf94e811a8069ea198f5d23af50df8..8dba05f1eebbcabba773fe17af5d58339af5e16c 100644
--- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
@@ -2,11 +2,11 @@
 <floater
  legacy_header_height="18"
  can_resize="true"
- height="400"
+ height="450"
  layout="topleft"
  name="floater_test_textbox"
  help_topic="floater_test_textbox"
- width="400">
+ width="600">
     <text
      type="string"
      length="1"
@@ -48,61 +48,80 @@
         First line of multiple lines
     Second line of multiple lines
     </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifSmall"
+       name="test_text10"
+       tool_tip="text">
+        SansSerifSmall. Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerif"
+       name="test_text11"
+       tool_tip="text">
+        SansSerif.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifLarge"
+       name="test_text12"
+       tool_tip="text">
+        SansSerifLarge.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       right="-10" 
+       follows="top|left"
+       font.name="SansSerifHuge"
+       name="test_text13"
+       tool_tip="text">
+        SansSerifHuge.  Русский 中文 (简体) The quick brown fox jumped over the lazy dog.
+      </text>
     <text
      type="string"
      length="1"
      font="SansSerif"
-     height="10"
-     layout="topleft"
-     left_delta="0"
-     top_pad="30"
-     width="300">
-        font SansSerif
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="bottom|right"
-     height="10"
-     layout="topleft"
-     left_delta="0"
-     top_pad="10"
-     width="300">
-        follows bottom right
-    </text>
-    <text
-     type="string"
-     length="1"
-     font="SansSerifSmall"
      font.style="BOLD"
      height="10"
      layout="topleft"
      left_delta="0"
-     top_pad="10"
+     top_pad="40"
      width="300">
-        font style BOLD
+      SansSerif BOLD
     </text>
     <text
      type="string"
      length="1"
-     font="SansSerifSmall"
+     font="SansSerif"
      font.style="BOLD|UNDERLINE"
      height="10"
      layout="topleft"
      left_delta="0"
      top_pad="10"
      width="300">
-        font style BOLD UNDERLINE
+      SansSerif BOLD UNDERLINE
     </text>
     <text
      type="string"
      length="1"
+     font="SansSerif"
      height="10"
      layout="topleft"
      left_delta="0"
      top_pad="10"
      width="300">
-        font style UNDERLINE
+      SansSerif UNDERLINE
     </text>
     <text
      type="string"
@@ -145,11 +164,11 @@
   <text
  type="string"
  length="1"
- bottom="390"
+ height="60" 
  label="N"
  layout="topleft"
  left="10"
- name="centered_text"
+ name="left_aligned_text"
  width="380"
  halign="left"
  text_color="1 1 1 0.7"
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 129fd863dd4da93d59e45e441020136d29ee449d..44dcb075264d257ae1ce281c51e3bcbfecbd16f8 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -18,7 +18,7 @@
  legacy_header_height="18"
  can_dock="true"
  can_resize="true"
- title="Test Floater"
+ title="TEST FLOATER"
  height="500"
  min_width="850"
  min_height="500"
@@ -338,13 +338,13 @@ line to actually fit
    height="400"
    halign="center"
    layout="topleft"
-   left="575"
+   left="525"
    name="group_tab_container"
    tab_position="top"
    tab_height="20"
    tool_tip="tab container"
    top="80"
-   width="250">
+   width="300">
     <!-- "panel" is a container for widgets.  It is automatically resized to
          fit the parent tab_container. -->
     <panel
@@ -380,6 +380,46 @@ line to actually fit
        tool_tip="Color Swatch: Click to open Color Picker"
        top_delta="0"
        width="80" />
+      <text
+       top_pad="10"
+       left="10"
+       width="250" 
+       follows="top|left"
+       font.name="SansSerifSmall"
+       name="test_text10"
+       tool_tip="text">
+        SansSerifSmall.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250"
+       follows="top|left"
+       font.name="SansSerif"
+       name="test_text11"
+       tool_tip="text">
+        SansSerif.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250" 
+       follows="top|left"
+       font.name="SansSerifLarge"
+       name="test_text12"
+       tool_tip="text">
+        SansSerifLarge.  Русский 中文 (简体)
+      </text>
+      <text
+       top_pad="10"
+       left="10"
+       width="250"
+       follows="top|left"
+       font.name="SansSerifHuge"
+       name="test_text13"
+       tool_tip="text">
+        SansSerifHuge.  Русский 中文 (简体)
+      </text>
     </panel>
     <!-- panels can also refer to other floaters or panels -->
     <panel
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 0a1f6e0e2973d6b07e0ea0f644f8f6afccc42804..4679ae467df3746ace6bd8ee6efdad3f7c7aa187 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -9,7 +9,7 @@
  min_width="410"
  name="texture picker"
  help_topic="texture_picker"
- title="Pick: Texture"
+ title="PICK: TEXTURE"
  width="410">
     <floater.string
      name="choose_picture">
@@ -23,14 +23,16 @@
      type="string"
      length="1"
      follows="left|top"
+     text_color="White"
+     font="SansSerifBig"
      halign="center"
-     height="14"
+     height="17"
      layout="topleft"
      left="4"
      name="Multiple"
      top="96"
      width="163">
-        Multiple
+        Multiple textures
     </text>
     <text
      type="string"
@@ -42,7 +44,7 @@
      name="unknown"
      top_pad="80"
      width="163">
-        Dimensions: [DIMENSIONS]
+        Size: [DIMENSIONS]
     </text>
     <button
      enabled="false"
@@ -55,7 +57,7 @@
      left_delta="0"
      name="Default"
      top_pad="4"
-     width="64" />
+     width="80" />
     <button
      enabled="false"
      follows="left|bottom"
@@ -67,7 +69,7 @@
      left_pad="4"
      name="None"
      top_delta="0"
-     width="64" />
+     width="80" />
     <button
      follows="left|bottom"
      font="SansSerifSmall"
@@ -77,75 +79,75 @@
      layout="topleft"
      left="4"
      name="Blank"
-     top="232"
-     width="64" />
-    <check_box
-     height="24"
+     top_pad="5"
+     width="80" />
+         <button
+     follows="left|bottom"
+     height="28"
+     image_selected="eye_button_active.tga"
+     image_unselected="eye_button_inactive.tga"
+     layout="topleft"
+     left_pad="50"
+     top_delta="3"
+     name="Pipette"
+     width="28" />
+   <check_box
+     follows="left|bottom"
+     height="20"
      initial_value="true"
-     label="Show Folders"
+     label="Apply now"
      layout="topleft"
-     left="175"
-     name="show_folders_check"
-     top="20"
-     width="201" />
+     left="4"
+     name="apply_immediate_check"
+     top="262"
+     width="120" />
     <filter_editor
      follows="left|top|right"
-     height="16"
-     label="Type here to search"
+     height="23"
+     label="Filter textures"
      layout="topleft"
-     left_delta="0"
+     left="175"
      name="inventory search editor"
-     top_delta="0"
+     top="20"
      width="231" />
     <inventory_panel
      allow_multi_select="false"
-     border="true"
-     follows="left|top|right|bottom"
-     height="216"
+     bg_visible="true"
+     bg_alpha_color="DkGray2"
+     border="false"
+     follows="all"
+     height="200"
      layout="topleft"
      left_delta="0"
      name="inventory panel"
      top_pad="4"
      width="231" />
-    <check_box
-     follows="left|bottom"
-     height="20"
-     initial_value="true"
-     label="Apply Immediately"
-     layout="topleft"
-     left="4"
-     name="apply_immediate_check"
-     top="262"
-     width="150" />
-    <button
-     follows="left|bottom"
-     height="32"
-     image_selected="eye_button_active.tga"
-     image_unselected="eye_button_inactive.tga"
+     <check_box
+     height="14"
+     initial_value="false"
+     label="Show folders"
      layout="topleft"
-     left="139"
-     name="Pipette"
-     picture_style="true"
-     top="250"
-     width="32" />
-    <button
+     name="show_folders_check"
+     top_pad="0"
+     left_delta="-3"
+     width="200" />
+         <button
      follows="right|bottom"
      height="20"
-     label="Cancel"
-     label_selected="Cancel"
+     label="Ok"
+     label_selected="Ok"
      layout="topleft"
-     left="186"
-     name="Cancel"
-     top="262"
+     right="-120"
+     name="Select"
      width="100" />
     <button
      follows="right|bottom"
      height="20"
-     label="Select"
-     label_selected="Select"
+     label="Cancel"
+     label_selected="Cancel"
      layout="topleft"
-     left_pad="4"
-     name="Select"
-     top_delta="0"
+     right="-10"
+     left_pad="5"
+     name="Cancel"
      width="100" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 4da424b89c989c9d39c2213c48b32ba83178fde7..0348393bd3a8046670c38d06a53e306834c33e0f 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -9,7 +9,7 @@
  name="toolbox floater"
  help_topic="toolbox_floater"
  save_rect="true"
- short_title="Build Tools"
+ short_title="BUILD TOOLS"
  single_instance="true"
  sound_flags="0"
  width="280">
@@ -75,7 +75,6 @@
      layout="topleft"
      left="10"
      name="button focus"
-     picture_style="true"
      tool_tip="Focus"
      width="20">
 	  <button.commit_callback
@@ -92,7 +91,6 @@
      layout="topleft"
      left_pad="20"
      name="button move"
-     picture_style="true"
      tool_tip="Move"
      width="20">
 	  <button.commit_callback
@@ -109,7 +107,6 @@
      layout="topleft"
      left_pad="20"
      name="button edit"
-     picture_style="true"
      tool_tip="Edit"
      width="20">
 	  <button.commit_callback
@@ -126,7 +123,6 @@
      layout="topleft"
      left_pad="20"
      name="button create"
-     picture_style="true"
      tool_tip="Create"
      width="20">
 	  <button.commit_callback
@@ -143,7 +139,6 @@
      layout="topleft"
      left_pad="20"
      name="button land"
-     picture_style="true"
      tool_tip="Land"
      width="20">
 	  <button.commit_callback
@@ -320,8 +315,6 @@
      image_disabled="ForwardArrow_Disabled"
      image_selected="ForwardArrow_Press"
      image_unselected="ForwardArrow_Off"
-     picture_style="true"
-     label_selected="Options"
      layout="topleft"
      name="Options..."
      tool_tip="Grid options"
@@ -342,7 +335,6 @@
      layout="topleft"
      left="4"
      name="ToolCube"
-     picture_style="true"
      tool_tip="Cube"
      top="51"
      width="20" />
@@ -356,7 +348,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolPrism"
-     picture_style="true"
      tool_tip="Prism"
      top_delta="0"
      width="20" />
@@ -370,7 +361,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolPyramid"
-     picture_style="true"
      tool_tip="Pyramid"
      top_delta="0"
      width="20" />
@@ -384,7 +374,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTetrahedron"
-     picture_style="true"
      tool_tip="Tetrahedron"
      top_delta="0"
      width="20" />
@@ -398,7 +387,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolCylinder"
-     picture_style="true"
      tool_tip="Cylinder"
      top_delta="0"
      width="20" />
@@ -412,7 +400,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiCylinder"
-     picture_style="true"
      tool_tip="Hemicylinder"
      top_delta="0"
      width="20" />
@@ -426,7 +413,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolCone"
-     picture_style="true"
      tool_tip="Cone"
      top_delta="0"
      width="20" />
@@ -440,7 +426,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiCone"
-     picture_style="true"
      tool_tip="Hemicone"
      top_delta="0"
      width="20" />
@@ -454,7 +439,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolSphere"
-     picture_style="true"
      tool_tip="Sphere"
      top_delta="0"
      width="20" />
@@ -468,7 +452,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolHemiSphere"
-     picture_style="true"
      tool_tip="Hemisphere"
      top_delta="0"
      width="20" />
@@ -482,7 +465,6 @@
      layout="topleft"
      left="4"
      name="ToolTorus"
-     picture_style="true"
      tool_tip="Torus"
      top="77"
      width="20" />
@@ -496,7 +478,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTube"
-     picture_style="true"
      tool_tip="Tube"
      top_delta="0"
      width="20" />
@@ -510,7 +491,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolRing"
-     picture_style="true"
      tool_tip="Ring"
      top_delta="0"
      width="20" />
@@ -524,7 +504,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolTree"
-     picture_style="true"
      tool_tip="Tree"
      top_delta="0"
      width="20" />
@@ -538,7 +517,6 @@
      layout="topleft"
      left_delta="26"
      name="ToolGrass"
-     picture_style="true"
      tool_tip="Grass"
      top_delta="0"
      width="20" />
@@ -927,7 +905,6 @@
 			 left_pad="0"
 			 top_delta="0"
 			 name="button set group"
-			 picture_style="true"
 			 tab_stop="false"
 			 tool_tip="Choose a group to share this object's permissions"
 			 width="10" />
@@ -1034,8 +1011,11 @@
            label="Original"
            value="1" />
       </combo_box>
-<!-- NEW PRICE SPINNER -->
-      <spinner
+<!-- NEW PRICE SPINNER
+Objects are allowed to be for sale for L$0 to invoke buy UI behavior
+even though the user gets a free copy.
+-->
+    <spinner
         follows="left|top"
         decimal_digits="0"
         increment="1"
@@ -1046,7 +1026,7 @@
         label="Price: L$"
         label_width="65"
         width="150"
-        min_val="1"
+        min_val="0"
         height="20"
         max_val="999999999" />
       <check_box
@@ -2703,7 +2683,6 @@
 			 layout="topleft"
 			 left_pad="0"
 			 name="add_media"
-			 picture_style="true"
 			 tab_stop="false"
 			 top_delta="0"
 			 tool_tip="Add Media"
@@ -2719,7 +2698,6 @@
 			 layout="topleft"
 			 left_pad="5"
 			 name="delete_media"
-			 picture_style="true"
 			 tool_tip="Delete this media texture"
 			 top_delta="0"
 			 width="18">
@@ -2736,7 +2714,6 @@
 			 layout="topleft"
 			 left_pad="10"
 			 name="edit_media"
-			 picture_style="true"
 			 top_delta="0"
 			 width="18">
 				<button.commit_callback
@@ -2796,7 +2773,7 @@
              left_pad="8"
              name="button permissions"
              width="130" />
-            <panel_inventory
+            <panel_inventory_object
              follows="left|top"
              height="210"
              layout="topleft"
@@ -2871,15 +2848,6 @@
          tool_tip="Colorize the parcels according to the type of owner: &#10;&#10;Green = Your land &#10;Aqua = Your group&apos;s land &#10;Red = Owned by others &#10;Yellow = For sale &#10;Purple = For auction &#10;Grey = Public"
          top_pad="8"
          width="205" />
-        <!--TODO: HOOK UP TO HELP VIEWER-->
-       <!-- <button
-         image_overlay="Arrow_Right_Off"
-         picture_style="true"
-         left_pad="5"
-         name="button show owners help"
-         tool_tip="See an explanation of colors"
-         width="26"
-         height="22" />-->
         <text
          type="string"
          length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
index 2f53422d5138f068cd657ca18d899adb1a48d13c..d2db26daec5f3ea0689c131e33f2e4ad34061bcf 100644
--- a/indra/newview/skins/default/xui/en/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml
@@ -8,7 +8,7 @@
  min_width="450"
  name="top_objects"
  help_topic="top_objects"
- title="loading..."
+ title="LOADING..."
  width="550">
     <floater.string
      name="top_scripts_title">
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index 380e51977f2d73d3068dc632b4f6fa96138dc2aa..8b2136c2dc436e520aa8e2e35349f7eea2a0c0c2 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -9,7 +9,7 @@
  name="gui_preview_tool"
  help_topic="gui_preview_tool"
  single_instance="true"
- title="XUI Preview Tool"
+ title="XUI PREVIEW TOOL"
  width="750">
     <panel
      bottom="640"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index af3606fd1c01819976d494f86ce6561ca5a94e9e..b13a11c05d8770ff93424aa40262ee3dcfbea803 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -6,7 +6,7 @@
  name="Water Floater"
  help_topic="water_floater"
  save_rect="true"
- title="Advanced Water Editor"
+ title="ADVANCED WATER EDITOR"
  width="700">
     <floater.string
      name="WLDefaultWaterNames">
@@ -16,7 +16,7 @@
      type="string"
      length="1"
      follows="left|top|right"
-     font="SansSerif"
+     font.style="BOLD"
      height="16"
      layout="topleft"
      left="10"
@@ -28,7 +28,7 @@
     <combo_box
      height="18"
      layout="topleft"
-     left_delta="110"
+     left_pad="10"
      name="WaterPresetsCombo"
      top_delta="-2"
      width="150" />
@@ -40,7 +40,7 @@
      left_pad="20"
      name="WaterNewPreset"
      top_delta="1"
-     width="70" />
+     width="90" />
     <button
      height="20"
      label="Save"
@@ -49,7 +49,7 @@
      left_pad="10"
      name="WaterSavePreset"
      top_delta="0"
-     width="70" />
+     width="90" />
     <button
      height="20"
      label="Delete"
@@ -58,8 +58,9 @@
      left_pad="10"
      name="WaterDeletePreset"
      top_delta="0"
-     width="70" />
+     width="90" />
     <tab_container
+    border="false"
      follows="left|top"
      height="180"
      halign="center"
@@ -67,20 +68,20 @@
      left="0"
      name="Water Tabs"
      tab_position="top"
-     tab_height="20"
      top="60"
      width="700">
         <panel
          border="true"
-         follows="left|top|right|bottom"
+         border_color="EmphasisColor"
+         follows="all"
          height="180"
          label="Settings"
          layout="topleft"
-         left="1"
+         left="0"
          mouse_opaque="false"
          help_topic="water_settings_tab"
          name="Settings"
-         top="60"
+         top="0"
          width="698">
             <text
              type="string"
@@ -92,21 +93,10 @@
              left="10"
              name="BHText"
              top="4"
-             width="355">
+             width="200">
                 Water Fog Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFogColorHelp"
-             top_delta="-2"
-             width="18" />
             <color_swatch
-             border_color="0.45098 0.517647 0.607843 1"
              can_apply_immediately="true"
              color="0.5 0.5 0.5 1"
              follows="left|top"
@@ -127,19 +117,9 @@
              left="10"
              name="WaterFogDensText"
              top="74"
-             width="355">
+             width="200">
                 Fog Density Exponent
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFogDensityHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFogDensity"
              decimal_digits="1"
@@ -162,19 +142,9 @@
              left_delta="-14"
              name="WaterUnderWaterFogModText"
              top_delta="4"
-             width="355">
+             width="200">
                 Underwater Fog Modifier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterUnderWaterFogModHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              decimal_digits="2"
              follows="left"
@@ -197,93 +167,44 @@
              left="245"
              name="BDensText"
              top="4"
-             width="355">
+             width="200">
                 Reflection Wavelet Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterNormalScaleHelp"
-             top_delta="-2"
-             width="18" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left="245"
-             name="BHText2"
-             top="21"
-             width="10">
-                1
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left_delta="0"
-             name="BHText3"
-             top_delta="11"
-             width="10">
-                2
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             halign="center"
-             height="16"
-             layout="topleft"
-             left_delta="0"
-             name="BHText4"
-             top_delta="11"
-             width="10">
-                3
-            </text>
             <slider
              control_name="WaterNormalScaleX"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="1"
              layout="topleft"
-             left_pad="4"
              max_val="10"
              name="WaterNormalScaleX"
-             top_delta="-3"
+             top_pad="20"
              width="200" />
             <slider
              control_name="WaterNormalScaleY"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="2"
              layout="topleft"
-             left_delta="0"
              max_val="10"
              name="WaterNormalScaleY"
-             top_pad="1"
+             top_pad="0"
              width="200" />
             <slider
              control_name="WaterNormalScaleZ"
              decimal_digits="1"
              follows="left"
-             height="10"
+             height="15"
              initial_value="0.7"
+             label="3"
              layout="topleft"
-             left_delta="0"
              max_val="10"
              name="WaterNormalScaleZ"
-             top_pad="1"
+             top_pad="0"
              width="200" />
             <text
              type="string"
@@ -292,22 +213,11 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left_delta="-14"
              name="HDText"
-             top_delta="2"
-             width="355">
+             top_pad="-10"
+             width="200">
                 Fresnel Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFresnelScaleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFresnelScale"
              decimal_digits="2"
@@ -316,9 +226,8 @@
              increment="0.01"
              initial_value="0.7"
              layout="topleft"
-             left="259"
              name="WaterFresnelScale"
-             top="100"
+             top_pad="20"
              width="200" />
             <text
              type="string"
@@ -327,22 +236,11 @@
              font="SansSerif"
              height="16"
              layout="topleft"
-             left_delta="-14"
              name="FresnelOffsetText"
-             top_delta="-1"
-             width="355">
+             top_pad="-10"
+             width="200">
                 Fresnel Offset
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterFresnelOffsetHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterFresnelOffset"
              decimal_digits="2"
@@ -351,9 +249,8 @@
              increment="0.01"
              initial_value="0.7"
              layout="topleft"
-             left="259"
              name="WaterFresnelOffset"
-             top="135"
+             top_pad="20"
              width="200" />
             <text
              type="string"
@@ -365,19 +262,9 @@
              left="480"
              name="DensMultText"
              top="4"
-             width="355">
+             width="200">
                 Refract Scale Above
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterScaleAboveHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterScaleAbove"
              decimal_digits="2"
@@ -400,19 +287,9 @@
              left_delta="-14"
              name="WaterScaleBelowText"
              top_delta="-3"
-             width="355">
+             width="200">
                 Refract Scale Below
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterScaleBelowHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterScaleBelow"
              decimal_digits="2"
@@ -435,19 +312,9 @@
              left_delta="-14"
              name="MaxAltText"
              top_delta="-2"
-             width="355">
+             width="200">
                 Blur Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WaterBlurMultiplierHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WaterBlurMult"
              follows="left"
@@ -463,15 +330,15 @@
         </panel>
         <panel
          border="true"
-         follows="left|top|right|bottom"
+         follows="all"
          height="180"
          label="Image"
          layout="topleft"
-         left_delta="0"
+         left="0"
          mouse_opaque="false"
          help_topic="water_waves_tab"
          name="Waves"
-         top_delta="44"
+         top="0"
          width="698">
             <text
              type="string"
@@ -482,20 +349,10 @@
              layout="topleft"
              left="10"
              name="BHText"
-             top="4"
-             width="355">
+             top="10"
+             width="200">
                 Big Wave Direction
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="145"
-             name="WaterWave1Help"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -505,7 +362,7 @@
              layout="topleft"
              left="10"
              name="WaterWave1DirXText"
-             top="21"
+             top_pad="4"
              width="10">
                 X
             </text>
@@ -518,7 +375,7 @@
              layout="topleft"
              left_delta="0"
              name="WaterWave1DirYText"
-             top_delta="11"
+             top_delta="18"
              width="10">
                 Y
             </text>
@@ -534,7 +391,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave1DirX"
-             top="40"
+             top="55"
              width="200" />
             <slider
              control_name="WaterWave1DirY"
@@ -548,7 +405,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave1DirY"
-             top_pad="1"
+             top_pad="5"
              width="200" />
             <text
              type="string"
@@ -563,16 +420,6 @@
              width="355">
                 Little Wave Direction
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="145"
-             name="WaterWave2Help"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -582,7 +429,7 @@
              layout="topleft"
              left="10"
              name="WaterWave2DirXText"
-             top="71"
+             top="90"
              width="10">
                 X
             </text>
@@ -595,7 +442,7 @@
              layout="topleft"
              left_delta="0"
              name="WaterWave2DirYText"
-             top_delta="11"
+             top_delta="20"
              width="10">
                 Y
             </text>
@@ -611,7 +458,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave2DirX"
-             top="90"
+             top="115"
              width="200" />
             <slider
              control_name="WaterWave2DirY"
@@ -625,7 +472,7 @@
              max_val="4"
              min_val="-4"
              name="WaterWave2DirY"
-             top_pad="1"
+             top_pad="10"
              width="200" />
             <text
              type="string"
@@ -637,19 +484,9 @@
              left="240"
              name="BHText3"
              top="4"
-             width="355">
+             width="200">
                 Normal Map
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WaterNormalMapHelp"
-             top_delta="-2"
-             width="18" />
             <texture_picker
              height="143"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
index 2c09e82f087577e85ef18dfd8ee6574376fc90d0..0cb7814c6a4bc3df2009f13768350edc40ed4707 100644
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
@@ -6,7 +6,7 @@
  name="WindLight floater"
  help_topic="windlight_floater"
  save_rect="true"
- title="Advanced Sky Editor"
+ title="ADVANCED SKY EDITOR"
  width="700">
     <floater.string
      name="WLDefaultSkyNames">
@@ -104,16 +104,6 @@
              width="355">
                 Blue Horizon
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLBlueHorizonHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -227,16 +217,6 @@
              width="355">
                 Haze Horizon
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLHazeHorizonHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLHazeHorizon"
              decimal_digits="2"
@@ -262,16 +242,6 @@
              width="355">
                 Blue Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLBlueDensityHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -385,16 +355,6 @@
              width="355">
                 Haze Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLHazeDensityHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLHazeDensity"
              decimal_digits="2"
@@ -421,16 +381,6 @@
              width="355">
                 Density Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLDensityMultHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLDensityMult"
              decimal_digits="2"
@@ -457,16 +407,6 @@
              width="355">
                 Distance Multiplier
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLDistanceMultHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLDistancMult"
              decimal_digits="1"
@@ -492,16 +432,6 @@
              width="355">
                 Max Altitude
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLMaxAltitudeHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLMaxAltitude"
              decimal_digits="0"
@@ -540,16 +470,6 @@
              width="355">
                 Sun/Moon Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSunlightColorHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -663,16 +583,6 @@
              width="355">
                 Sun/Moon Position
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLTimeOfDayHelp"
-             top_delta="-2"
-             width="18" />
             <icon
              height="20"
              image_name="icon_diurnal.tga"
@@ -705,16 +615,6 @@
              width="355">
                 Ambient
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLAmbientHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -828,16 +728,6 @@
              width="355">
                 East Angle
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLEastAngleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLEastAngle"
              decimal_digits="2"
@@ -863,16 +753,6 @@
              width="355">
                 Sun Glow
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSunGlowHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLGlowB"
              decimal_digits="2"
@@ -915,16 +795,6 @@
              width="200">
                 Scene Gamma
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLSceneGammaHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLGamma"
              decimal_digits="2"
@@ -951,16 +821,6 @@
              width="355">
                 Star Brightness
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLStarBrightnessHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLStarAlpha"
              decimal_digits="2"
@@ -1000,16 +860,6 @@
              width="355">
                 Cloud Color
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudColorHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1123,16 +973,6 @@
              width="355">
                 Cloud XY/Density
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudDensityHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1221,16 +1061,6 @@
              width="355">
                 Cloud Coverage
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudCoverageHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLCloudCoverage"
              decimal_digits="2"
@@ -1256,16 +1086,6 @@
              width="355">
                 Cloud Scale
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudScaleHelp"
-             top_delta="-2"
-             width="18" />
             <slider
              control_name="WLCloudScale"
              decimal_digits="2"
@@ -1292,16 +1112,6 @@
              width="355">
                 Cloud Detail (XY/Density)
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="150"
-             name="WLCloudDetailHelp"
-             top_delta="-2"
-             width="18" />
             <text
              type="string"
              length="1"
@@ -1390,16 +1200,6 @@
              width="355">
                 Cloud Scroll X
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WLCloudScrollXHelp"
-             top_delta="-2"
-             width="18" />
             <check_box
              control_name="WLCloudLockX"
              follows="left"
@@ -1436,16 +1236,6 @@
              width="355">
                 Cloud Scroll Y
             </text>
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left_delta="125"
-             name="WLCloudScrollYHelp"
-             top_delta="-2"
-             width="18" />
             <check_box
              control_name="WLCloudLockY"
              follows="left"
@@ -1479,16 +1269,6 @@
              name="DrawClassicClouds"
              top="104"
              width="200" />
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="18"
-             label="?"
-             layout="topleft"
-             left="608"
-             name="WLClassicCloudsHelp"
-             top="84"
-             width="18" />
         </panel>
     </tab_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 93755fa2532021473d9715e066a51d8b87faaa00..387ffbd5b30258e812e43a3537ab0cfc3998fd6e 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -13,40 +13,17 @@
  save_rect="true"
  save_visibility="true"
  single_instance="true"
- title="World Map"
+ title="WORLD MAP"
  width="800">
-    <tab_container
+    <panel
+     filename="panel_world_map.xml"
      follows="left|top|right|bottom"
      height="565"
      layout="topleft"
      left="15"
-     name="maptab"
-     tab_position="top"
+     name="objects_mapview"
      top="25"
-     width="542">
-        <panel
-         filename="panel_world_map.xml"
-         follows="left|top|right|bottom"
-         height="550"
-         label="Objects"
-         layout="topleft"
-         left="1"
-         help_topic="worldmap_objects_tab"
-         name="objects_mapview"
-         top="19"
-         width="540" />
-        <panel
-         filename="panel_world_map.xml"
-         follows="left|top|right|bottom"
-         height="550"
-         label="Terrain"
-         layout="topleft"
-         left_delta="0"
-         help_topic="worldmap_terrain_tab"
-         name="terrain_mapview"
-         top_delta="3"
-         width="540" />
-    </tab_container>
+     width="542" />
     <icon
      follows="top|right"
      height="16"
@@ -210,7 +187,7 @@
      label="Telehub"
      layout="topleft"
      left_pad="4"
-     name="telehubchk"
+     name="telehub_chk"
      top_delta="0"
      width="110" />
     <icon
diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index 65dfb13f4a3096915034dfc5375c427bf344efa5..f3da62a8964198557a5cd0afcc54b7a42c23493b 100644
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -150,11 +150,9 @@
 	     comment="Size of large font (points, or 1/72 of an inch)"
 	     size="10.0"
 	     />
-	     <!-- Changed Medium size to address menu font size not matching spec.
-	     May want to revert/update after menu font configuration has been enabled. -->
   <font_size name="Medium"
 	     comment="Size of medium font (points, or 1/72 of an inch)"
-	     size="8.0"
+	     size="9.0"
 	     />
   <font_size name="Small"
 	     comment="Size of small font (points, or 1/72 of an inch)"
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 6b13e2f1c7cbd4f5c56f7b03cf308ef737ec3e36..2c1e2b6dc0e3cb601315c21d6baa3f540ce806ff 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -102,7 +102,6 @@
      left_pad="0"
      top_delta="4"
      name="mute_btn"
-     picture_style="true"
      width="16" />
     <avatar_icon
      follows="all"
@@ -122,12 +121,13 @@
      image_unselected="ForwardArrow_Off"
      layout="topleft"
      name="view_profile_btn"
-     picture_style="true"
      right="-8"
      top="35"
      left_delta="110"
      tab_stop="false"
      width="18" />
+  <!-- Overlapping buttons for default actions
+    llinspectavatar.cpp makes visible the most likely default action -->
     <button
      follows="bottom|left"
      height="23"
@@ -136,6 +136,16 @@
      top="246"
      name="add_friend_btn"
      width="100" />
+    <button
+     follows="bottom|left"
+     height="23"
+     label="IM"
+     left_delta="0"
+     top_delta="0"
+     name="im_btn"
+     width="100"
+     commit_callback.function="InspectAvatar.IM"
+     />
     <menu_button
      follows="top|left"
      height="18"
@@ -144,7 +154,6 @@
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_avatar_gear.xml"
      name="gear_btn"
-     picture_style="true"
      right="-10"
      top="249"
      width="18" />
@@ -157,7 +166,6 @@
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_self_gear.xml"
      name="gear_self_btn"
-     picture_style="true"
      right="-10"
      top="249"
      width="18" />
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index db12daa6e04074ada14db2fbe644e7b7ad3a4ce9..e5e5007c5651af7cf5d4d0848b80b5d1d464537c 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -73,6 +73,8 @@ L$123 to join
      name="group_icon"
      top="24"
      width="38" />
+  <!-- Must be tab_stop="true" so something can hold focus even when the
+    other buttons are disabled or invisible, otherwise inspector closes -->
     <button
      follows="top|left"
      height="18"
@@ -80,11 +82,10 @@ L$123 to join
      image_selected="ForwardArrow_Press"
      image_unselected="ForwardArrow_Off"
      name="view_profile_btn"
-     picture_style="true"
      right="-8"
      top="35"
      left_delta="110"
-     tab_stop="false"
+     tab_stop="true"
      width="18"
      commit_callback.function="InspectGroup.ViewProfile" />
   <button
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index fe492e0ae808f60ef1f02b6aa026405739f3ef80..1365a0483f6bc3bdc4be3815b730faf7276eeb7b 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -151,10 +151,11 @@ This is a really long description for an object being as how it is at least 80 c
    width="75" />
   <icon
    name="secure_browsing"
-   image_name="map_infohub.tga"
+   image_name="Lock"
    left_delta="80"
-   width="16"
-   height="16"
+   visible="false"
+   width="18"
+   height="18"
    top_delta="2"
    tool_tip="Secure Browsing"
    follows="left|top"/> 
@@ -168,7 +169,6 @@ This is a really long description for an object being as how it is at least 80 c
      image_unselected="OptionsMenu_Off"
      menu_filename="menu_inspect_object_gear.xml"
      name="gear_btn"
-     picture_style="true"
      right="-10"
      top_delta="5"
      width="18" />
@@ -180,7 +180,6 @@ This is a really long description for an object being as how it is at least 80 c
      image_unselected="ForwardArrow_Off"
      layout="topleft"
      name="more_info_btn"
-     picture_style="true"
      right="-5"
      top="20"
      left_delta="110"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08f7ee456e4361b269bf0cb965bd6e3ef82ba9b4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ follows="left|right|top|bottom"
+ height="768"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="main_view"
+ width="1024">
+  <layout_stack border_size="0"
+                follows="all"
+                mouse_opaque="false"
+                height="772"
+                name="menu_stack"
+                orientation="vertical"
+                top="0">
+    <layout_panel auto_resize="false"
+                  min_height="19"
+                  mouse_opaque="false"
+                  name="status_bar_container"
+                  height="19"
+                  width="1024"
+                  visible="false"/>
+    <layout_panel auto_resize="false"
+                  height="65"
+                  mouse_opaque="false"
+                  name="nav_bar_container"
+                  width="1024"
+                  visible="false"/>
+    <panel        auto_resize="true"
+                  follows="all"
+                  height="500"
+                  layout="topleft"
+                  mouse_opaque="false"
+                  name="hud"
+                  width="1024">
+      <layout_stack border_size="0"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="hud_stack"
+                    orientation="horizontal"
+                    top="0"
+                    width="1024">
+        <panel auto_resize="true"
+               follows="all"
+               height="500"
+               layout="topleft"
+               mouse_opaque="false"
+               name="main_view"
+               user_resize="true"
+               width="500">
+          <layout_stack border_size="0"
+                        bottom="500"
+                        follows="all"
+                        height="500"
+                        left="0"
+                        mouse_opaque="false"
+                        name="world_stack"
+                        orientation="vertical">
+            <panel auto_resize="true"
+                   follows="all"
+                   height="500"
+                   layout="topleft"
+                   mouse_opaque="false"
+                   name="hud container"
+                   width="500">
+              <view bottom="500"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="world_view_rect"
+                    width="500"/>
+              <panel follows="right|top|bottom"
+                     height="500"
+                     mouse_opaque="false"
+                     name="side_bar_tabs"
+                     right="500"
+                     top="0"
+                     width="32"/>
+              <panel bottom="500"
+                     follows="left|right|bottom"
+                     height="25"
+                     left="0"
+                     mouse_opaque="false"
+                     name="stand_stop_flying_container"
+                     visible="false"
+                     width="500"/>
+            </panel>
+            <layout_panel auto_resize="false"
+                   follows="all"
+                   min_height="33"
+                   mouse_opaque="false"
+                   name="bottom_tray_container"
+                   visible="false"/>
+          </layout_stack>
+        </panel>
+        <!-- side tray -->
+        <layout_panel auto_resize="false"
+                      follows="all"
+                      height="500"
+                      min_width="333"
+                      mouse_opaque="false"
+                      name="side_tray_container"
+                      user_resize="true"
+                      visible="false"
+                      width="333"/>
+      </layout_stack>
+      <floater_view follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="Floater View"
+                    tab_group="-1"
+                    tab_stop="false"
+                    top="0"
+                    width="1024"/>
+      <debug_view follows="all"
+                  left="0"
+                  top="0"
+                  mouse_opaque="false"
+                  height="500"
+                  name="DebugView"
+                  width="1024"/>
+  </panel>
+  </layout_stack>
+  <notify_box_view top="0"
+                   follows="all"
+                   height="768"
+                   mouse_opaque="false"
+                   name="notify_container"
+                   tab_group="-2"
+                   width="1024"/>
+  <menu_holder top="0"
+               follows="all"
+               height="768"
+               mouse_opaque="false"
+               name="Menu Holder"
+               width="1024"/>
+  <snapshot_floater_view enabled="false"
+                         follows="all"
+                         height="768"
+                         left="0"
+                         mouse_opaque="false"
+                         name="Snapshot Floater View"
+                         tab_stop="false"
+                         top="0"
+                         visible="false"
+                         width="1024"/>
+  <tooltip_view top="0"
+                follows="all"
+                height="768"
+                mouse_opaque="false"
+                name="tooltip view"
+                tab_group="-2"
+                width="1024"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index edff1a093a4e827a71a448aec67be9d0f8fa3876..590621062c2bb79654994092e3b2e7fc5e9c7e7f 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -7,7 +7,6 @@
          name="Gear Menu">
   <menu_item_call
    label="View Profile"
-   layout="topleft"
    enabled="true" 
    name="view_profile">
     <menu_item_call.on_click
@@ -15,49 +14,42 @@
   </menu_item_call>
   <menu_item_call
    label="Add Friend"
-   layout="topleft"
    name="add_friend">
     <menu_item_call.on_click
      function="InspectAvatar.AddFriend"/>
   </menu_item_call>
   <menu_item_call
    label="IM"
-   layout="topleft"
    name="im">
     <menu_item_call.on_click
      function="InspectAvatar.IM"/>
   </menu_item_call>
   <menu_item_call
    label="Call"
-   layout="topleft"
    enabled="true"
    name="call">
   </menu_item_call>
   <menu_item_call
    label="Teleport"
-   layout="topleft"
    name="teleport">
     <menu_item_call.on_click
      function="InspectAvatar.Teleport"/>
   </menu_item_call>
   <menu_item_call
    label="Invite to Group"
-   layout="topleft"
    name="invite_to_group">
     <menu_item_call.on_click
      function="InspectAvatar.InviteToGroup"/>
   </menu_item_call>
-  <menu_item_separator layout="topleft" />
+  <menu_item_separator />
   <menu_item_call
    label="Block"
-   layout="topleft"
    name="block">
     <menu_item_call.on_click
      function="InspectAvatar.Block"/>
   </menu_item_call>
   <menu_item_call
    label="Report"
-   layout="topleft"
    name="report">
     <menu_item_call.on_click
      function="InspectAvatar.Report"/>
@@ -68,7 +60,7 @@
     <menu_item_call.on_click
      function="InspectAvatar.Freeze"/>
     <menu_item_call.on_visible
-     function="IsGodCustomerService"/>
+     function="InspectAvatar.VisibleFreezeEject"/>
   </menu_item_call>
   <menu_item_call
    label="Eject"
@@ -76,19 +68,18 @@
     <menu_item_call.on_click
      function="InspectAvatar.Eject"/>
     <menu_item_call.on_visible
-     function="IsGodCustomerService"/>
+     function="InspectAvatar.VisibleFreezeEject"/>
   </menu_item_call>
   <menu_item_call
    label="Debug"
    name="debug">
     <menu_item_call.on_click
-     function="InspectAvatar.Debug"/>
+     function="Avatar.Debug"/>
     <menu_item_call.on_visible
      function="IsGodCustomerService"/>
   </menu_item_call>
   <menu_item_call
    label="Find On Map"
-   layout="topleft"
    name="find_on_map">
     <menu_item_call.on_click
      function="InspectAvatar.FindOnMap"/>
@@ -97,16 +88,16 @@
   </menu_item_call>
   <menu_item_call
    label="Zoom In"
-   layout="topleft"
    name="zoom_in">
     <menu_item_call.on_click
      function="InspectAvatar.ZoomIn"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleZoomIn"/>
   </menu_item_call>  
   <menu_item_call
    label="Pay"
-   layout="topleft"
    name="pay">
     <menu_item_call.on_click
      function="InspectAvatar.Pay"/>
   </menu_item_call>
-</menu>
\ No newline at end of file
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
index 93c53981f3da21da904fa980c13b38ec340096c8..04a247fd548cdf715d9318dc3079dc3e3ab87df6 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
@@ -73,7 +73,7 @@
   <menu_item_call
    label="Edit"
    layout="topleft"
-   name="report">
+   name="edit">
         <menu_item_call.on_click
          function="Object.Edit" />
         <menu_item_call.on_enable
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index 240822e5cab8c200505518ae79c13f316cf5e5a3..3d65878cf8602f8ad6b8dc9c43ab3baf04bc1a14 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -1,53 +1,49 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu
-         create_jump_keys="true"
-         layout="topleft"
-         mouse_opaque="false"
-         visible="false"
-         name="Gear Menu">
-  <menu_item_call
-   label="Stand Up"
-   layout="topleft"
-   enabled="true"
-   name="stand_up">
-    <menu_item_call.on_click
-     function="Self.StandUp"
-     parameter="" />
-    <menu_item_call.on_visible
-     function="Self.VisibleStandUp" />
-  </menu_item_call>
-  <menu_item_call
-   label="My Appearance"
-   layout="topleft"
-   name="my_appearance">
-    <menu_item_call.on_click
-     function="ShowFloater"
-     parameter="appearance" />
-    <menu_item_call.on_enable
-     function="Edit.EnableCustomizeAvatar" />
-  </menu_item_call>
-  <menu_item_call
-   label="My Profile"
-   layout="topleft"
-   enabled="true" 
-   name="my_profile">
-    <menu_item_call.on_click
-     function="ShowAgentProfile"
-     parameter="agent" />
-  </menu_item_call>
-  <menu_item_call
-   label="My Friends"
-   layout="topleft"
-   name="my_friends">
-    <menu_item_call.on_click
-     function="Self.Friends"
-     parameter="" />
-  </menu_item_call>
-  <menu_item_call
-   label="My Groups"
-   layout="topleft"
-   name="my_groups">
-    <menu_item_call.on_click
-     function="Self.Groups" />
-  </menu_item_call>
-</menu>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<menu
+         create_jump_keys="true"
+         layout="topleft"
+         mouse_opaque="false"
+         visible="false"
+         name="Gear Menu">
+  <menu_item_call
+   label="Stand Up"
+   enabled="true"
+   name="stand_up">
+    <menu_item_call.on_click
+     function="Self.StandUp"
+     parameter="" />
+    <menu_item_call.on_visible
+     function="Self.VisibleStandUp" />
+  </menu_item_call>
+  <menu_item_call
+   label="My Appearance"
+   name="my_appearance">
+    <menu_item_call.on_click
+     function="ShowFloater"
+     parameter="appearance" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCustomizeAvatar" />
+  </menu_item_call>
+  <menu_item_call
+   label="My Profile"
+   enabled="true" 
+   name="my_profile">
+    <menu_item_call.on_click
+     function="ShowAgentProfile"
+     parameter="agent" />
+  </menu_item_call>
+  <menu_item_call
+   label="My Friends"
+   name="my_friends">
+    <menu_item_call.on_click
+    function="SideTray.PanelPeopleTab"
+    parameter="friends_panel" />
+  </menu_item_call>
+  <menu_item_call
+   label="My Groups"
+   name="my_groups">
+    <menu_item_call.on_click
+     function="SideTray.PanelPeopleTab"
+     parameter="groups_panel" />
+  </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 62940b87dc3c972febe20248bc8ec98edf6849c0..8b6ab4e4d81533b8c18ff9a4309c84446ffe81c8 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -550,6 +550,16 @@
          function="Inventory.DoToSelected"
          parameter="deactivate" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Save As"
+     layout="topleft"
+     name="Save As">
+        <menu_item_call.on_click
+         function="Inventory.DoToSelected"
+         parameter="save_as" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b07a8bb51234f50b0a21d0b0ed7d73d65aae61f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="menu_inventory_add"
+ visible="false">
+            <menu
+             create_jump_keys="true"
+             label="Upload"
+             layout="topleft"
+             name="upload"
+             tear_off="true">
+                <menu_item_call
+                 label="Image (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Image"
+                 shortcut="control|U">
+                    <menu_item_call.on_click
+                     function="File.UploadImage"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Sound (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Sound">
+                    <menu_item_call.on_click
+                     function="File.UploadSound"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Animation (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Animation">
+                    <menu_item_call.on_click
+                     function="File.UploadAnim"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Bulk (L$[COST] per file)..."
+                 layout="topleft"
+                 name="Bulk Upload">
+                    <menu_item_call.on_click
+                     function="File.UploadBulk"
+                     parameter="" />
+                </menu_item_call>
+                <menu_item_separator
+                 layout="topleft" />
+            </menu>
+
+            <menu_item_call
+             label="New Folder"
+             layout="topleft"
+             name="New Folder">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="category" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Script"
+             layout="topleft"
+             name="New Script">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="lsl" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Note"
+             layout="topleft"
+             name="New Note">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="notecard" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Gesture"
+             layout="topleft"
+             name="New Gesture">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="gesture" />
+            </menu_item_call>
+            <menu
+             height="175"
+             label="New Clothes"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Clothes"
+             top_pad="514"
+             width="125">
+                <menu_item_call
+                 label="New Shirt"
+                 layout="topleft"
+                 name="New Shirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Pants"
+                 layout="topleft"
+                 name="New Pants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="pants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Shoes"
+                 layout="topleft"
+                 name="New Shoes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shoes" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Socks"
+                 layout="topleft"
+                 name="New Socks">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="socks" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Jacket"
+                 layout="topleft"
+                 name="New Jacket">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="jacket" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skirt"
+                 layout="topleft"
+                 name="New Skirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Gloves"
+                 layout="topleft"
+                 name="New Gloves">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="gloves" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Undershirt"
+                 layout="topleft"
+                 name="New Undershirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="undershirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Underpants"
+                 layout="topleft"
+                 name="New Underpants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="underpants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Alpha"
+                 layout="topleft"
+                 name="New Alpha">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="alpha" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Tattoo"
+                 layout="topleft"
+                 name="New Tattoo">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="tattoo" />
+                </menu_item_call>
+            </menu>
+            <menu
+             height="85"
+             label="New Body Parts"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Body Parts"
+             top_pad="514"
+             width="118">
+                <menu_item_call
+                 label="New Shape"
+                 layout="topleft"
+                 name="New Shape">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shape" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skin"
+                 layout="topleft"
+                 name="New Skin">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skin" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Hair"
+                 layout="topleft"
+                 name="New Hair">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="hair" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Eyes"
+                 layout="topleft"
+                 name="New Eyes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="eyes" />
+                </menu_item_call>
+            </menu>
+</menu>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..435a3e6d3400a4bec8de94cf075a359c93233602
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ bottom="806"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="menu_gear_default"
+ visible="false">
+    <menu_item_call
+     label="New Inventory Window"
+     layout="topleft"
+     name="new_window">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="new_window" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Sort by Name"
+     layout="topleft"
+     name="sort_by_name">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="sort_by_name" />
+    </menu_item_call>
+    <menu_item_call
+     label="Sort by Most Recent"
+     layout="topleft"
+     name="sort_by_recent">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="sort_by_recent" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show Filters"
+     layout="topleft"
+     name="show_filters">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="show_filters" />
+    </menu_item_call>
+    <menu_item_call
+     label="Reset Filters"
+     layout="topleft"
+     name="reset_filters">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="reset_filters" />
+    </menu_item_call>
+    <menu_item_call
+     label="Close All Folders"
+     layout="topleft"
+     name="close_folders">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="close_folders" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Empty Trash"
+     layout="topleft"
+     name="empty_trash">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="empty_trash" />
+    </menu_item_call>
+    <menu_item_call
+     label="Empty Lost and Found"
+     layout="topleft"
+     name="empty_lostnfound">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="empty_lostnfound" />
+    </menu_item_call>
+        <menu_item_call
+         label="Save Texture As"
+         layout="topleft"
+         name="Save Texture As">
+            <on_click
+             function="Inventory.GearDefault.Custom.Action"
+             parameter="save_texture" />
+            <on_enable
+			 function="Inventory.GearDefault.Enable"
+			 parameter="save_texture" />
+        </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index c3ee6e250b0f601a6622e0e81a66bee06fcff0b7..5eb0560962da5fccbeab7856d08e45317a0cbc3e 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -10,22 +10,18 @@
     <menu
      create_jump_keys="true"
      label="Me"
-     layout="topleft"
      name="File">
         <menu_item_call
          label="Preferences"
-         layout="topleft"
          name="Preferences..."
          shortcut="control|P">
             <menu_item_call.on_click
              function="ShowFloater"
              parameter="preferences" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Quit [APP_NAME]"
-         layout="topleft"
          name="Quit"
          shortcut="control|Q">
             <menu_item_call.on_click
@@ -36,7 +32,6 @@
     <menu
      create_jump_keys="true"
      label="Edit"
-     layout="topleft"
      name="Edit"
      width="153">
     </menu>
@@ -44,22 +39,18 @@
     <menu
      create_jump_keys="true"
      label="Help"
-     layout="topleft"
      name="Help">
         <menu_item_call
          label="[SECOND_LIFE] Help"
-         layout="topleft"
          name="Second Life Help"
          shortcut="F1">
             <menu_item_call.on_click
              function="ShowFloater"
              parameter="help f1" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="About [APP_NAME]"
-         layout="topleft"
          name="About Second Life">
             <menu_item_call.on_click
              function="ShowFloater"
@@ -69,7 +60,6 @@
     <menu
      create_jump_keys="true"
      label="Debug"
-     layout="topleft"
      name="Debug"
      tear_off="true">
       <!-- Need a copy of the edit menu here so keyboard shortcuts like
@@ -78,12 +68,10 @@
       <menu
        create_jump_keys="true"
        label="Edit"
-       layout="topleft"
        name="Edit"
        tear_off="true">
         <menu_item_call
          label="Undo"
-         layout="topleft"
          name="Undo"
          shortcut="control|Z">
           <menu_item_call.on_click
@@ -93,7 +81,6 @@
         </menu_item_call>
         <menu_item_call
          label="Redo"
-         layout="topleft"
          name="Redo"
          shortcut="control|Y">
           <menu_item_call.on_click
@@ -101,11 +88,9 @@
           <menu_item_call.on_enable
            function="Edit.EnableRedo" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Cut"
-         layout="topleft"
          name="Cut"
          shortcut="control|X">
           <menu_item_call.on_click
@@ -115,7 +100,6 @@
         </menu_item_call>
         <menu_item_call
          label="Copy"
-         layout="topleft"
          name="Copy"
          shortcut="control|C">
           <menu_item_call.on_click
@@ -125,7 +109,6 @@
         </menu_item_call>
         <menu_item_call
          label="Paste"
-         layout="topleft"
          name="Paste"
          shortcut="control|V">
           <menu_item_call.on_click
@@ -135,7 +118,6 @@
         </menu_item_call>
         <menu_item_call
          label="Delete"
-         layout="topleft"
          name="Delete"
          shortcut="Del">
           <menu_item_call.on_click
@@ -145,7 +127,6 @@
         </menu_item_call>
         <menu_item_call
          label="Duplicate"
-         layout="topleft"
          name="Duplicate"
          shortcut="control|D">
           <menu_item_call.on_click
@@ -153,11 +134,9 @@
           <menu_item_call.on_enable
            function="Edit.EnableDuplicate" />
         </menu_item_call>
-        <menu_item_separator
-         layout="topleft" />
+        <menu_item_separator />
         <menu_item_call
          label="Select All"
-         layout="topleft"
          name="Select All"
          shortcut="control|A">
           <menu_item_call.on_click
@@ -167,7 +146,6 @@
         </menu_item_call>
         <menu_item_call
          label="Deselect"
-         layout="topleft"
          name="Deselect"
          shortcut="control|E">
           <menu_item_call.on_click
@@ -179,7 +157,6 @@
       <menu_item_separator />
       <menu_item_call
          label="Show Debug Settings"
-         layout="topleft"
          name="Debug Settings">
             <menu_item_call.on_click
              function="Advanced.ShowDebugSettings"
@@ -187,7 +164,6 @@
         </menu_item_call>
         <menu_item_call
          label="UI/Color Settings"
-         layout="topleft"
          name="UI/Color Settings">
             <menu_item_call.on_click
              function="Advanced.ShowDebugSettings"
@@ -196,7 +172,6 @@
         <menu_item_separator />
         <menu_item_call
          label="XUI Preview Tool"
-         layout="topleft"
          name="UI Preview Tool"
          shortcut="control|T">
             <menu_item_call.on_click
@@ -204,34 +179,24 @@
              parameter="ui_preview" />
         </menu_item_call>
       <menu_item_separator />
-      <menu_item_call
-         label="Widget Test"
-         layout="topleft"
-         name="Widget Test"
-         shortcut="control|shift|T">
-        <menu_item_call.on_click
-         function="ShowFloater"
-         parameter="test_widgets" />
-      </menu_item_call>
-      <menu_item_call
-         label="Inspectors Test"
-         name="inspectors_test"
-         shortcut="control|shift|I"
-         >
-        <menu_item_call.on_click
-         function="ShowFloater"
-         parameter="test_inspectors" />
-      </menu_item_call>
       <menu_item_call
          label="Show Side Tray"
          name="Show Side Tray">
         <menu_item_call.on_click
          function="Advanced.ShowSideTray" />
       </menu_item_call>
+      <menu_item_check
+         label="Reg In Client Test (restart)"
+         name="Reg In Client Test (restart)">
+            <menu_item_check.on_check
+               control="RegInClient" />
+            <menu_item_check.on_click
+               function="ToggleControl"
+               parameter="RegInClient" />
+      </menu_item_check>
       <menu_item_separator />
         <menu_item_call
          label="Show TOS"
-         layout="topleft"
          name="TOS">
             <menu_item_call.on_click
              function="ShowFloater"
@@ -239,7 +204,6 @@
         </menu_item_call>
         <menu_item_call
          label="Show Critical Message"
-         layout="topleft"
          name="Critical">
             <menu_item_call.on_click
              function="ShowFloater"
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
index eedb4383bbf830af85bacdd688f9b018e15307aa..f1117d14191d6a4c91653a542dcaca9d2b0d1eed 100644
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
@@ -31,9 +31,6 @@
      function="CheckControl"
      parameter="FriendsListShowIcons" />
   </menu_item_check>
-  <menu_item_call name="organize_offline" label="Organize Offline Friends">
-    <menu_item_call.on_click function="People.Friends.ViewSort.Action" userdata="organize_offline" />
-  </menu_item_call>
   <menu_item_separator layout="topleft" />
   <menu_item_call name="show_blocked_list" label="Show Blocked Residents &amp; Objects">
     <menu_item_call.on_click function="SideTray.ShowPanel" parameter="panel_block_list_sidetray" />
diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
index 2bec7454109abf50045498fa869c9775ff9f6d42..6dd44255bf30c2fcb9b8ad5851df2b39a1305174 100644
--- a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
@@ -13,4 +13,15 @@
        function="CheckControl"
        parameter="GroupListShowIcons" />
   </menu_item_check>
+  <menu_item_check
+   label="Leave Selected Group"
+   layout="topleft"
+   name="Leave Selected Group">
+      <menu_item_check.on_click
+       function="People.Groups.ViewSort.Action"
+       parameter="show_icons" />
+      <menu_item_check.on_check
+       function="CheckControl"
+       parameter="GroupListShowIcons" />
+  </menu_item_check>
 </menu>
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
index 63d1a67d0f1f0135e821b6c8b65182f8d83a59eb..4b8bc8132fc511bac8f6362868546f3744cb1efd 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
@@ -82,7 +82,7 @@
          parameter="copy" />
     </menu_item_call>
     <menu_item_call
-     label="Copy SLURL"
+     label="Copy SLurl"
      layout="topleft"
      name="copy_slurl">
         <on_click
diff --git a/indra/newview/skins/default/xui/en/menu_url_map.xml b/indra/newview/skins/default/xui/en/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ca9e3b3fe63a1fa5dacd0c6dbf18194c9365a14
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_url_map.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Url Popup">
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.Execute" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Teleport to Location"
+     layout="topleft"
+     name="teleport_to_location">
+        <menu_item_call.on_click
+         function="Url.Teleport" />
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Copy SLurl to clipboard"
+     layout="topleft"
+     name="url_copy">
+        <menu_item_call.on_click
+         function="Url.CopyUrl" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
index 6f7e659f48d65a05750ca4b7b4409006b7ab6bc8..35c2269b0d1a5f9d941c533504eecb5129fcd831 100644
--- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
@@ -11,6 +11,13 @@
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_call
      label="Teleport to Object Location"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml
index 3804f7f7802c19b54bff255f09041fecef2c6378..f477c310fb708b20b415632c223aa4a17ed30bcf 100644
--- a/indra/newview/skins/default/xui/en/menu_url_parcel.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_parcel.xml
@@ -9,6 +9,15 @@
         <menu_item_call.on_click
          function="Url.Execute" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml
index 58714f1f42f8a7e6b9071a479bbedc2e959c579b..98abc206a590129ca2f23841291911df351f348d 100644
--- a/indra/newview/skins/default/xui/en/menu_url_slurl.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_slurl.xml
@@ -11,6 +11,13 @@
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_call
      label="Teleport to Location"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml
index ff52d7e1092b4c106f5642d1967680751ffee34e..289e32bcf418abb7d6f1686ac9bdfb52424f8985 100644
--- a/indra/newview/skins/default/xui/en/menu_url_teleport.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_teleport.xml
@@ -9,6 +9,15 @@
         <menu_item_call.on_click
          function="Url.Execute" />
     </menu_item_call>
+    <menu_item_separator
+     layout="topleft" />
+    <menu_item_call
+     label="Show on Map"
+     layout="topleft"
+     name="show_on_map">
+        <menu_item_call.on_click
+         function="Url.ShowOnMap" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 829cd6aecaf60a584607f5bb7390a90b3e4208e7..9edfc93be186b62ca736b27baeee560aae7d76ce 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -98,6 +98,24 @@
                  function="World.SetBusy"/>
             </menu_item_call>
         </menu>
+        <menu_item_call
+         label="Request Admin Status"
+         layout="topleft"
+         name="Request Admin Options"
+         shortcut="control|alt|G"
+		 visible="false">
+            <menu_item_call.on_click
+             function="Advanced.RequestAdminStatus" />
+        </menu_item_call>
+        <menu_item_call
+         label="Leave Admin Status"
+         layout="topleft"
+         name="Leave Admin Options"
+         shortcut="control|alt|shift|G"
+		 visible="false">
+            <menu_item_call.on_click
+             function="Advanced.LeaveAdminStatus" />
+        </menu_item_call>
         <menu_item_separator
          layout="topleft" />
         <menu_item_call
@@ -114,25 +132,22 @@
      layout="topleft"
      name="Communicate"
      tear_off="true">
-        <menu_item_check
+        <menu_item_call
          label="My Friends"
          layout="topleft"
          name="My Friends"
          shortcut="control|shift|F">
-            <menu_item_check.on_check
-             function="Floater.Visible"
-             parameter="contacts.friends" />
-            <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="contacts.friends" />
-        </menu_item_check>
+            <menu_item_call.on_click
+             function="SideTray.PanelPeopleTab"
+             parameter="friends_panel" />
+            </menu_item_call>
         <menu_item_call
          label="My Groups"
          layout="topleft"
          name="My Groups">
             <menu_item_call.on_click
-             function="Floater.Show"
-             parameter="contacts.groups" />
+             function="SideTray.PanelPeopleTab"
+             parameter="groups_panel" />
         </menu_item_call>
         <menu_item_separator
          layout="topleft" />
@@ -155,18 +170,15 @@
              function="Floater.Toggle"
              parameter="nearby_chat" />
         </menu_item_check>
-        <menu_item_check
-         label="Nearby Speakers"
+        <menu_item_call
+         label="Nearby People"
          layout="topleft"
          name="Active Speakers"
          shortcut="control|shift|A">
-            <menu_item_check.on_check
-             function="Floater.Visible"
-             parameter="active_speakers" />
-            <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="active_speakers" />
-        </menu_item_check>
+            <menu_item_call.on_click
+             function="SideTray.PanelPeopleTab"
+             parameter="nearby_panel" />
+            </menu_item_call>
         <menu_item_check
          label="Nearby Media"
          layout="topleft"
@@ -1920,6 +1932,39 @@
                  function="Advanced.ToggleConsole"
                  parameter="debug" />
             </menu_item_check>
+            <menu_item_call
+             label="Notifications Console"
+             layout="topleft"
+             name="Notifications"
+             shortcut="control|shift|5">
+              <menu_item_call.on_click
+               function="Floater.Toggle"
+               parameter="notifications_console" />
+            </menu_item_call>
+            <menu_item_check
+               label="Texture Size Console"
+               layout="topleft"
+               name="Texture Size"
+               shortcut="control|shift|6">
+              <menu_item_check.on_check
+               function="Advanced.CheckConsole"
+               parameter="texture size" />
+              <menu_item_check.on_click
+               function="Advanced.ToggleConsole"
+               parameter="texture size" />
+            </menu_item_check>
+            <menu_item_check
+               label="Texture Category Console"
+               layout="topleft"
+               name="Texture Category"
+               shortcut="control|shift|7">
+              <menu_item_check.on_check
+               function="Advanced.CheckConsole"
+               parameter="texture category" />
+              <menu_item_check.on_click
+               function="Advanced.ToggleConsole"
+               parameter="texture category" />
+            </menu_item_check>
             <menu_item_check
              label="Fast Timers"
              layout="topleft"
@@ -1946,19 +1991,6 @@
                  function="Advanced.ToggleConsole"
                  parameter="memory view" />
             </menu_item_check>
-            <menu_item_check
-             label="Notifications Console"
-             layout="topleft"
-             name="Notifications"
-             shortcut="control|shift|5"
-             use_mac_ctrl="true">
-                <menu_item_check.on_check
-                 function="Advanced.CheckConsole"
-                 parameter="notifications" />
-                <menu_item_check.on_click
-                 function="Floater.Show"
-                 parameter="notifications_console" />
-            </menu_item_check>
             <menu_item_separator
              layout="topleft" />
             <menu_item_call
@@ -2477,19 +2509,43 @@
              label="Disable Textures"
              name="Disable Textures">
                 <menu_item_check.on_check
-                 function="Advanced.CheckDisableTextures"
-                 parameter="DisableTextures" />
+                 function="CheckControl"
+                 parameter="TextureDisable" />
+                <menu_item_check.on_click
+                 function="ToggleControl" 
+                 parameter="TextureDisable" />
+            </menu_item_check>
+            <menu_item_check
+              label="Full Res Textures"
+             layout="topleft"
+             name="Rull Res Textures">
+                <menu_item_check.on_check
+                 function="CheckControl"
+                 parameter="TextureLoadFullRes" />
                 <menu_item_check.on_click
-                 function="Advanced.ToggleDisableTextures" />
+                 function="ToggleControl"
+                 parameter="TextureLoadFullRes" />
+            </menu_item_check>
+            <menu_item_check
+               label="Audit Textures"
+               layout="topleft"
+               name="Audit Textures">
+              <menu_item_check.on_check
+               function="CheckControl"
+               parameter="AuditTexture" />
+              <menu_item_check.on_click
+               function="ToggleControl"
+               parameter="AuditTexture" />
             </menu_item_check>
             <menu_item_check
              label="Texture Atlas"
              name="Texture Atlas">
               <menu_item_check.on_check
-               function="Advanced.CheckTextureAtlas"
-               parameter="TextureAtlas" />
+               function="CheckControl"
+               parameter="EnableTextureAtlas" />
               <menu_item_check.on_click
-               function="Advanced.ToggleTextureAtlas" />
+               function="ToggleControl"
+               parameter="EnableTextureAtlas" />
             </menu_item_check>
               <menu_item_check
              label="Render Attached Lights"
@@ -2512,8 +2568,8 @@
                  parameter="RenderAttachedParticles" />
             </menu_item_check>
             <menu_item_check
-             label="Hover Highlight Objects"
-             name="Hover Highlight Objects">
+             label="Hover Glow Objects"
+             name="Hover Glow Objects">
                 <menu_item_check.on_check
                  function="CheckControl"
                  parameter="RenderHighlightEnable" />
diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml
index 2de9449ea6c7bf8ae1c68ec28da825924d785a1d..76c0d027f336f42203c0da977608ced2e2740164 100644
--- a/indra/newview/skins/default/xui/en/mime_types.xml
+++ b/indra/newview/skins/default/xui/en/mime_types.xml
@@ -163,8 +163,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="application/javascript">
 		<label name="application/javascript_label">
@@ -208,7 +208,7 @@
 	</mimetype>
 	<mimetype name="application/smil">
 		<label name="application/smil_label">
-		    Synchronized Multimedia Integration Language (SMIL)
+			Synchronized Multimedia Integration Language (SMIL)
 		</label>
 		<widgettype>
 			movie
@@ -348,8 +348,8 @@
 			web
 		</widgettype>
 		<impl>
-      media_plugin_webkit
-    </impl>
+			media_plugin_webkit
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="text/plain">
 		<label name="text/plain_label">
@@ -381,8 +381,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/mp4">
 		<label name="video/mp4_label">
@@ -392,8 +392,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="video/quicktime">
 		<label name="video/quicktime_label">
@@ -403,8 +403,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/x-ms-asf">
 		<label name="video/x-ms-asf_label">
@@ -414,8 +414,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype name="video/x-ms-wmv">
 		<label name="video/x-ms-wmv_label">
@@ -425,8 +425,8 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 	<mimetype menu="1" name="video/x-msvideo">
 		<label name="video/x-msvideo_label">
@@ -436,7 +436,7 @@
 			movie
 		</widgettype>
 		<impl>
-      media_plugin_quicktime
-    </impl>
+			media_plugin_quicktime
+		</impl>
 	</mimetype>
 </mimetypes>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7b829d4e13052a214e9ff2bfa5b69fdc1f7b9008..227d0ae2cb42c045192b1c8c156cc82b05627e0c 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -370,99 +370,12 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
   </notification>
 
   <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpLand"
-   type="alertmodal">
-Selecting the &quot;Publish in Search&quot;
-Checking this box will show:
-- this parcel in search results
-- this parcel&apos;s public objects
-- this parcel in web search
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickSoundHelpLand"
-   type="alertmodal">Media and Music can only be experienced within the parcel. Sound and Voice options can be restricted to the parcel or will be heard by residents outside the parcel depending on their maturity Rating. Go to Knowledge Base to learn more about how to set these options?
-    <url option="0" name="url">
-	https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=5046
-    </url>
-    <usetemplate
-     name="okcancelbuttons"
-     yestext="Go to Knowledge Base"
-	 notext="Close" />
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickSearchHelpAll"
-   type="alertmodal">
-Search results are organized based on the tab you are in, your maturity Rating, the category chosen, and other factors. For more details, please see the Knowledge Base.
-    <url option="0" name="url">
-	https://support.secondlife.com/ics/support/default.asp?deptID=4417&amp;task=knowledge&amp;questionID=4722
-    </url>
-    <usetemplate
-     name="okcancelbuttons"
-     yestext="Go to Knowledge Base"
-	 notext="Close" />
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpLandDisabled"
-   type="alertmodal">
-You can&apos;t make this parcel show in search because it is located in a region that forbids this.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPublishHelpAvatar"
-   type="alertmodal">
-Selecting &quot;Show in Search&quot; will show:
-- my profile in search results
-- a link to my profile in public group pages
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickPartnerHelpAvatar"
-   type="alertmodal">
-You can propose to another Resident or dissolve an existing partnership through the [SECOND_LIFE] website.
-
-Go to the [SECOND_LIFE] web site for more information on partnering?
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="Go to Page"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickUploadHelpPermissions"
-   type="alertmodal">
-Your default permissions may not work in older regions.
-  </notification>
-
-<notification
     icon="alertmodal.tga"
     name="ClickUnimplemented"
     type="alertmodal">
 Sorry, not implemented yet.
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="ClickWebProfileHelpAvatar"
-   type="alertmodal">
-If this Resident has set a web profile URL then you can:
- * Click &apos;Load&apos; to see the page in this Web tab.
- * Click Load &gt; &apos;In external browser&apos; to view the page in your default web browser.
- * Click Load &gt; &apos;Home URL&apos; to return to this Resident&apos;s web profile if you&apos;ve navigated away.
-
-When viewing your own profile, you can enter any URL as your web profile and click OK to set it.
-Other residents can visit the URL you set when they look at your profile.
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="JoinGroupCanAfford"
@@ -1957,21 +1870,6 @@ Join land?
      yestext="OK"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="ShowOwnersHelp"
-   type="alertmodal">
-Show owners:
-Color parcels to show the owner type.
-
-Green = Your land
-Aqua = Your Group&apos;s land
-Red = Owned by others
-Yellow = For sale
-Purple = For auction
-Grey = Public
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="ConfirmNotecardSave"
@@ -2845,18 +2743,6 @@ Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and othe
      yestext="Go to page"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="WebLaunchPublicIssueHelp"
-   type="alertmodal">
-Visit the [SECOND_LIFE] Wiki for info on how to use the Public Issue Tracker.
-    <usetemplate
-     ignoretext="Launch my browser to view instructions for the Public Issue Tracker"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go to page"/>
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="WebLaunchSupportWiki"
@@ -3634,669 +3520,272 @@ Type a short announcement which will be sent to everyone in this region.
 
   <notification
    icon="alertmodal.tga"
-   label="Block Terraform"
-   name="HelpRegionBlockTerraform"
+   label="Changed Region Maturity"
+   name="RegionMaturityChange"
    type="alertmodal">
-If this box is checked, land owners will not be able to terraform their land regardless of the per-parcel &apos;Edit Terrain&apos; setting.
-
-Default: off
+The maturity rating for this region has been updated.
+It may take some time for the change to be reflected on the map.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Block Fly"
-   name="HelpRegionBlockFly"
+   label="Voice Version Mismatch"
+   name="VoiceVersionMismatch"
    type="alertmodal">
-If this box is checked, people will not be able to fly in this region regardless of the per-parcel &apos;Fly&apos; setting.
-
-Default: off
+This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME].
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Bulk Change Content Permissions"
-   name="HelpBulkPermission"
+   label="Can&apos;t Buy Objects"
+   name="BuyObjectOneOwner"
    type="alertmodal">
-The Bulk Permissions tool helps you to quickly change the permissions on multiple items in the contents of the selected object(s).  However, please note that you are only setting permissions on the items in the Contents of the selected objects -- not permissions on the container object(s) themselves.
-
-Also note, the permissions are not applied to the nested contents of any of the contained items.  Your request only operates on items exactly one level deep.
-
-You can selectively choose which types of items to modify by using the checklist under &apos;Content Types&apos; here. Snapshots are included when you select Textures.
-
-* This tool will only succeed at changing permissions on items you are allowed to change.
-* You cannot grant any Next owner permissions which you do not already have.
-* The Next owner permissions are merely requests. If any item cannot take all of the new permissions, none of its permissions will change.
-
-When you are ready to change the permissions in bulk, click &apos;Apply&apos; and wait for the results to display.
-
-If you close the Bulk Permissions window while permissions are being changed, it will halt the operation.
+Cannot buy objects from different owners at the same time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Allow Damage"
-   name="HelpRegionAllowDamage"
+   label="Can&apos;t Buy Contents"
+   name="BuyContentsOneOnly"
    type="alertmodal">
-If this box is checked, the health system across all parcels regardless of individual parcel settings. If this box is left unchecked, individual parcel owners will still be able to activate the health system on their parcels.
-
-Default: off
+Unable to buy the contents of more than one object at a time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Agent Limit"
-   name="HelpRegionAgentLimit"
+   label="Can&apos;t Buy Contents"
+   name="BuyContentsOneOwner"
    type="alertmodal">
-Sets the maximum number of avatars allowed in this region.
-Performance may vary depending on the number avatars present.
-
-Default: 40
+Cannot buy objects from different owners at the same time.
+Please select only one object and try again.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Object Bonus"
-   name="HelpRegionObjectBonus"
+   name="BuyOriginal"
    type="alertmodal">
-The Object Bonus is a multiplier for primitives allowed on any given parcel. The range allowed is 1 to 10. Set at &apos;1&apos;, each 512m² parcel is allowed 117 objects. Set at &apos;2&apos;, each 512m² parcel is allowed 234, or twice as many, and so on. The max number of objects allowed per region remains 15,000 no matter what the Object Bonus is. Once set, be aware that lowering the Object Bonus may cause objects to be returned or deleted.
-
-Default: 1.0
+Buy original object from [OWNER] for L$[PRICE]?
+You will become the owner of this object.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Maturity"
-   name="HelpRegionMaturity"
+   name="BuyOriginalNoOwner"
    type="alertmodal">
-Sets the maturity Rating of the Region, as shown in the menu bar at the top of any Resident&apos;s viewer, and in tooltips on the World Map when the cursor hovers over this Region. This setting also affects access to this Region and search results. Other Residents may only enter Regions or view search results with the same maturity Ratings they have chosen in their preferences.
-
-It may take some time for this change to be reflected on the map.
+Buy original object for L$[PRICE]?
+You will become the owner of this object.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Restrict Pushing"
-   name="HelpRegionRestrictPushObject"
+   name="BuyCopy"
    type="alertmodal">
-This checkbox sets the full region to restricted push permissions.
-When enabled, Residents may only be pushed by themselves or by the parcel&apos;s owner.
-(Push refers to the llPushObject() LSL function.)
-
-Default: Off
+Buy a copy from [OWNER] for L$[PRICE]?
+The object will be copied to your inventory.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Parcel Join/Subdivide"
-   name="HelpParcelChanges"
+   name="BuyCopyNoOwner"
    type="alertmodal">
-This checkbox sets whether or not parcels not owned by the estate owner can be joined or subdivided.
-If this option is unchecked:
- * Only estate owners or managers can join or subdivide parcels.
- * They may only join or subdivide parcels belonging to the owner, or to a group where they have the appropriate group powers.
-If this option is checked:
- * All parcel owners can join or subdivide the parcels they own.
- * For group owned parcels, those with appropriate group powers may join or subdivide parcels.
-
-Default: Checked
+Buy a copy for L$[PRICE]?
+The object will be copied to your inventory.
+You will be able to:
+ Modify: [MODIFYPERM]
+ Copy: [COPYPERM]
+ Resell or Give Away: [RESELLPERM]
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Do Not Show In Search"
-   name="HelpRegionSearch"
+   name="BuyContents"
    type="alertmodal">
-Checking this box will block parcel owners from listing their parcels in search.
-
-Default: Off
+Buy contents from [OWNER] for L$[PRICE]?
+They will be copied to your inventory.
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Changed Region Maturity"
-   name="RegionMaturityChange"
+   name="BuyContentsNoOwner"
    type="alertmodal">
-The maturity rating for this region has been updated.
-It may take some time for the change to be reflected on the map.
+Buy contents for L$[PRICE]?
+They will be copied to your inventory.
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Land Resale"
-   name="HelpRegionLandResell"
+   name="ConfirmPurchase"
    type="alertmodal">
-Estate owners and managers can sell any land owned by the estate owner.
-If this option is left unchecked, buyers cannot resell their land in this region.
-If this option is checked, buyers can resell their land in this region.
+This transaction will:
+[ACTION]
 
-Default: Disallow
+Are you sure you want to proceed with this purchase?
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Scripts"
-   name="HelpRegionDisableScripts"
-   type="alertmodal">
-When sim performance is poor, a script may be to blame. Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS.
-If it is lower than 45,  open the Time panel located at the bottom of the Stats Bar. If Script Time reads 25 ms or higher, click the Get Top Scripts button. You will be given the name and location of scripts that may be causing poor performance.
+   name="ConfirmPurchasePassword"
+   type="password">
+This transaction will:
+[ACTION]
 
-Checking the Disable Scripts box and then pressing the Apply button will temporarily disable all scripts in this region. You may need to do this in order to travel to the location of a noted &apos;top script&apos;. Once you have arrived at the location, investigate the script to determine if it is causing the problem. You may want to contact the owner of the script or delete or return the object.
-Uncheck the Disable Script box and then Apply to reactivate the scripts in the region.
+Are you sure you want to proceed with this purchase?
+Please re-enter your password and click OK.
+    <form name="form">
+      <input
+       name="message"
+       type="password"/>
+      <button
+       default="true"
+       index="0"
+       name="ConfirmPurchase"
+       text="OK"/>
+      <button
+       index="1"
+       name="Cancel"
+       text="Cancel"/>
+    </form>
+  </notification>
 
-Default: off
+  <notification
+   icon="alert.tga"
+   name="SetPickLocation"
+   type="alert">
+Note:
+You have updated the location of this pick but the other details will retain their original values.
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Collisions"
-   name="HelpRegionDisableCollisions"
+   name="MoveInventoryFromObject"
    type="alertmodal">
-When sim performance is poor, physical objects may be to blame.
-Open the Statistics Bar (Ctrl+Shift+1). Look at the Simulator Physics FPS.  If it is lower than 45, open the Time panel located at the bottom of the Stats Bar. If Sim Time (Physics) reads 20 ms or higher, click the Get Top Colliders button.
-You will be given the name and location of physical objects that may be causing poor performance.
-
-Checking the Disable Collisions box and then pressing the Apply button will temporarily disable object-object collisions. You may need to do this in order to travel to the location of a noted &apos;top collider&apos;. Once you have arrived at the location, investigate the object - is it constantly colliding with other objects? You may want to contact the owner of the object or delete or return the object.
-Uncheck the Disable Collisions box and then Apply to reactivate collisions in the region.
+You have selected &apos;no copy&apos; inventory items.
+These items will be moved to your inventory, not copied.
 
-Default: off
+Move the inventory item(s)?
+    <usetemplate
+     ignoretext="Warn me before I move &apos;no-copy&apos; items from an object"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Disable Physics"
-   name="HelpRegionDisablePhysics"
+   name="MoveInventoryFromScriptedObject"
    type="alertmodal">
-Disable Physics is similar to Disable Collisions, except all physics simulation is disabled.  This means that not only will objects stop colliding, but avatars will be unable to move.
-
-This should only be used when Disable Collisions does not give back enough performance to the region to investigate a physics problem or Top Collider.
+You have selected &apos;no copy&apos; inventory items.  These items will be moved to your inventory, not copied.
+Because this object is scripted, moving these items to your inventory may cause the script to malfunction.
 
-Be sure to re-enable physics when you are done, or avatars will continue to be unable to move.
+Move the inventory item(s)?
+    <usetemplate
+     ignoretext="Warn me before I move &apos;no-copy&apos; items which might break a scripted object"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
+  </notification>
 
-Default: off
+  <notification
+   icon="alert.tga"
+   name="ClickActionNotPayable"
+   type="alert">
+Warning: The &apos;Pay object&apos; click action has been set, but it will only work if a script is added with a money() event.
+    <form name="form">
+      <ignore name="ignore"
+       text="I set the action &apos;Pay object&apos; when building an object without a money() script"/>
+    </form>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Top Colliders"
-   name="HelpRegionTopColliders"
+   name="OpenObjectCannotCopy"
    type="alertmodal">
-Show a list of objects experiencing the greatest number of potential object-object collisions.  These objects can slow performance.  Select Advanced &gt; Performance Tools &gt; Statistics Bar and look under Simulator &gt; Time &gt; Physics Time to see if more than 20 ms is being spent in physics.
+There are no items in this object that you are allowed to copy.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Top Scripts"
-   name="HelpRegionTopScripts"
+   name="WebLaunchAccountHistory"
    type="alertmodal">
-Show a list of objects spending the most time running LSL scripts.  These objects can slow performance.
-Select Advanced &gt; Performance Tools &gt; Statistics Bar and look under Simulator &gt; Time &gt; Script Time to see if more than 25 ms is being spent in scripts.
+Go to  your [http://secondlife.com/account/ Dashboard] to see your account history?
+    <usetemplate
+     ignoretext="Launch my browser to see my account history"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="Go to page"/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Restart Region"
-   name="HelpRegionRestart"
+   name="ConfirmQuit"
    type="alertmodal">
-Restart the server process running this region after a two minute warning.  All Residents in the region will be disconnected.  The region will save its data, and should come back up within 90 seconds.
-
-Restarting the region will not fix most performance problems, and should usually be used only when directed.
+Are you sure you want to quit?
+    <usetemplate
+     ignoretext="Confirm before I quit"
+     name="okcancelignore"
+     notext="Don&apos;t Quit"
+     yestext="Quit"/>
+     <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Water Height"
-   name="HelpRegionWaterHeight"
+   name="HelpReportAbuseEmailLL"
    type="alertmodal">
-This is the height in meters where water appears. If this setting is anything other than 20 and you have water that is adjacent to the edge of world or &apos;void&apos; water, there will be a visible gap.
+Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
 
-Default: 20
+All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
+   <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   label="Terrain Raise"
-   name="HelpRegionTerrainRaise"
-   type="alertmodal">
-This is the distance in meters that parcel owners can raise their terrain above the &apos;baked&apos; terrain default height.
-
-Default: 4
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Terrain Lower"
-   name="HelpRegionTerrainLower"
-   type="alertmodal">
-This is the distance in meters that parcel owners can lower their terrain below the &apos;baked&apos; terrain default height.
-
-Default: -4
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Upload RAW Terrain"
-   name="HelpRegionUploadRaw"
-   type="alertmodal">
-This button uploads a .RAW file to the region you are in.
-The file must have the correct dimensions (RGB, 256x256) and 13 channels.  The best way to create a terrain file is to download the existing RAW file.  A good first step is to modify the red channel (land height), and upload it.
-
-The upload can take up to 45 seconds. Note that uploading a terrain file *will not* move the objects that are on the land, only the terrain itself and the permissions associated with the parcels.  This can result in objects going underground.
-
-For more information on editing region height fields, consult F1 Help.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Download RAW Terrain"
-   name="HelpRegionDownloadRaw"
-   type="alertmodal">
-This button downloads a file containing the height field data, parcel dimensions, parcel for sale status and some parcel permissions for this region. When opening the file in a program such as Photoshop you must specify the document&apos;s dimensions which are: RGB, 256x256 with 13 channels. This terrain file cannot be opened in any other way.
-
-For more information on editing region height fields, consult F1 help.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Use Estate Sun"
-   name="HelpRegionUseEstateSun"
-   type="alertmodal">
-This checkbox makes the sun position in this region the same as the sun position in the rest of the estate.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Fixed Sun"
-   name="HelpRegionFixedSun"
-   type="alertmodal">
-This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Bake Terrain"
-   name="HelpRegionBakeTerrain"
-   type="alertmodal">
-This button saves the current shape of the terrain as the new default for the region. Once baked, the land can revert to the saved shape whenever you or others use the Edit Terrain &apos;Revert&apos; option. The baked terrain is also the middle point for the terrain raise and lower limits.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Estate Managers"
-   name="HelpEstateEstateManager"
-   type="alertmodal">
-An estate manager is a Resident to whom you have delegated control of region and estate settings.  An estate manager can change any setting in these panels, except for uploading, downloading, and baking terrain.  In particular, they can allow or ban Residents from your estate.
-
-Estate managers can only be added or removed by the owner of the estate, not by each other.  Please only choose Residents you trust as estate managers, as you will be ultimately responsible for their actions.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Use Global Time"
-   name="HelpEstateUseGlobalTime"
-   type="alertmodal">
-This checkbox makes the sun in your estate follow the same position as on the Linden-owned &apos;mainland&apos; estates.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Fixed Sun"
-   name="HelpEstateFixedSun"
-   type="alertmodal">
-This checkbox sets the sun position to the position in the Phase slider and stops the sun from moving.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Public Access"
-   name="HelpEstateExternallyVisible"
-   type="alertmodal">
-This checkbox sets whether Residents who are on other estates can enter this estate without being on an access list.
-
-Default: on
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Direct Teleport"
-   name="HelpEstateAllowDirectTeleport"
-   type="alertmodal">
-When checked, allows Residents to directly teleport to any point in your estate.  When unchecked, Residents teleport to the nearest telehub.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Access"
-   name="HelpEstateAllowResident"
-   type="alertmodal">
-Access to this estate will be limited to Residents listed here and any groups below.  This setting is only available when Public Access is unchecked.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Group Access"
-   name="HelpEstateAllowGroup"
-   type="alertmodal">
-Access to this estate will be limited to groups listed here and any Residents above.  This setting is only available when Public Access is unchecked.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Abuse Email Address"
-   name="HelpEstateAbuseEmailAddress"
-   type="alertmodal">
-Setting this to a valid email address will cause abuse reports on this estate to be sent to that address.
-Setting it blank will cause abuse reports to be sent only to Linden Lab.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Deny Access"
-   name="HelpEstateBanResident"
-   type="alertmodal">
-Residents on this list are denied access to your estate, regardless of any other settings.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Allow Voice Chat"
-   name="HelpEstateVoiceChat"
-   type="alertmodal">
-Parcels in this estate are allowed to have their own voice channels in which residents may hear and talk with others nearby.
-
-Default: off
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Voice Version Mismatch"
-   name="VoiceVersionMismatch"
-   type="alertmodal">
-This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME].
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Estate Covenant"
-   name="HelpEstateCovenant"
-   type="alertmodal">
-Setting an estate covenant enables you to sell parcels within that estate. If a covenant is not set, you cannot sell the land. The notecard for your covenant can be empty if you do not wish to apply any rules or advise buyers of anything in relation to the land before they buy it.
-
-A covenant can be used to communicate rules, guidelines, cultural information or simply your own expectations to the prospective buyer. This can include zoning, building regulations, payment options or any other information you feel it is important for the new owner to have seen and to have agreed to before they purchase.
-
-The buyer must agree to the covenant by ticking the check box before they will be able to finish the purchase. Estate covenants are always visible in the About Land dialog for any parcels that have one set.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Objects"
-   name="BuyObjectOneOwner"
-   type="alertmodal">
-Cannot buy objects from different owners at the same time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Contents"
-   name="BuyContentsOneOnly"
-   type="alertmodal">
-Unable to buy the contents of more than one object at a time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   label="Can&apos;t Buy Contents"
-   name="BuyContentsOneOwner"
-   type="alertmodal">
-Cannot buy objects from different owners at the same time.
-Please select only one object and try again.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyOriginal"
-   type="alertmodal">
-Buy original object from [OWNER] for L$[PRICE]?
-You will become the owner of this object.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyOriginalNoOwner"
-   type="alertmodal">
-Buy original object for L$[PRICE]?
-You will become the owner of this object.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyCopy"
-   type="alertmodal">
-Buy a copy from [OWNER] for L$[PRICE]?
-The object will be copied to your inventory.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyCopyNoOwner"
-   type="alertmodal">
-Buy a copy for L$[PRICE]?
-The object will be copied to your inventory.
-You will be able to:
- Modify: [MODIFYPERM]
- Copy: [COPYPERM]
- Resell or Give Away: [RESELLPERM]
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyContents"
-   type="alertmodal">
-Buy contents from [OWNER] for L$[PRICE]?
-They will be copied to your inventory.
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="BuyContentsNoOwner"
-   type="alertmodal">
-Buy contents for L$[PRICE]?
-They will be copied to your inventory.
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmPurchase"
-   type="alertmodal">
-This transaction will:
-[ACTION]
-
-Are you sure you want to proceed with this purchase?
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmPurchasePassword"
-   type="password">
-This transaction will:
-[ACTION]
-
-Are you sure you want to proceed with this purchase?
-Please re-enter your password and click OK.
-    <form name="form">
-      <input
-       name="message"
-       type="password"/>
-      <button
-       default="true"
-       index="0"
-       name="ConfirmPurchase"
-       text="OK"/>
-      <button
-       index="1"
-       name="Cancel"
-       text="Cancel"/>
-    </form>
-  </notification>
-
-  <notification
-   icon="alert.tga"
-   name="SetPickLocation"
-   type="alert">
-Note:
-You have updated the location of this pick but the other details will retain their original values.
-    <usetemplate
-     name="okbutton"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="MoveInventoryFromObject"
-   type="alertmodal">
-You have selected &apos;no copy&apos; inventory items.
-These items will be moved to your inventory, not copied.
-
-Move the inventory item(s)?
-    <usetemplate
-     ignoretext="Warn me before I move &apos;no-copy&apos; items from an object"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="MoveInventoryFromScriptedObject"
-   type="alertmodal">
-You have selected &apos;no copy&apos; inventory items.  These items will be moved to your inventory, not copied.
-Because this object is scripted, moving these items to your inventory may cause the script to malfunction.
-
-Move the inventory item(s)?
-    <usetemplate
-     ignoretext="Warn me before I move &apos;no-copy&apos; items which might break a scripted object"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
-  <notification
-   icon="alert.tga"
-   name="ClickActionNotPayable"
-   type="alert">
-Warning: The &apos;Pay object&apos; click action has been set, but it will only work if a script is added with a money() event.
-    <form name="form">
-      <ignore name="ignore"
-       text="I set the action &apos;Pay object&apos; when building an object without a money() script"/>
-    </form>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="OpenObjectCannotCopy"
-   type="alertmodal">
-There are no items in this object that you are allowed to copy.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="WebLaunchAccountHistory"
-   type="alertmodal">
-Go to  your [http://secondlife.com/account/ Dashboard] to see your account history?
-    <usetemplate
-     ignoretext="Launch my browser to see my account history"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go to page"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ClickOpenF1Help"
-   type="alertmodal">
-Do you want to visit [SECOND_LIFE] help?
-    <usetemplate
-     ignoretext="Launch my browser to view Help/Support"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="Go"/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="ConfirmQuit"
-   type="alertmodal">
-Are you sure you want to quit?
-    <usetemplate
-     ignoretext="Confirm before I quit"
-     name="okcancelignore"
-     notext="Don&apos;t Quit"
-     yestext="Quit"/>
-     <unique/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpReportAbuseEmailLL"
-   type="alertmodal">
-Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
-
-All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
-   <unique/>
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpReportAbuseEmailEO"
+   name="HelpReportAbuseEmailEO"
    type="alertmodal">
 IMPORTANT: This report will go to the owner of the region you are currently in and not to Linden Lab.
 
@@ -4499,31 +3988,6 @@ Link to this from a web page to give others easy access to this location, or try
     </form>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="GraphicsPreferencesHelp"
-   type="alertmodal">
-This panel controls window size and resolution and the quality of the client&apos;s graphics.  The Preferences &gt; Graphics interface allows you to choose between four graphics levels: Low, Mid, High, and Ultra. You may also customize your graphics settings by clicking the Advanced button and manipulating the following settings:
-
-Shaders: Enable or disable various types of pixel shaders.
-
-Reflection Detail: Sets the types of objects that water can reflect.
-
-Avatar Rendering: Sets options that affect how the client renders avatars.
-
-Draw Distance: Affects how far out from your viewpoint objects will be rendered in the scene.
-
-Max Particle Count: Sets the maximum number of particles you are able to see on your screen at once.
-
-Post Process Quality: Sets the resolution with which Glow is rendered.
-
-Mesh Detail: Sets the amount of detail or number of triangles used in rendering certain objects. A higher value takes longer to render, but makes these objects appear with more detail.
-
-Lighting Detail: Selects what types of lights you would like to render.
-
-Terrain Detail: Sets the amount of detail you would like to see for the terrain texture.
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="WLSavePresetAlert"
@@ -4571,306 +4035,6 @@ PostProcess Effect exists. Do you still wish overwrite it?
      yestext="Yes"/>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEditSky"
-   type="alertmodal">
-Edit the WindLight sliders to create and save a set of skies.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEditDayCycle"
-   type="alertmodal">
-Set which skies to turn to throughout the day.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="EnvSettingsHelpButton"
-   type="alertmodal">
-These settings adjust the way the environment looks locally on your computer.  Your graphics card needs to support atmospheric shaders in order to have access to all of the settings.
-
-Adjust the &quot;Time of Day&quot; slider to change the day&apos;s phase locally on the viewer.
-
-Adjust the &quot;Cloud Cover&quot; slider to control how much the clouds cover the sky.
-
-Pick a color in the &quot;Water Color&quot; color picker to change the color of the water.
-
-Adjust the &quot;Water Fog&quot; slider to control how dense the fog is underwater.
-
-Click &quot;Use Estate Time&quot; to reset the time of day to the region&apos;s current time of day and remain linked to it.
-
-Click &quot;Advanced Sky&quot; to bring up an editor with more advanced settings for the sky.
-
-Click &quot;Advanced Water&quot; to bring up an editor with more advanced settings for the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDayCycle"
-   type="alertmodal">
-The Day Cycle Editor gives you control over the sky during [SECOND_LIFE]&apos;s day/night cycle. This is the cycle that is used by the Basic Environment Editor&apos;s Time of Day slider.
-
-The Day Cycle Editor works by setting keyframes. These are nodes (represented by the gray blips on the time graph) that have Sky Presets associated with them. As the Time of Day progresses, the WindLight sky &quot;animates&quot; as it interpolates between these keyframes.
-
-The yellow arrow above the timeline represents your current view, based on Time of Day. Click and drag it to see how your day will animate. You may add or delete keyframes by pressing the Add Key and Delete Key buttons to the right of the timeline.
-
-You can set the time position of a keyframe by either dragging it along the timeline, or by setting its value manually in the Key Frame Settings frame. Within the Key Frame Settings frame, you&apos;ll be able to associate the keyframe with its respective WindLight preset.
-
-Length of Cycle dictates the overall duration of a &quot;day&quot;. Setting this to a low value (for instance, 2 min.) will mean your entire 24-hour timeline will animate in only two real minutes! Once you are satisfied with your timeline and keyframe cycle, use the Play and Stop buttons to preview the results. Remember- you can also move the yellow time-indicator arrow above the timeline to see the cycle animate interactively. Using the Use Estate Time button will synchronize your day length and time of day with the Estate&apos;s day cycle.
-
-Once you are pleased with your Day Cycle, you can save and load it with the Save Test Day and Load Test Day buttons. Note that, for now, we only allow one Day Cycle.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpBlueHorizon"
-   type="alertmodal">
-Use the Red/Green/Blue (RGB) sliders to adjust the color of the sky. You can use the Intensity (I) slider to move all three RGB sliders in unison.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpHazeHorizon"
-   type="alertmodal">
-Haze Horizon is one of the most useful parameters for adjusting overall light exposure in the scene.  It is effective for simulating many exposure settings, such as white-outs from the sun and darker, closed-iris settings.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpBlueDensity"
-   type="alertmodal">
-Blue Density affects the overall color saturation of the sky and fog. If you move the Intensity (I) slider to the right, colors will become brighter and more vibrant. If you move it all the way to the left, the colors will become duller, eventually fading to black and white. If you want to fine-tune the sky&apos;s color balance, you can control individual elements of saturation by using the Red/Green/Blue (RGB) sliders.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpHazeDensity"
-   type="alertmodal">
-Haze Density controls the level of dull, gray haze in the atmosphere.  It is effective for simulating scenes with high levels of smoke and man-made pollutants.  It is also effective for simulating fog and mist.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDensityMult"
-   type="alertmodal">
-The Density Multiplier can be used to affect the overall atmospheric density. At lower settings, it creates a feeling of &quot;thin air&quot;, and at higher settings, it creates a very heavy, smoggy effect.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpDistanceMult"
-   type="alertmodal">
-Adjusts WindLight&apos;s perceived distance.  A value of zero effectively turns off WindLight&apos;s influence on terrain and objects.  Values greater than 1 simulate greater distances for thicker atmospheric effects.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpMaxAltitude"
-   type="alertmodal">
-Max Altitude adjusts the altitude calculations WindLight performs when computing its atmospheric lighting.  At later times of day, it is useful for adjusting how &quot;deep&quot; the sunset appears.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunlightColor"
-   type="alertmodal">
-Adjusts the color and intensity of the direct light in the scene.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunAmbient"
-   type="alertmodal">
-Adjusts the color and intensity of ambient atmospheric light in the scene.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSunGlow"
-   type="alertmodal">
-The Size slider controls the size of the sun.
-The Focus slider controls how blurred the sun is over the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpSceneGamma"
-   type="alertmodal">
-Adjust the screen&apos;s distribution of light and dark.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpStarBrightness"
-   type="alertmodal">
-Adjusts the brightness of the stars in the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpTimeOfDay"
-   type="alertmodal">
-Controls the location of the sun in the sky.
-Similar to elevation.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpEastAngle"
-   type="alertmodal">
-Controls the location of the sun in the sky.
-Similar to azimuth.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudColor"
-   type="alertmodal">
-Edits the color of the clouds.  It is generally recommended to keep it whitish, but hey, have fun if you want.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudDetail"
-   type="alertmodal">
-Controls the detail image layered on top of the main cloud image.  X and Y control its position.  D (Density) controls how puffy or fractured the clouds appear.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudDensity"
-   type="alertmodal">
-Allows you to control the position of the clouds with the X and Y sliders and how dense they are with the the D slider.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudCoverage"
-   type="alertmodal">
-Controls how much the clouds cover the sky.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScale"
-   type="alertmodal">
-Controls the scaling of the cloud image on the sky dome.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScrollX"
-   type="alertmodal">
-Controls the speed of the clouds as they move in the X direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpCloudScrollY"
-   type="alertmodal">
-Controls the speed of the clouds as they move in the Y direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpClassicClouds"
-   type="alertmodal">
-Check this box to enable rendering of [SECOND_LIFE]&apos;s older classic clouds in addition to WindLight&apos;s clouds.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFogColor"
-   type="alertmodal">
-Chooses the color of the underwater fog.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFogDensity"
-   type="alertmodal">
-Controls how dense the water fog is and how far you can see underwater.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpUnderWaterFogMod"
-   type="alertmodal">
-Modifies the effect of the Fog Density Exponent to control how far you can see when your avatar is underwater.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterGlow"
-   type="alertmodal">
-Controls how much the surface of the water glows.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterNormalScale"
-   type="alertmodal">
-Controls the scaling of the three wavelets that make up the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFresnelScale"
-   type="alertmodal">
-Controls how much light is reflected at different angles.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterFresnelOffset"
-   type="alertmodal">
-Controls how much light intensity is reflected.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterScaleAbove"
-   type="alertmodal">
-Controls how much light is refracted from looking above the surface of the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterScaleBelow"
-   type="alertmodal">
-Controls how much light is refracted from looking from below the surface of the water.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterBlurMultiplier"
-   type="alertmodal">
-Controls how waves and reflections are mixed.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterNormalMap"
-   type="alertmodal">
-Controls what normal map is layered across the water to determine reflections/refractions.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterWave1"
-   type="alertmodal">
-Controls where and how fast the large scaled version of the normal map moves in the X and Y direction.
-  </notification>
-
-  <notification
-   icon="alertmodal.tga"
-   name="HelpWaterWave2"
-   type="alertmodal">
-Controls where and how fast the the small scaled version of the normal map moves in the X and Y direction.
-  </notification>
-
   <notification
    icon="alert.tga"
    name="NewSkyPreset"
@@ -5618,14 +4782,6 @@ You are banned from the region.
 Your account cannot connect to this teen grid region.
   </notification>
 
-  <notification
-	icon="notify.tga"
-	name="NoHelpIslandTP"
-	type="notify">
-You cannot teleport back to Help Island.
-Go to &apos;Help Island Public&apos; to repeat the tutorial.
-  </notification>
-
   <notification
 	icon="notify.tga"
 	name="ImproperPaymentStatus"
@@ -5826,7 +4982,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="UserGiveItem"
-   type="notify">
+   type="offer">
 [NAME] has given you a [OBJECTTYPE] named &apos;[OBJECTNAME]&apos;.
     <form name="form">
       <button
@@ -5872,7 +5028,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="TeleportOffered"
-   type="notify">
+   type="offer">
 [NAME] has offered to teleport you to their location:
 
 [MESSAGE]
@@ -5909,7 +5065,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="OfferFriendship"
-   type="notify">
+   type="offer">
 [NAME] is offering friendship.
 
 [MESSAGE]
@@ -5949,7 +5105,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a
   <notification
    icon="notify.tga"
    name="FriendshipAccepted"
-   type="notify">
+   type="offer">
 [NAME] accepted your friendship offer.
   </notification>
 
@@ -6513,7 +5669,7 @@ An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_N
    name="ServerVersionChanged"
    priority="high"
    type="notifytip">
-You just entered a region using a different server version, which may affect performance. Click to see the release notes.
+You just entered a region using a different server version, which may affect performance. [[URL] View the release notes.]
   </notification>
 
   <notification
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index f50acc224f053796b42600374bac9757d6fb8425..0246e21d254d83bf6a69e9331c8b07310bb053b4 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- name="panel_im_control_panel"
- width="146"
+ border="false"
  height="215"
- border="false">
+ name="panel_im_control_panel"
+ width="180">
+
     <avatar_list
      color="DkGray2"
      follows="left|top|right|bottom"
@@ -15,24 +16,48 @@
      opaque="false"
      show_info_btn="false"
      show_profile_btn="false"
+     show_speaking_indicator="false"
      top="10"
-     width="140" />
-    <button
-     name="call_btn"
-     label="Call"
-     width="125"
-     height="20" />
-    <button
-     name="end_call_btn"
-     label="End Call"
-     width="125"
-     height="20" 
-     visible="false"/>
-    <button
-     enabled="false"
-     name="voice_ctrls_btn"
-     label="Open Voice Controls"
-     width="125"
-     height="20"
-     visible="false"/>
+     width="180"/>
+
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
+     follows="left|bottom"
+     height="70"
+     left="0"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
+     width="180">
+
+        <button
+         bottom="10"
+         height="20"
+         label="Call"
+         left_delta="28"
+         name="call_btn"
+         width="125"/>
+
+        <button
+         bottom="40"
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
+
+        <button
+         enabled="false"
+         bottom="10"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
+
+    </panel>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index 18761c3bb9ab6d38ad0c652509284b9f4f1d17ca..0c426865310df0ffdd978d7a716d7f296ec42cc1 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -76,7 +76,6 @@
      left_pad="3"
      right="-31"
      name="info_btn"
-     picture_style="true"
      top_delta="-2"
      width="16" />
     <button
@@ -87,7 +86,6 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
index e4f6e7bd44e8068740a5e5bd7bba91ec1943c435..16c8660781ecdd01fa9d53b1078b8afb9726cd6f 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
@@ -55,7 +55,6 @@
      top="65" 
      left="10" 
      right="-10" 
-     can_resize="true"
      height="100" 
      follows="left|top|bottom|right"
      font="SansSerifSmall" 
diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml
index 9c06329eaff14fe0e37a504a42d6218562e0bb1c..527ec4e007ffca4740d1e7f20980d5c58246d652 100644
--- a/indra/newview/skins/default/xui/en/panel_bars.xml
+++ b/indra/newview/skins/default/xui/en/panel_bars.xml
@@ -5,65 +5,14 @@
  layout="topleft"
  left="0"
  mouse_opaque="false"
- name="bottom_panel"
+ name="screen"
  width="1024">
-    <panel
-     follows="left|right|top|bottom"
-     height="728"
-     layout="topleft"
-     left="0"
-     mouse_opaque="false"
-     name="status"
-     top="0"
-     width="1024" />
-    <layout_stack
-     border_size="0"
-     follows="left|right|bottom|top"
-     height="768"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="bar_stack"
-     top_delta="0"
-     use_bounding_rect="true"
-     width="1024">
-        <layout_panel
-         follows="left|right|top|bottom"
-         height="768"
-         layout="topleft"
-         left="0"
-         mouse_opaque="false"
-         name="spacer"
-         top="0"
-         user_resize="false"
-         width="1024" />
-        <layout_panel
-         auto_resize="false"
-         height="200"
-         layout="topleft"
-         min_height="200"
-         mouse_opaque="false"
-         name="overlay"
-         use_bounding_rect="true"
-         user_resize="false"
-         width="1024" />
-        <layout_panel
-         auto_resize="false"
-         filename="panel_toolbar.xml"
-         layout="topleft"
-         min_height="28"
-         name="toolbar"
-         use_bounding_rect="true"
-         user_resize="false"
-         width="1024" />
+  <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0">
+    <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/>
+    <panel auto_resize="false" width="1024" height="65" name="navigation bar" filename="panel_navigation_bar.xml"/>
+    <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all">
+      <panel auto_resize="true" name="floater_view" height="500"/>
+      <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/>
     </layout_stack>
-    <panel
-     follows="left|right|top|bottom"
-     height="728"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="hud"
-     top_delta="-10"
-     width="1024" />
+  </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 9bf3458d298d275e7a88fbe62b7c5195cb647667..3fbc8e1afd82045bcd93b1397e449a012bc1a517 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -10,7 +10,7 @@
  left="0"
  name="bottom_tray"
  top="28"
- chrome="true" 
+ chrome="true"
  border_visible="false"
  width="1000">
     <layout_stack
@@ -31,6 +31,7 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
+         min_width="4"
          left="0"
          top="0"
          width="4" />
@@ -44,10 +45,10 @@
          min_height="23"
          width="310"
          top="0"
-         min_width="300"
+         min_width="310"
          name="chat_bar"
          user_resize="false"
-         filename="panel_nearby_chat_bar.xml"/>
+         filename="panel_nearby_chat_bar.xml" />
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -55,33 +56,35 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="96"
+         width="104"
          top_delta="0"
-         min_width="96"
+         min_width="104"
          name="speak_panel"
          user_resize="false">
-		    <chiclet_talk
-		     follows="right"
-		     height="23"
-		     speak_button.font="SansSerifMedium"
-		     speak_button.tab_stop="true"
-		     show_button.tab_stop="true"
-		     layout="topleft"
-		     left="0"
-		     name="talk"
-		     top="3"
-		     width="96" />
-         </layout_panel>
-		 <icon
-         auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
-         name="DUMMY"
-         top="0"
-         width="4"/>
+          <talk_button
+           follows="right"
+           height="23"
+           speak_button.tab_stop="true"
+           show_button.tab_stop="true"
+           layout="topleft"
+           left="0"
+           name="talk"
+           top="3"
+          width="100"
+          speak_button.tool_tip="Turns microphone on/off"
+          show_button.tool_tip="Shows/hides voice control panel" />
+        </layout_panel>
+        <icon
+            auto_resize="false"
+            follows="left|right"
+            height="10"
+            image_name="spacer24.tga"
+            layout="topleft"
+            left="0"
+            name="DUMMY"
+            min_width="4"
+            top="0"
+            width="4"/>
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -89,21 +92,22 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="76"
+         width="80"
          top_delta="0"
          min_width="76"
          name="gesture_panel"
          user_resize="false">
-		    <gesture_combo_box
-		      follows="right"
-		     height="23"
-		     label="Gesture"
-		     layout="topleft"
-		     name="Gesture"
-		     left="0"
-		     top="3"
-             use_ellipses="true"
-		     width="76" />
+         <button
+           follows="right"
+          height="23"
+          label="Gesture"
+          layout="topleft"
+          name="Gesture"
+          left="0"
+          top="3"
+         use_ellipses="true"
+          width="80"
+          tool_tip="Shows/hides gestures"/>
         </layout_panel>
 		 <icon
          auto_resize="false"
@@ -113,6 +117,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -124,7 +129,7 @@
          layout="topleft"
          min_height="28"
          name="movement_panel"
-         width="76"
+         width="80"
          min_width="76">
             <button
              follows="left|right"
@@ -134,9 +139,9 @@
              label="Move"
              layout="topleft"
              name="movement_btn"
-             tool_tip="Show/hide movement controls"
+             tool_tip="Shows/hides movement controls"
              top="3"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="moveview" />
@@ -150,6 +155,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -172,10 +178,10 @@
              label="View"
              layout="topleft"
              left="0"
-             tool_tip="Show/hide camera controls"
+             tool_tip="Shows/hides camera controls"
              top="3"
              name="camera_btn"
-             width="76">
+             width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="camera" />
@@ -189,6 +195,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          name="DUMMY"
          top="0"
          width="4"/>
@@ -199,28 +206,19 @@
          height="28"
          layout="topleft"
          name="snapshot_panel"
-         width="35">
-            <split_button
-             arrow_position="right"
+         width="40">
+            <button
          follows="left|right"
              height="23"
              left="0"
+             label=""
              layout="topleft"
              name="snapshots"
-             width="46"
-             top="3">
-                <split_button.item
-                 image_overlay="Snapshot_Off"
-                 name="snapshot"
-                 tool_tip="Take snapshot"
-                 />
-                <split_button.arrow_button
-                 name="snapshot_settings"
-                 image_overlay="Widget_UpArrow"
-                 tool_tip="Snapshot and Preset Views"
-                 width="18"
+             width="36"
+             top="3"
+             image_overlay="Snapshot_Off"
+            tool_tip="Take snapshot"
                  />
-            </split_button>
         </layout_panel>
         <layout_panel
          mouse_opaque="false"
@@ -253,6 +251,7 @@
          image_name="spacer24.tga"
          layout="topleft"
          left="0"
+         min_width="4" 
          top="0"
          width="5"/>
         <layout_panel
@@ -268,11 +267,11 @@
          user_resize="false">
             <chiclet_notification
              follows="right"
-             height="25"
+             height="23"
              layout="topleft"
              left="0"
              name="sys_well"
-             top="3"
+             top="4"
              width="34">
               <button
               auto_resize="true"
@@ -281,8 +280,9 @@
                follows="right"
                flash_color="EmphasisColor"
                name="Unread"
-               picture_style="true"
-               image_overlay="Widget_UpArrow" />
+               image_overlay="Notices_Unread"
+               width="20"
+               />
                <unread_notifications
                width="34"
                height="23"
@@ -297,8 +297,9 @@
          height="10"
          image_name="spacer24.tga"
          layout="topleft"
-         left="0"
+         min_width="4" 
+         right="-1"
          top="0"
-         width="10"/>
+         width="26"/>
     </layout_stack>
-</panel>
\ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index a9f622e018324fbd9cb855a1342f8fbf073dbb97..64519b2571543aabb8d9d9134471b171009de1c2 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -1,53 +1,44 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
+ background_visible="true"
+ bevel_style="in"
+ bg_alpha_color="black"
  follows="left|top|right"
- height="57"
- label="im_header_container"
+ height="20"
+ label="im_header"
  layout="topleft"
- left="8"
- name="im_header_container">
-    <panel
-     background_visible="true"
-     bevel_style="in"
-     bg_alpha_color="black"
-     follows="left|top|right"
-     height="30"
-     label="im_header"
+ name="im_header" >
+    <avatar_icon
+     follows="left"
+     height="16"
+     image_name="icon_avatar_online.tga"
      layout="topleft"
-     name="im_header"
-     top_pad="17">
-        <avatar_icon
-         follows="left"
-         height="20"
-         image_name="icon_avatar_online.tga"
-         layout="topleft"
-         left="5"
-         mouse_opaque="true"
-         name="avatar_icon"
-         top="5"
-         width="20" />
-        <text
-         follows="left|right"
-         font="SansSerifBigBold"
-         height="20"
-         layout="topleft"
-         left_pad="10"
-         right="-50"
-         name="user_name"
-         text_color="white"
-         top="5"
-         value="Darth Vader"
-         use_ellipses="true" />
-        <text
-         follows="right"
-         font="SansSerifBig"
-         height="20"
-         layout="topleft"
-         name="time_box"
-         right="0"
-         text_color="white"
-         top="5"
-         value="23:30"
-         width="50" />
-    </panel>
+     left="2"
+     mouse_opaque="true"
+     name="avatar_icon"
+     top="2"
+     width="16" />
+    <text
+     follows="left|right"
+     font="SansSerifBigBold"
+     height="20"
+     layout="topleft"
+     left_pad="6"
+     right="-50"
+     name="user_name"
+     text_color="white"
+     top="3"
+     value="Darth Vader"
+     use_ellipses="true" />
+    <text
+     follows="right"
+     font="SansSerifBig"
+     height="20"
+     layout="topleft"
+     name="time_box"
+     right="0"
+     text_color="white"
+     top="3"
+     value="23:30"
+     width="50" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
index bacc750e863cb7f441efc616b12029a9ac807323..d0a2ddb28913f77d21ebebc5ef57b06fddc097e6 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_separator.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
@@ -1,16 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
+ background_visible="true"
+ bg_alpha_color="black"
  follows="left|right|top"
- height="9"
+ height="1"
  layout="topleft"
- left="8"
- name="chat_separator_container">
-    <panel
-     background_visible="true"
-     bg_alpha_color="black"
-     follows="left|right|top"
-     height="1"
-     layout="topleft"
-     name="chat_separator_panel"
-     top_pad="3" />
-</panel>
+ name="chat_separator_panel" />
diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
index 9789da579606e77a1b8357ac2da099024d40ebea..c514054c41c08458d9d7f1ef50a7fd81f18f80ad 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
@@ -37,13 +37,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="eyes_main_tab"
 			title="Eyes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="eyes_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
index 517cdd75fb989354704c18355056d1aea144e3a2..f9ef038314d10abd775f5c659cd820cf0e4d9a61 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="gloves_main_tab"
 			title="Gloves">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="gloves_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
index d2ee2ebf2af3d4f9205199b1c5dce0568498d358..e7d1c0530168539d0f68d5e2eb18f1d28c7a6bbb 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_hair.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
@@ -37,13 +37,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_color_tab"
 			title="Color">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_color_param_list"
@@ -51,13 +49,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_style_tab"
 			title="Style">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_style_param_list"
@@ -65,13 +61,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_eyebrows_tab"
 			title="Eyebrows">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_eyebrows_param_list"
@@ -79,13 +73,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="hair_facial_tab"
 			title="Facial">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="hair_facial_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
index 0b54944e290aebc9c3d1309a24410f92104e9c87..f4c03399fe8ceb76b4a8f06a71e16e42ef9b0bfb 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
@@ -61,13 +61,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="jacket_main_tab"
 			title="Jacket">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="jacket_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
index 939314f9f9a6682bb29daca425e8836baa263fa3..ab105afd88e088402991e8f66c10bb444da148e3 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="pants_main_tab"
 			title="Pants">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="pants_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index bac6f6e4d1b144bbde5f2128fcebcb034894f88b..f4a212ba0a6def2276b0f6fae7922b8e6139f86e 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -17,7 +17,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
@@ -65,9 +64,9 @@
      top="20"
      left="10"
      name="pick_snapshot" />
-          <button
+          <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            right="-5"
            name="edit_icon"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index fedc49ae87b4744ac6576308a4f12cc776bb7a03..2378ae518bf9dbd583d969613fd4c0dca6443fcd 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -116,9 +116,9 @@
              top_pad="0"
              width="102" />
           </panel>
-           <button
+           <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            name="2nd_life_edit_icon"
            label=""
@@ -171,9 +171,9 @@
              top_pad="0"
              width="102" />
           </panel>
-           <button
+           <icon
            height="18"
-           image_overlay="AddItem_Off"
+           image_name="AddItem_Off"
            layout="topleft"
            name="real_world_edit_icon"
            label=""
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
index a9dfcb82d69097fd28289ffd54d21e8d6d3f1db9..45c4b92338252e39826b08afee770f11cb5a822a 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
@@ -59,13 +59,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_body_tab"
 			title="Body">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_body_param_list"
@@ -73,13 +71,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_head_tab"
 			title="Head">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_head_param_list"
@@ -87,13 +83,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_eyes_tab"
 			title="Eyes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_eyes_param_list"
@@ -101,13 +95,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_ears_tab"
 			title="Ears">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_ears_param_list"
@@ -115,13 +107,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_nose_tab"
 			title="Nose">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_nose_param_list"
@@ -129,13 +119,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_mouth_tab"
 			title="Mouth">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_mouth_param_list"
@@ -143,13 +131,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_chin_tab"
 			title="Chin">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_chin_param_list"
@@ -157,13 +143,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_torso_tab"
 			title="Torso">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_torso_param_list"
@@ -171,13 +155,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shape_legs_tab"
 			title="Legs">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shape_legs_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
index 258ee06697e95f0d96b8557d0c4476e4aac65426..9a13dfa3c4504a29a9fb57f7730067d53dc617da 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shirt_main_tab"
 			title="Shirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
index 22fced4aac7af04af8c46ceb655226aa14a3cd39..154b9d959c9786dc6452f9971e1e8c2276be9dd5 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="shoes_main_tab"
 			title="Shoes">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="shoes_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
index 1a00277f43296a80610e10847c853f5bf5405db6..918606b54cad0e982518d529be113975c6fce8f7 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
@@ -64,13 +64,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_color_tab"
 			title="Skin Color">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_color_param_list"
@@ -78,13 +76,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_face_tab"
 			title="Face Detail">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_face_param_list"
@@ -92,13 +88,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_makeup_tab"
 			title="Makeup">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_makeup_param_list"
@@ -106,13 +100,11 @@
 				width="303" />
 		</accordion_tab>
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skin_body_tab"
 			title="Body Detail">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skin_body_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
index 411d4336041a3e3ffc75219a2cefadd24d228c9e..d0f4d75444282593eaf2734611bd53e1d65654ec 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="skirt_main_tab"
 			title="Skirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="skirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
index faff67795c598d79e1d0809b063da9d778c44c1b..acc6d482a7dae0c97b27b7ba0cc622c19a2109bd 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="socks_main_tab"
 			title="Socks">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="socks_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
index bb0b353a0127005eb15c48662a5c55f47a5da477..4f5c1c08b71d8306b906af99e9f33218a0077713 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="underpants_main_tab"
 			title="Underpants">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="underpants_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
index 097cb14ee6c81710c2a1f9de214c137b54efc8c4..715674e88ba12b11ef9bedda2173592978a2b83b 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
@@ -49,13 +49,11 @@
 		top_pad="10"
 		width="303">
 		<accordion_tab
-			can_resize="false"
 			layout="topleft"
 			min_height="150"
 			name="undershirt_main_tab"
 			title="Undershirt">
 			<scrolling_panel_list
-				draw_heading="false"
 				follows="all"
 				left="0"
 				name="undershirt_main_param_list"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 77b887de9ba6b49b0a43d4fcd7c1b7fb0c291db6..f76a56bda49e369534b1901a329ec5477b77c62c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -137,7 +137,6 @@ left="0"
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      top="7" />
 	<text
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 9ed510dff3e1feeed5f2a99f428c6529ffdc0b13..763dd7b922055ac2aa41c6bebc22e829e836cc65 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- name="panel_im_control_panel"
- width="146"
+ border="false"
  height="238"
- border="false">
+ name="panel_im_control_panel"
+ width="180">
+
     <avatar_list
      color="DkGray2"
      follows="left|top|right|bottom"
@@ -15,30 +16,56 @@
      opaque="false"
      show_info_btn="false"
      show_profile_btn="false"
+     show_speaking_indicator="false"
      top="10"
-     width="140" />
-    <button
-     name="group_info_btn"
-     label="Group Info"
-     left_delta="3"
-     width="125"
-     height="20" />
+     width="180"/>
+
     <button
-     name="call_btn"
-     label="Call"
-     width="125"
-     height="20" />
-    <button
-     name="end_call_btn"
-     label="End Call"
-     width="125"
-     height="20" 
-     visible="false"/>
-    <button
-	 enabled="false"
-     name="voice_ctrls_btn"
-     label="Open Voice Controls"
-     width="125"
+     bottom_pad="0"
      height="20"
-     visible="false"/>
+     label="Group Info"
+     left_delta="28"
+     name="group_info_btn"
+     width="125"/>
+
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
+     follows="left|bottom"
+     height="70"
+     left="0"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
+     width="180">
+
+        <button
+         bottom="10"
+         height="20"
+         label="Call Group"
+         left_delta="28"
+         name="call_btn"
+         width="125"/>
+
+        <button
+         bottom="40"
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
+
+        <button
+         enabled="false"
+         bottom="10"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
+
+    </panel>
+
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index a85c55f9b2ca54c83e510715402c11da7582e0da..4f24c7a745b62232b734cb28ccdf2319fcc8505a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  follows="all"
- height="412"
+     height="380"
  label="General"
  class="panel_group_general"
  layout="topleft"
  left="0"
  top="0"
  name="general_tab"
- width="313">
+ width="303">
     <panel.string
      name="help_text">
         The General tab contains general information about this group, a list of members, general Group Preferences and member options.
@@ -41,7 +41,7 @@ Hover your mouse over the options for more help.
      draw_heading="true"
      follows="left|top"
      heading_height="16"
-     height="160"
+     height="130"
      layout="topleft"
      left_delta="0"
      name="visible_members"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index d8d47c40084940d6390abfcb49aa9aab3b9ceb3d..de1323d9cb51dee368e5d5a0178cba375c61b462 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -5,7 +5,7 @@ background_visible="true"
  height="570"
  label="Group Info"
  layout="topleft"
- min_height="350"
+ min_height="425"
  left="0"
  top="20"
  name="GroupInfo"
@@ -32,7 +32,6 @@ background_visible="true"
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
@@ -47,7 +46,7 @@ background_visible="true"
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="300" />
     <line_editor
      follows="left|top"
@@ -60,7 +59,7 @@ background_visible="true"
      top_delta="5"
      width="250"
      height="20"
-     visible="true" />
+     visible="false" />
     <texture_picker
      follows="left|top"
      height="113"
@@ -112,114 +111,163 @@ background_visible="true"
      left_delta="0"
      top_pad="6"
      height="23"
-     label="Join now!"
-     label_selected="Join now!"
+     label="JOIN NOW!"
      name="btn_join"
      visible="true"
      width="120" />
    <accordion
              follows="all"
-             height="405"
+             height="425"
              layout="topleft"
              left="0"
              name="groups_accordion"
-             top_pad="20"
-             width="333">
+             top_pad="15"
+             width="336">
              <accordion_tab
-                 can_resize="false"
+                 expanded="true"
                  layout="topleft"
-                 name="tab_general"
+                 name="group_general_tab"
                  title="General">
-        <panel
-        border="false"
-         filename="panel_group_general.xml"
+         <scroll_container
+         color="DkGray2"
+         opaque="true"
+         height="323"
+         follows="all"
          layout="topleft"
          left="0"
-         help_topic="group_general_tab"
-         name="general_tab"
          top="0"
-         width="333" />
+         name="general_scroll"
+         reserve_scroll_corner="false"
+         width="333">
+            <panel
+            border="false"
+         class="panel_group_general" 
+             filename="panel_group_general.xml"
+             layout="topleft"
+             left="0"
+             help_topic="group_general_tab"
+         name="group_general_tab_panel"
+             top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
-                 can_resize="false"
                  expanded="false"
                  layout="topleft"
-                 name="tab_roles"
+                 name="group_roles_tab"
                  title="Roles">
-        <panel
-        border="false"
-         filename="panel_group_roles.xml"
-         layout="topleft"
-         left="0"
-         help_topic="group_roles_tab"
-         name="roles_tab"
-         top="0"
-         width="333" />
+               <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="roles_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
+                 <panel
+                 border="false"
+         class="panel_group_roles"
+                  filename="panel_group_roles.xml"
+                  layout="topleft"
+                  left="0"
+                  help_topic="group_roles_tab"
+         name="group_roles_tab_panel"
+                  top="0"
+             width="303" />
+         </scroll_container>
          </accordion_tab>
          <accordion_tab
-                 can_resize="false"
                  expanded="false"
                  layout="topleft"
-                 name="tab_notices"
+                 name="group_notices_tab"
                  title="Notices">
+            <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="notices_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
+        border="false"
+         class="panel_group_notices"
          filename="panel_group_notices.xml"
          layout="topleft"
          left="0"
          help_topic="group_notices_tab"
-         name="notices_tab"
+         name="group_notices_tab_panel"
          top="0"
-         width="333" />
+         width="303" />
+         </scroll_container>
          </accordion_tab>
-                  <accordion_tab
-                 can_resize="false"
+        <accordion_tab
                  expanded="false"
                  layout="topleft"
-                 name="tab_notices"
+                 name="group_land_tab"
                  title="Land/Assets">
+           <scroll_container
+                  color="DkGray2"
+                  opaque="true"
+                  height="323"
+                  follows="all"
+                  layout="topleft"
+                  left="0"
+                  top="0"
+                  name="land_scroll"
+                  reserve_scroll_corner="false"
+                  width="333">
         <panel
         border="false"
+         class="panel_group_land_money"
          filename="panel_group_land_money.xml"
          layout="topleft"
          left="0"
          help_topic="group_land_money_tab"
-         name="land_money_tab"
+         name="group_land_tab_panel"
          top="0"
-         width="333" />
+         width="313" />
+         </scroll_container>
          </accordion_tab>
          </accordion>
-    <button
+   <button
      follows="top|left"
-     height="20"
+     height="22"
      image_overlay="Refresh_Off"
      layout="topleft"
-     name="btn_refresh"
-     picture_style="true"
      left="5"
-     width="20" />
-     <button
-     height="20"
-     font="SansSerifSmall"
-     label="Save"
-     label_selected="Save"
-     name="btn_apply"
-     left_pad="5"
-     width="65" />
-    <button
+     name="btn_refresh"
+     top_pad="-15"
+     width="23" />
+         <button
      height="20"
      label="Create"
-     label_selected="Create"
+     label_selected="New group"
      name="btn_create"
-     left_pad="5"
+     left_pad="10"
      visible="false"
-     width="65" />
-    <button
-     left_pad="5"
+     width="100" />
+   <!-- <button
+     left_pad="10"
      height="20"
      label="Cancel"
      label_selected="Cancel"
      name="btn_cancel"
      visible="false"
+     width="65" />-->
+     <button
+     height="20"
+     font="SansSerifSmall"
+     label="Save"
+     label_selected="Save"
+     name="btn_apply"
+     left_pad="10"
+     right="-10"
      width="65" />
-
 </panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 04e0ad3be8a3d3b94bfcaeb09b66d0974b45b32f..0c6f81f8fd892ea9f8681e4638237822b5caafbf 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -1,25 +1,25 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
+ border="false"
  follows="all"
  height="510"
  label="Land &amp; L$"
  layout="topleft"
  left="1"
  name="land_money_tab"
- top="490"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
-        Parcels owned by the group are listed along with contribution details. A warning appears until the Total Land in Use is less than or equal to the Total Contribution. The Planning, Details, and Sales tabs provide information about the group&apos;s finances.
+        Parcels owned by a group are listed along with contribution details. A warning appears until the Total Land in Use is less than or = to the Total Contribution.
     </panel.string>
     <panel.string
      name="cant_view_group_land_text">
-        You do not have permission to view group owned land.
+        You don&apos;t have permission to view group owned land
     </panel.string>
     <panel.string
      name="cant_view_group_accounting_text">
-        You do not have permission to view the group&apos;s accounting information.
+        You don&apos;t have permission to view the group&apos;s accounting information.
     </panel.string>
     <panel.string
      name="loading_txt">
@@ -27,19 +27,8 @@
     </panel.string>
     <panel.string
      name="land_contrib_error">
-        Unable to set your land contribution.
+        Unable to set your land contribution
     </panel.string>
-    <!--
-    <button
-      follows="left|top"
-     height="16"
-     label="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" />
-    -->
    <!-- <text
      type="string"
      follows="left|top"
@@ -55,29 +44,29 @@
     <scroll_list
      draw_heading="true"
      follows="top"
-     heading_height="14"
-     height="100"
+     heading_height="20"
+     height="150"
      layout="topleft"
-     left="5"
+     left="0"
      name="group_parcel_list"
-     top_pad="10"
-     width="265">
+     top_pad="0"
+     width="313">
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="67" />
+         width="78" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="72" />
+         width="78" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="60" />
+         width="70" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="20" />
+         width="50" />
         <scroll_list.columns
          label=""
          name="hidden"
@@ -85,14 +74,14 @@
     </scroll_list>
     <button
      follows="top"
-     height="20"
+     height="23"
      label="Map"
      label_selected="Map"
      layout="topleft"
-     left="150"
      name="map_button"
-     top_pad="10"
-     width="125"
+     right="-10"
+     top_pad="5"
+     width="95"
      enabled="false" />
     <text
      type="string"
@@ -102,11 +91,12 @@
      layout="topleft"
      left="5"
      name="total_contributed_land_label"
-     top_pad="10"
+     top_pad="0"
      width="130">
         Total Contribution:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -130,6 +120,7 @@
         Total Land In Use:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -153,6 +144,7 @@
         Land Available:
     </text>
     <text
+    text_color="EmphasisColor"
      type="string"
      follows="left|top"
      height="16"
@@ -179,19 +171,19 @@
      border_style="line"
      border_thickness="1"
      follows="left|top"
-     height="16"
+     height="19"
      layout="topleft"
      left_pad="5"
      max_length="10"
      name="your_contribution_line_editor"
-     top_delta="-2"
+     top_delta="0"
      width="95" />
     <text
      type="string"
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="5"
+     left_pad="3"
      name="your_contribution_units"
      top_delta="2">
         m²
@@ -204,13 +196,13 @@
      layout="topleft"
      left="140"
      name="your_contribution_max_value"
-     top_pad="0"
+     top_pad="2"
      width="95">
         ([AMOUNT] max)
     </text>
     <icon
      height="16"
-     image_name="smicon_warn.tga"
+     image_name="notify_next"
      layout="topleft"
      left="9"
      name="group_over_limit_icon"
@@ -222,14 +214,14 @@
      type="string"
      word_wrap="true"
      font="SansSerifSmall"
-     height="40"
+     height="35"
      layout="topleft"
-     left_pad="5"
+     left_pad="0"
      name="group_over_limit_text"
-     text_color="GroupOverTierColor"
+     text_color="EmphasisColor"
      top_delta="0"
-     width="250">
-        Group members must contribute more land credits to support land in use.
+     width="290">
+        Group members must contribute more land credits to support land in use
     </text>
     <text
      type="string"
@@ -253,128 +245,122 @@
      name="group_money_tab_container"
      tab_position="top"
      tab_height="20"
-     top_pad="10"
-     width="265">
+     top_pad="2"
+     tab_min_width="70"
+     width="300">
         <panel
-         border="true"
+         border="false"
          follows="all"
          height="180"
-         label="Planning"
+         label="PLANNING"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="group_money_planning_tab"
          name="group_money_planning_tab"
          top="5"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
-             height="168"
+             font="SansSerif"
+             height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_planning_text"
-             top="5"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Details"
+         label="DETAILS"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="group_money_details_tab"
          name="group_money_details_tab"
-         top_delta="0"
-         width="265">
+         top="5"
+         width="300">
           <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_details_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-          <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_details_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
             <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
-             name="later_details_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_details_button"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
+       name="later_details_button"
+	     tool_tip="Next"
+	     width="31" />
         </panel>
       <panel
-         border="true"
-         follows="left|top|right|bottom"
+         border="false"
+         follows="all"
          height="180"
-         label="Sales"
+         label="SALES"
          layout="topleft"
          left_delta="0"
          help_topic="group_money_sales_tab"
          name="group_money_sales_tab"
          top_delta="-1"
-         width="265">
+         width="300">
             <text_editor
              type="string"
-             bg_readonly_color="0.784314 0.819608 0.8 1"
              follows="all"
-             font="Monospace"
              height="140"
              layout="topleft"
-             left="8"
+             left="0"
              max_length="4096"
              name="group_money_sales_text"
-             top="7"
-             width="250"
+             top="0"
+             width="300"
              word_wrap="true">
-                Computing...
+                Loading...
             </text_editor>
-            <button
-             height="20"
-             label="&lt; Earlier"
-             label_selected="&lt; Earlier"
-             layout="topleft"
-             left="5"
-             name="earlier_sales_button"
-             tool_tip="Go back in time"
-             top_pad="10"
-             width="125" />
-            <button
-             height="20"
-             label="Later &gt;"
-             label_selected="Later &gt;"
-             layout="topleft"
-             left_pad="5"
+                         <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Left_Off"
+	     layout="topleft"
+	     name="earlier_sales_button"
+	     tool_tip="Back"
+	     top_pad="3"
+             right="-35"
+	     width="31" />
+             <button
+	     follows="left|top"
+	     height="23"
+	     image_overlay="Arrow_Right_Off"
+	     layout="topleft"
+	     left_pad="10"
              name="later_sales_button"
-             tool_tip="Go forward in time"
-             top_delta="0"
-             width="125" />
+	     tool_tip="Next"
+	     width="31" />
         </panel>
     </tab_container>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
index ffa485051c7b91c7a68d3e71d81afbe854fdd7f2..5f6b911620f353e88682f98c794247b7147611c2 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
@@ -54,7 +54,6 @@
      left_pad="3"
      right="-31"
      name="info_btn"
-     picture_style="true"
      top_delta="-2"
      width="16" />
    <!--*TODO: Should only appear on rollover-->
@@ -66,7 +65,6 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index d9fb962998246cfac15a5d5cb18205a41e40cc0b..24a4005a4595c256e6bc54678076e7648cd92372 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -1,14 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- border="true"
  follows="all"
  height="485"
  label="Notices"
  layout="topleft"
- left="1"
+ left="0"
  name="notices_tab"
- top="485"
- width="280">
+ top="0"
+ width="313">
     <panel.string
      name="help_text">
         Notices are a quick way to communicate across a 
@@ -20,70 +19,48 @@ the General tab.
     </panel.string>
     <panel.string
      name="no_notices_text">
-        There are no past notices.
+        There are no past notices
     </panel.string>
-   <!-- <button
-      follows="left|top"
-     height="16"
-     label="?"
-     label_selected="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" /> -->
-     <!--<text
-      follows="left|top"
-     type="string"
-     font="SansSerifBig"
-     height="16"
-     layout="topleft"
-     left="10"
-     name="lbl"
-     top_pad="10"
-     width="269">
-        Group Notices Archive
-    </text> -->
     <text
       follows="left|top"
      type="string"
      word_wrap="true"
-     height="40"
+     height="30"
      layout="topleft"
-     left_delta="10"
+     left="10"
      name="lbl2"
-     text_color="EmphasisColor"
-     top_pad="10"
-     width="270">
-        Notices are kept for 14 days. Notice lists are limited to 200 notices per group on a daily basis.
+     top="5"
+     width="300">
+     Notices are kept for 14 days
+Groups are limited to 200 notices/group daily
     </text>
     <scroll_list
       follows="left|top"
      column_padding="0"
      draw_heading="true"
-     heading_height="14"
-     height="109"
+     heading_height="16"
+     height="125"
      layout="topleft"
-     left_delta="0"
+     left="0"
      name="notice_list"
      top_pad="0"
-     width="265">
+     width="303">
         <scroll_list.columns
          label=""
          name="icon"
-         width="16" />
+         width="20" />
         <scroll_list.columns
          label="Subject"
          name="subject"
-         width="100" />
+         width="125" />
         <scroll_list.columns
          label="From"
          name="from"
-         width="83" />
+         width="90" />
         <scroll_list.columns
          label="Date"
          name="date"
-         width="50" />
+         width="30" />
         <scroll_list.columns
          name="sort"
          width="-1" />
@@ -94,39 +71,40 @@ the General tab.
      layout="topleft"
      name="notice_list_none_found"
      visible="false">
-        None found.
+        None found
     </text>
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="New Notice"
-     label_selected="Create New Notice"
+         <button
+       follows="bottom|left"
+       height="18"
+       image_selected="AddItem_Press"
+       image_unselected="AddItem_Off"
+       image_disabled="AddItem_Disabled"
+       layout="topleft"
+       label="Create a new notice"
+       left="15"
+       name="create_new_notice"
+       tool_tip="Create a new notice"
+     top_delta="-5"
+       width="18" />
+     <button
+     follows="top|left"
+     height="22"
+     image_overlay="Refresh_Off"
      layout="topleft"
-     left_delta="0"
-     name="create_new_notice"
-     top_delta="4"
-     width="125" />
-    <button
-      follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="Refresh"
-     label_selected="Refresh List"
-     layout="topleft"
-     left_pad="12"
      name="refresh_notices"
-     top_delta="0"
-     width="125" />
+     right="-5"
+     top_delta="5"
+     width="23" />
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="Create New Notice"
      layout="topleft"
      left="0"
-     name="panel_create_new_notice"
      top_pad="10"
-     width="265">
+     visible="false"
+     name="panel_create_new_notice"
+     width="303">
         <text
          follows="left|top"
          type="string"
@@ -137,30 +115,16 @@ the General tab.
          mouse_opaque="false"
          name="lbl"
          text_color="EmphasisColor"
-         top_pad="0"
-         width="265">
+         top="0"
+         width="200">
             Create a Notice
         </text>
-        <text
-         follows="left|top"
-         type="string"
-         word_wrap="true"
-         height="90"
-         layout="topleft"
-         left_delta="0"
-         name="lbl2"
-         text_color="EmphasisColor"
-         top_pad="4"
-         width="195">
-            You can add a single item to a notice by dragging it from your inventory to this panel. Attached items must be copiable and transferrable, and you can&apos;t send a folder.
-        </text>
         <text
          follows="left|top"
          type="string"
          halign="left"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="lbl3"
          top_pad="10"
          width="60">
@@ -174,8 +138,7 @@ the General tab.
          left_pad="3"
          max_length="63"
          name="create_subject"
-         top_delta="-1"
-         width="200" />
+         width="220" />
         <text
          follows="left|top"
          type="string"
@@ -184,106 +147,100 @@ the General tab.
          layout="topleft"
          left="10"
          name="lbl4"
-         top_pad="10"
+         top_pad="5"
          width="60">
             Message:
         </text>
         <text_editor
-         height="75"
+         height="90"
          layout="topleft"
          left_pad="3"
          max_length="511"
          name="create_message"
          top_delta="0"
-         width="200"
+         width="220"
          word_wrap="true" />
         <text
          follows="left|top"
          type="string"
          halign="left"
-         height="16"
+         height="14"
          layout="topleft"
          left="10"
          name="lbl5"
-         top_pad="10"
-         width="60">
+         width="200">
             Attach:
         </text>
         <line_editor
          enabled="false"
-         height="16"
+         height="19"
          layout="topleft"
-         left_pad="3"
-         max_length="63"
+         max_length="90"
          mouse_opaque="false"
          name="create_inventory_name"
-         top_delta="0"
-         width="200" />
+         top_pad="2"
+         width="285" />
+        <text
+        text_color="EmphasisColor"
+         follows="left|top"
+         type="string"
+         halign="right"
+         height="34"
+         layout="topleft"
+         left="10"
+         name="string"
+         top_pad="15"
+         word_wrap="true"
+         width="150">
+            Drag here to attach something -- >
+        </text>
         <icon
-         height="16"
+         height="72"
+         image_name="DropTarget"
          layout="topleft"
-         left_delta="0"
-         name="create_inv_icon"
-         top_delta="0"
-         width="16" />
+         left_pad="10"
+         mouse_opaque="true"
+         name="drop_icon"
+         top_delta="-10"
+         width="72" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Remove Attachment"
-         label_selected="Remove Attachment"
+         height="23"
+         label="Remove"
          layout="topleft"
-         left="10"
+         left="70"
          name="remove_attachment"
-         top_pad="10"
-         width="135" />
+         top_delta="45"
+         width="90" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
+         height="23"
          label="Send"
          label_selected="Send Notice"
          layout="topleft"
-         left_delta="138"
+         right="-10"
+         top_pad="20"
          name="send_notice"
-         top_delta="0"
-         width="125" />
-        <panel
-         bevel_style="in"
-         border="true"
-         height="71"
-         layout="topleft"
-         left="200"
-         name="drop_target2"
-         top="20"
-         width="71" />
-        <icon
-         height="59"
-         image_name="icon_groupnoticeinventory.tga"
-         layout="topleft"
-         left_delta="6"
-         mouse_opaque="true"
-         name="drop_icon"
-         top="26"
-         width="59" />
-        <group_drop_target
+         width="100" />
+      <group_drop_target
          height="466"
-         layout="topleft"
+         top="0"
          left="0"
+         layout="topleft"
          name="drop_target"
          tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice."
-         top="-198"
-         width="280" />
+         width="295" />
    </panel> 
     <panel
      follows="left|top"
-     height="268"
+     height="300"
      label="View Past Notice"
      layout="topleft"
      left="0"
+     visible="true"
      name="panel_view_past_notice"
-     top="197"
-     width="265">
+     top="180"
+     width="303">
         <text
          type="string"
          font="SansSerifBig"
@@ -304,9 +261,9 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl2"
-         top_pad="4"
+         top_pad="2"
          width="265">
-            To send a new notice, click the &apos;New Notice&apos; button above.
+            To send a new notice, click the + button
         </text>
         <text
          type="string"
@@ -315,7 +272,7 @@ the General tab.
          layout="topleft"
          left_delta="0"
          name="lbl3"
-         top_pad="24"
+         top_pad="15"
          visible="false"
          width="60">
             Subject:
@@ -346,13 +303,13 @@ the General tab.
         </text>
         <text_editor
          enabled="false"
-         height="150"
+         height="205"
          layout="topleft"
          left="10"
          max_length="511"
          name="view_message"
          top_delta="-35"
-         width="260"
+         width="285"
          word_wrap="true" />
         <line_editor
          enabled="false"
@@ -363,7 +320,7 @@ the General tab.
          mouse_opaque="false"
          name="view_inventory_name"
          top_pad="10"
-         width="260" />
+         width="285" />
         <icon
          height="16"
          layout="topleft"
@@ -373,14 +330,12 @@ the General tab.
          width="16" />
         <button
          follows="left|top"
-         height="20"
-         font="SansSerifSmall"
-         label="Open Attachment"
-         label_selected="Open Attachment"
+         height="23"
+         label="Open attachment"
          layout="topleft"
-         left_delta="0"
+         right="-10"
          name="open_attachment"
-         top_pad="10"
+         top_pad="5"
          width="135" />
         </panel>
-</panel>
\ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index bd98996ae13718963d0da6787bb41f0c944f41d0..ef3120174e8cb3337ff91ac1366f13df3c75b6b9 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -25,7 +25,7 @@
      name="subject"
      text_color="GroupNotifyTextColor"
      font="SansSerifBig"
-     top="60"
+     top="40"
      use_ellipses="true"
      value="subject"
      width="300"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 909c3f457760fbfb8c6f5e71cee8fab6b9d989db..4129d7b44881e35e27a8c762a44c8da06151edca 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  border="false"
- height="412"
+ height="552"
  label="Members &amp; Roles"
  layout="topleft"
  left="0"
@@ -18,169 +18,28 @@
     </panel.string>
     <panel.string
      name="help_text" />
-    <!--
-    <button
-     follows="left|top"
-     height="16"
-     label="?"
-     layout="topleft"
-     left="250"
-     name="help_button"
-     top="8"
-     width="20" />
-    -->
-    <!--<panel
-     follows="left|top"
-     height="80"
-     layout="topleft"
-     left="10"
-     name="members_header"
-     top_pad="10"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Members &amp; Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            Group Members are assigned Roles with Abilities. These settings can easily be customized, allowing for greater organization and flexibility.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="roles_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Roles
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_modifiable"
-         top_pad="4"
-         visible="false"
-         width="270">
-            Select a Role below.  You can modify its Name, Description and Member Title.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="role_properties_not_modifiable"
-         top_delta="0"
-         width="270">
-            Select a Role below to see its properties, Members and allowed Abilities.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_modifiable"
-         top_delta="24"
-         visible="false"
-         width="270">
-            You can also assign Abilities to the Role.
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="16"
-         layout="topleft"
-         left_delta="0"
-         name="role_actions_not_modifiable"
-         top_delta="0"
-         width="270">
-            You may view, but not modify, assigned Abilities.
-        </text>
-    </panel>
-    <panel
-     follows="left|top"
-     height="24"
-     layout="topleft"
-     left_delta="0"
-     name="actions_header"
-     top_delta="0"
-     visible="false"
-     width="270">
-        <text
-         type="string"
-         font="SansSerifBig"
-         height="16"
-         layout="topleft"
-         left="0"
-         name="static"
-         top="0"
-         width="270">
-            Abilities
-        </text>
-        <text
-         type="string"
-         word_wrap="true"
-         height="40"
-         layout="topleft"
-         left_delta="0"
-         name="static2"
-         top_pad="4"
-         width="270">
-            You can view an Ability&apos;s Description and which Roles and Members can execute the Ability.
-        </text>
-    </panel> -->
     <tab_container
-    border="true"
+    border="false"
      follows="left|top"
-     height="260"
+     height="245"
      halign="center"
      layout="topleft"
      left="5"
      name="roles_tab_container"
      tab_position="top"
      tab_height="20"
-     top="0"
+     tab_min_width="96"
+     top="3"
      width="303">
         <panel
          border="false"
-         height="260"
-         label="Members"
+         height="220"
+         label="MEMBERS"
          layout="topleft"
-         left="1"
+         left="0"
          help_topic="roles_members_tab"
          name="members_sub_tab"
          tool_tip="Members"
-         top="17"
          class="panel_group_members_subtab"
          width="300">
             <panel.string
@@ -198,8 +57,7 @@ clicking on their names.
          follows="left|top|right"
          max_length="250"
          label="Filter Members"
-         name="filter_input"
-         font="SansSerif" />
+         name="filter_input" />
           <!--  <button
              enabled="false"
              font="SansSerifSmall"
@@ -240,6 +98,7 @@ clicking on their names.
              font="SansSerifSmall"
              label="Invite"
              layout="topleft"
+             left="5"
              name="member_invite"
              top_pad="3"
              width="100" />
@@ -249,8 +108,10 @@ clicking on their names.
              label="Eject"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="member_eject"
              width="100" />
+             <!--What is this?-->
             <icon
              height="16"
              image_name="Inv_FolderClosed"
@@ -261,15 +122,14 @@ clicking on their names.
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Roles"
+         height="220"
+         label="ROLES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_roles_tab"
          name="roles_sub_tab"
          class="panel_group_roles_subtab"
-         top="17"
-         width="265">
+         width="300">
             <panel.string
              name="help_text">
                 Roles have a title and an allowed list of Abilities
@@ -293,40 +153,19 @@ including the Everyone and Owner Roles.
              name="power_partial_icon">
                 checkbox_enabled_false.tga
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="260"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Roles"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Roles"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
-             font="SansSerifSmall"
              height="20"
              label="Show All"
              layout="topleft"
@@ -337,11 +176,13 @@ including the Everyone and Owner Roles.
             <scroll_list
              column_padding="0"
              draw_heading="true"
+             draw_stripes="false"
              follows="left|top"
              heading_height="20"
              height="150"
              layout="topleft"
-             left="4"
+             search_column="1"
+             left="0"
              name="role_list"
              top_pad="4"
              width="300">
@@ -363,7 +204,7 @@ including the Everyone and Owner Roles.
              font="SansSerifSmall"
              label="Add Role"
              layout="topleft"
-             left_delta="0"
+             left="5"
              name="role_create"
              top_pad="6"
              width="125" />
@@ -373,20 +214,20 @@ including the Everyone and Owner Roles.
              label="Delete Role"
              layout="topleft"
              left_pad="5"
+             right="-5"
              name="role_delete"
              top_delta="0"
              width="125" />
         </panel>
         <panel
          border="false"
-         height="164"
-         label="Abilities"
+         height="220"
+         label="ABILITIES"
          layout="topleft"
-         left_delta="0"
+         left="0"
          help_topic="roles_actions_tab"
          name="actions_sub_tab"
          class="panel_group_actions_subtab"
-         top="17"
          tool_tip="You can view an Ability&apos;s Description and which Roles and Members can execute the Ability."
          width="300">
             <panel.string
@@ -394,37 +235,17 @@ including the Everyone and Owner Roles.
                 Abilities allow Members in Roles to do specific
 things in this group. There&apos;s a broad variety of Abilities.
             </panel.string>
-            <filter_editor
-            layout="topleft"
-            top="10"
-            left="4"
-            width="255"
-            height="20"
-            follows="left|top|right"
-            max_length="250"
-            label="Filter Abilities"
-            name="filter_input"
-            font="SansSerif" />
-            <!--<line_editor
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="4"
-             max_length="63"
-             name="search_text"
-             top="10"
-             width="90" />
-            <button
-             font="SansSerifSmall"
-             height="20"
-             label="Search"
-             layout="topleft"
-             left_pad="5"
-             name="search_button"
-             top_delta="-2"
-             width="80" />
+         <filter_editor
+         layout="topleft"
+         top="10"
+         left="4"
+         width="280"
+         height="20"
+         follows="left|top|right"
+         max_length="250"
+         label="Filter Abilities"
+         name="filter_input" />
+            <!--
             <button
              enabled="false"
              font="SansSerifSmall"
@@ -439,19 +260,19 @@ things in this group. There&apos;s a broad variety of Abilities.
              column_padding="0"
              draw_stripes="false"
              follows="left|top"
-             height="100"
+             height="160"
              layout="topleft"
-             left="6"
+             left="0"
              multi_select="true"
              name="action_list"
              search_column="1"
              tool_tip="Select an Ability to view more details"
              top_pad="6"
-             width="255">
+             width="300">
                 <scroll_list.columns
                  label=""
                  name="icon"
-                 width="18" />
+                 width="16" />
                 <scroll_list.columns
                  label=""
                  name="action"
@@ -459,7 +280,7 @@ things in this group. There&apos;s a broad variety of Abilities.
             </scroll_list>
             <icon
              height="16"
-             image_name="inv_folder_plain_closed.tga"
+             image_name="Inv_FolderClosed"
              layout="topleft"
              name="power_folder_icon"
              visible="false"
@@ -467,105 +288,93 @@ things in this group. There&apos;s a broad variety of Abilities.
         </panel>
     </tab_container>
     <panel
-     height="150"
+     height="252"
      layout="topleft"
      follows="left|top"
      left="10"
      name="members_footer"
-     top_pad="2"
+     top_pad="10"
+     top_delta="0"
      width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          follows="left|top"
          left="0"
          name="static"
-         top_pad="0"
-         width="100">
+         top_pad="5"
+         width="295">
             Assigned Roles
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         follows="left|top"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
-        </text>
         <scroll_list
          draw_stripes="false"
          follows="left|top"
-         height="150"
+         height="80"
          layout="topleft"
          left="0"
          name="member_assigned_roles"
-         top_pad="5"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="18" />
+             width="30" />
             <scroll_list.columns
              label=""
              name="role"
-             width="107" />
+             width="265" />
         </scroll_list>
-        <scroll_list
-         draw_stripes="false"
-         height="150"
+                 <text
+         type="string"
+         height="16"
          layout="topleft"
          follows="left|top"
-         left_pad="5"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
+         <scroll_list
+         draw_stripes="false"
+         height="80"
+         layout="topleft"
+         left="0"
          name="member_allowed_actions"
+         search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top_delta="0"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="14" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="126" />
+             width="275" />
         </scroll_list>
     </panel>
     <panel
-     height="252"
+     height="297"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="roles_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="270">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left="0"
          name="static"
          top="0"
-         width="100">
+         width="140">
             Name
         </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="35"
-         name="static2"
-         top_delta="0"
-         width="100">
-            Description
-        </text>
         <line_editor
          type="string"
          border_style="line"
@@ -574,21 +383,19 @@ things in this group. There&apos;s a broad variety of Abilities.
          height="20"
          layout="topleft"
          left="0"
-         max_length="20"
+         max_length="295"
          name="role_name"
          top_pad="0"
-         width="130">
+         width="295">
             Employees
         </line_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_delta="0"
          name="static3"
-         top_pad="10"
-         width="100">
+         top_pad="5"
+         width="295">
             Title
         </text>
         <line_editor
@@ -598,158 +405,159 @@ things in this group. There&apos;s a broad variety of Abilities.
          follows="left|top"
          height="20"
          layout="topleft"
-         left_delta="0"
-         max_length="20"
+         max_length="295"
          name="role_title"
          top_pad="0"
-         width="130">
-            (waiting)
+         width="295">
+          (waiting)
         </line_editor>
+                <text
+         type="string"
+         height="16"
+         layout="topleft"
+         left="0"
+         name="static2"
+         top_pad="5"
+         width="100">
+            Description
+        </text>
         <text_editor
          type="string"
          halign="left"
-         height="48"
+         height="35"
          layout="topleft"
-         left="135"
-         max_length="254"
+         left="0"
+         max_length="295"
          name="role_description"
-         top="16"
-         width="130"
+         top_pad="0"
+         width="295"
          word_wrap="true">
-            (waiting)
+          (waiting)
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
+         follows="left|top"
          left="0"
          name="static4"
-         top="85"
-         width="120">
-            Assigned Members
-        </text>
-        <text
-         type="string"
-         font="SansSerif"
-         height="16"
-         layout="topleft"
-         left_pad="15"
-         name="static5"
-         tool_tip="A list of abilities the currently selected role can perform"
-         top_delta="0"
-         width="100">
-            Allowed Abilities
+         top_pad="5"
+         width="295">
+            Assigned Roles
         </text>
         <name_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
          left="0"
          name="role_assigned_members"
          top_pad="0"
-         width="130" />
+         width="295" />
         <check_box
-         height="16"
-         label="Members are visible"
+         height="15"
+         label="Reveal members"
          layout="topleft"
-         left_delta="0"
          name="role_visible_in_list"
          tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."
-         top_pad="10"
-         width="130" />
+         top_pad="3"
+         width="290" />
+         <text
+         type="string"
+         height="16"
+         layout="topleft"
+         follows="left|top"
+         left="0"
+         name="static5"
+         top_pad="5"
+         width="295">
+            Allowed Abilities
+        </text>
         <scroll_list
          draw_stripes="false"
-         height="150"
+         height="50"
          layout="topleft"
-         left="135"
+         left="0"
          name="role_allowed_actions"
          search_column="2"
          tool_tip="For details of each allowed ability see the abilities tab"
-         top="101"
-         width="130">
+         top_pad="0"
+         width="295">
             <scroll_list.columns
              label=""
              name="icon"
-             width="2" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="checkbox"
-             width="16" />
+             width="20" />
             <scroll_list.columns
              label=""
              name="action"
-             width="220" />
+             width="250" />
         </scroll_list>
     </panel>
    <panel
-     height="215"
+     height="303"
      layout="topleft"
-     left_delta="0"
+     left="10"
      name="actions_footer"
      top_delta="0"
+     top="245"
      visible="false"
-     width="265">
+     width="300">
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left="0"
          name="static"
-         top="0"
          width="200">
-            Description
+            Ability description
         </text>
         <text_editor
          type="string"
          enabled="false"
          halign="left"
-         height="48"
+         height="80"
          layout="topleft"
          left_delta="0"
          max_length="512"
          name="action_description"
          top_pad="0"
-         width="265"
+         width="295"
          word_wrap="true">
             This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
         </text_editor>
         <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
          left_delta="0"
          name="static2"
-         top_pad="10"
-         width="125">
-            Roles with Ability
+         top_pad="5"
+         width="295">
+            Roles with this ability
         </text>
-        <text
+        <scroll_list
+         height="60"
+         layout="topleft"
+         left="0"
+         name="action_roles"
+         top_pad="0"
+         width="295" />
+                 <text
          type="string"
-         font="SansSerif"
          height="16"
          layout="topleft"
-         left_pad="10"
          name="static3"
-         top_delta="0"
-         width="125">
-            Members with Ability
+         top_pad="5"
+         width="295">
+            Members with this ability
         </text>
-        <scroll_list
-         height="150"
-         layout="topleft"
-         left="0"
-         name="action_roles"
-         top="90"
-         width="130" />
         <name_list
-         height="150"
+         height="100"
          layout="topleft"
-         left_pad="5"
          name="action_members"
-         top_delta="0"
-         width="130" />
+         top_pad="0"
+         width="295" />
     </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index c4cdaa41f970cf401e376ee43599a558c21d3500..e81532ec3eb39f319a3bc5c36e26434d75b51767 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -1,47 +1,101 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_im_control_panel"
-       width="125"
-       height="248"
-       border="false">
-
-  <avatar_icon name="avatar_icon"
-               width="96"
-               height="96" />
-
-  <button name="view_profile_btn"
-          label="View Profile"
-          left_delta="3"
-          width="125"
-		  height="20" />
-
-  <button name="add_friend_btn"
-          label="Add Friend"
-          width="125"
-          height="20" />
-
-  <button name="call_btn"
-          label="Call"
-          width="125"
-          height="20" />
+<panel
+ border="false"
+ height="350"
+ name="panel_im_control_panel"
+ width="131">
+
+    <avatar_icon
+     follows="left|top"
+     height="125"
+     left_delta="3"
+     name="avatar_icon"
+     top="-10"
+     width="125"/>
+
+    <text
+     follows="top|left|right"
+     font="SansSerifBig"
+     height="16"
+     layout="topleft"
+     name="avatar_name"
+     use_ellipses="true"
+     value="Unknown"
+     width="125" />
 
     <button
+     follows="left|bottom"
      height="20"
-     label="End Call"
-     name="end_call_btn"
-     visible="false"
-     width="125" />
+     label="View Profile"
+     name="view_profile_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Add Friend"
+     name="add_friend_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Teleport"
+     name="teleport_btn"
+     width="125"/>
 
-  <button
-	 enabled="false"
-     name="voice_ctrls_btn"
-     label="Open Voice Controls"
-     width="125"
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Share"
+     name="share_btn"
+     width="125"/>
+
+    <button
+     follows="left|bottom"
      height="20"
-     visible="false"/>
+     label="Pay"
+     name="pay_btn"
+     width="125"/>
+
+    <panel
+     background_visible="true"
+     bg_alpha_color="0.2 0.2 0.2 1"
+     border="false"
+     bottom="1"
+     follows="left|bottom"
+     height="70"
+     left="0"
+     left_pad="0"
+     name="panel_call_buttons"
+     top_pad="0"
+     width="131">
+
+        <button
+         bottom="10"
+         height="20"
+         label="Call"
+         left_delta="3"
+         name="call_btn"
+         width="125"/>
+
+        <button
+         bottom="40"
+         height="20"
+         label="Leave Call"
+         name="end_call_btn"
+         visible="false"
+         width="125"/>
+
+        <button
+         enabled="false"
+         bottom="10"
+         height="20"
+         label="Open Voice Controls"
+         name="voice_ctrls_btn"
+         visible="false"
+         width="125"/>
 
-  <button name="share_btn"
-          label="Share"
-          width="125"
-          height="20" />
+    </panel>
 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0c24adfad5933cc3112ef6344a786571582dca92
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="landmark_info"
+ top="20"
+ width="330">
+    <string
+     name="title_create_landmark"
+     value="Create Landmark" />
+    <string
+     name="title_edit_landmark"
+     value="Edit Landmark" />
+    <string
+     name="title_landmark"
+     value="Landmark" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <panel
+             follows="left|top|right"
+             height="55"
+             layout="topleft"
+             left="10"
+             name="landmark_info_panel"
+             top_pad="10"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="owner_label"
+                 top_pad="10"
+                 value="Owner:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="owner"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="creator_label"
+                 value="Creator:"
+                 width="90" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="creator"
+                 top_delta="0"
+                 width="200" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="created_label"
+                 value="Created:"
+                 width="50" />
+                <text
+                 follows="left|top|right"
+                 height="15"
+                 layout="topleft"
+                 left="70"
+                 name="created"
+                 top_delta="0"
+                 width="200" />
+            </panel>
+            <panel
+             follows="left|top|right"
+             height="210"
+             layout="topleft"
+             left="10"
+             name="landmark_edit_panel"
+             width="290">
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="title_label"
+                 top_pad="10"
+                 value="Title:"
+                 width="290" />
+                <line_editor
+                 background_image_disabled="task_panel_background.png"
+                 follows="left|top|right"
+                 height="22"
+                 layout="topleft"
+                 left="0"
+                 max_length="63"
+                 name="title_editor"
+                 prevalidate_callback="ascii"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="notes_label"
+                 top_pad="10"
+                 value="My notes:"
+                 width="290" />
+                <text_editor
+                 bg_readonly_color="DkGray2"
+                 follows="all"
+                 height="70"
+                 layout="topleft"
+                 left="0"
+                 max_length="127"
+                 name="notes_editor"
+                 read_only="true"
+                 text_readonly_color="white"
+                 top_pad="5"
+                 width="290"
+                 wrap="true" />
+                <text
+                 follows="left|top"
+                 height="15"
+                 layout="topleft"
+                 left="0"
+                 name="folder_label"
+                 top_pad="15"
+                 value="Landmark location:"
+                 width="290" />
+                <combo_box
+                 follows="bottom|left|right"
+                 height="20"
+                 layout="topleft"
+                 left="0"
+                 name="folder_combo"
+                 top_pad="5"
+                 width="200" />
+            </panel>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 5293043ba7df9d8ed2ed156d076f7e5e44ed28d0..f05684db10700adbcbf8a3178b153128fc4ad8c1 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -31,7 +31,7 @@
              left="0"
              mouse_opaque="true"
              name="favorites_list"
-             start_folder="favorite"
+             start_folder="Favorite"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -47,7 +47,7 @@
              left="0"
              mouse_opaque="true"
              name="landmarks_list"
-             start_folder="landmark"
+             start_folder="Landmarks"
              width="380"/>
         </accordion_tab>
         <accordion_tab
@@ -63,13 +63,13 @@
              left="0"
              mouse_opaque="true"
              name="my_inventory_list"
-             start_folder="inventory"
+             start_folder="INVENTORY"
              width="380"/>
-        </accordion_tab>
-        <accordion_tab
-         layout="topleft"
-         name="tab_library"
-         title="Library">
+          </accordion_tab>
+          <accordion_tab
+           layout="topleft"
+           name="tab_library"
+           title="Library">
             <inventory_subtree_panel
              allow_multi_select="true"
              border="true"
@@ -79,7 +79,7 @@
              left="0"
              mouse_opaque="true"
              name="library_list"
-             start_folder="library"
+             start_folder="LIBRARY"
              width="380"/>
         </accordion_tab>
     </accordion>
@@ -103,7 +103,6 @@
          layout="topleft"
          left="10"
          name="options_gear_btn"
-         picture_style="true"
          top="6"
          width="18" />
         <button
@@ -115,7 +114,6 @@
          layout="topleft"
          left_pad="5"
          name="add_btn"
-         picture_style="true"
          tool_tip="Add new landmark"
          width="18" />
         <dnd_button
@@ -126,7 +124,6 @@
          layout="topleft"
          right="-5"
          name="trash_btn"
-         picture_style="true"
          tool_tip="Remove selected landmark"
          top="6"
          width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index afe00271f7ccb3e21bc5c7fc7d45272d6d1a1ae9..cb5ec153875c28f18e5b9eae6c1934a57283ebbc 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -15,27 +15,34 @@
      name="real_url">
         http://secondlife.com/app/login/
     </panel.string>
+    <string name="reg_in_client_url">
+      http://secondlife.eniac15.lindenlab.com/reg-in-client/
+    </string>
     <panel.string
      name="forgot_password_url">
         http://secondlife.com/account/request.php
     </panel.string>
+  <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
     <web_browser
      border_visible="false"
      bottom="600"
      follows="all"
-     layout="topleft"
      left="0"
      name="login_html"
-     right="-1"
      start_url=""
-     top="1" />
+     top="0"
+     height="600"
+     width="800"/>
+    <panel
+     follows="left|bottom|right"
+     name="login_widgets"
+     layout="topleft"
+     left="0"
+     top="0">
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="32"
      name="first_name_text"
      top="530"
@@ -44,9 +51,9 @@
     </text>
     <line_editor
      follows="left|bottom"
+     font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="31"
      name="first_name_edit"
@@ -55,12 +62,9 @@
      top_pad="2"
      width="120" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="164"
      name="last_name_text"
      top="530"
@@ -72,7 +76,6 @@
      font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="31"
      name="last_name_edit"
@@ -81,12 +84,9 @@
      top_pad="2"
      width="120" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="296"
      name="password_text"
      top="530"
@@ -98,7 +98,6 @@
      font="SansSerif"
      handle_edit_keys_directly="true"
      height="20"
-     layout="topleft"
      left_delta="0"
      max_length="16"
      name="password_edit"
@@ -124,12 +123,9 @@
      name="server_combo"
      width="100" />
     <text
-     type="string"
-     length="1"
      follows="left|bottom"
      font="SansSerif"
      height="16"
-     layout="topleft"
      left="32"
      name="start_location_text"
      top="576"
@@ -141,7 +137,6 @@
      control_name="LoginLocation"
      follows="left|bottom"
      height="23"
-     layout="topleft"
      left_pad="0"
      max_chars="128"
      name="start_location_combo"
@@ -165,20 +160,14 @@
      follows="left|bottom"
      height="16"
      label="Remember password"
-     layout="topleft"
      left_pad="10"
      name="remember_check"
      top_delta="3"
      width="138" />
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left="-210"
      name="create_new_account_text"
      top="539"
@@ -186,14 +175,9 @@
         Create a new account
     </text>
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left_delta="0"
      name="forgot_password_text"
      top_pad="4"
@@ -201,18 +185,14 @@
         Forgot your name or password?
     </text>
     <text
-     type="string"
-     length="1"
      follows="right|bottom"
      halign="right"
      height="16"
-     hover="true"
-     hover_color="0.2 0.45 0.72 1"
-     layout="topleft"
      left="-310"
      name="channel_text"
      top="579"
      width="300">
         [VERSION]
     </text>
+  </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d5887c46e8e5e3f7f5e599e0640c8e20961f0a31
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -0,0 +1,487 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="400"
+ label="Things"
+ layout="topleft"
+ min_height="350"
+ min_width="240"
+ name="main inventory panel"
+ width="330">
+    <panel.string
+     name="Title">
+        Things
+    </panel.string>
+    <filter_editor
+     text_pad_left="12"
+     follows="left|top|right"
+     font="SanSerif"
+     height="20"
+     label="Filter"
+     layout="topleft"
+     left="15"
+     name="inventory search editor"
+     top="34"
+     width="300" />
+    <tab_container
+     follows="left|top|right|bottom"
+     height="300"
+     layout="topleft"
+     left_delta="-4"
+     name="inventory filter tabs"
+     tab_position="top"
+     top_pad="4"
+     width="305">
+        <inventory_panel
+         follows="left|top|right|bottom"
+         height="295"
+         label="All Items"
+         layout="topleft"
+         left="1"
+         name="All Items"
+         top="16"
+         width="290" />
+        <inventory_panel
+         follows="left|top|right|bottom"
+         height="295"
+         label="Recent Items"
+         layout="topleft"
+         left_delta="0"
+         name="Recent Items"
+         top_delta="0"
+         width="290" />
+    </tab_container>
+
+    <panel
+     background_visible="true"
+     bevel_style="none"
+     bottom="0"
+     follows="left|right|bottom"
+     height="30"
+     layout="bottomleft"
+     left="0"
+     visible="true"
+     name="bottom_panel"
+     width="330">
+        <button
+         follows="bottom|left"
+         tool_tip="Show additional options"
+         height="18"
+         image_disabled="OptionsMenu_Disabled"
+         image_selected="OptionsMenu_Press"
+         image_unselected="OptionsMenu_Off"
+         layout="topleft"
+         left="10"
+         name="options_gear_btn"
+         picture_style="true"
+         top="6"
+         width="18" />
+        <button
+         follows="bottom|left"
+         height="18"
+         image_selected="AddItem_Press"
+         image_unselected="AddItem_Off"
+         image_disabled="AddItem_Disabled"
+         layout="topleft"
+         left_pad="5"
+         name="add_btn"
+         picture_style="true"
+         tool_tip="Add new item"
+         width="18" />
+        <dnd_button
+         follows="bottom|right"
+         height="18"
+         image_selected="TrashItem_Press"
+         image_unselected="TrashItem_Off"
+         layout="topleft"
+         right="-5"
+         name="trash_btn"
+         picture_style="true"
+         tool_tip="Remove selected item"
+         top="6"
+         width="18" />
+    </panel>
+
+    <menu_bar
+     bg_visible="false"
+     follows="left|top|right"
+     height="18"
+     layout="topleft"
+     left_delta="0"
+     mouse_opaque="false"
+     name="Inventory Menu"
+     top="15"
+     visible="true"
+     width="290">
+        <menu
+         height="101"
+         label="File"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="File"
+         tear_off="true"
+         top="-117"
+         width="128">
+            <menu_item_call
+             label="Open"
+             layout="topleft"
+             name="Open">
+                <menu_item_call.on_click
+                 function="Inventory.DoToSelected"
+                 parameter="open" />
+            </menu_item_call>
+            <menu
+             create_jump_keys="true"
+             label="Upload"
+             layout="topleft"
+             name="upload"
+             tear_off="true">
+                <menu_item_call
+                 label="Image (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Image"
+                 shortcut="control|U">
+                    <menu_item_call.on_click
+                     function="File.UploadImage"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Sound (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Sound">
+                    <menu_item_call.on_click
+                     function="File.UploadSound"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Animation (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Animation">
+                    <menu_item_call.on_click
+                     function="File.UploadAnim"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Model (L$[COST])..."
+                 layout="topleft"
+                 name="Upload Model">
+                    <menu_item_call.on_click
+                     function="File.UploadModel"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Scene..."
+                 layout="topleft"
+                 name="Upload Scene">
+                    <menu_item_call.on_click
+                     function="File.UploadScene"
+                     parameter="" />
+                    <menu_item_call.on_enable
+                     function="File.EnableUpload" />
+                </menu_item_call>
+                <menu_item_call
+                 label="Bulk (L$[COST] per file)..."
+                 layout="topleft"
+                 name="Bulk Upload">
+                    <menu_item_call.on_click
+                     function="File.UploadBulk"
+                     parameter="" />
+                </menu_item_call>
+                <menu_item_separator
+                 layout="topleft" />
+            </menu>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_call
+             label="New Window"
+             layout="topleft"
+             name="New Window">
+                <menu_item_call.on_click
+                 function="Inventory.NewWindow" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator2" />
+            <menu_item_call
+             label="Show Filters"
+             layout="topleft"
+             name="Show Filters">
+                <menu_item_call.on_click
+                 function="Inventory.ShowFilters" />
+            </menu_item_call>
+            <menu_item_call
+             label="Reset Filters"
+             layout="topleft"
+             name="Reset Current">
+                <menu_item_call.on_click
+                 function="Inventory.ResetFilter" />
+            </menu_item_call>
+            <menu_item_call
+             label="Close All Folders"
+             layout="topleft"
+             name="Close All Folders">
+                <menu_item_call.on_click
+                 function="Inventory.CloseAllFolders" />
+            </menu_item_call>
+            <menu_item_separator
+             layout="topleft"
+             name="separator3" />
+            <menu_item_call
+             label="Empty Trash"
+             layout="topleft"
+             name="Empty Trash">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyTrash" />
+            </menu_item_call>
+            <menu_item_call
+             label="Empty Lost And Found"
+             layout="topleft"
+             name="Empty Lost And Found">
+                <menu_item_call.on_click
+                 function="Inventory.EmptyLostAndFound" />
+            </menu_item_call>
+        </menu>
+        <menu
+         height="121"
+         label="Create"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Create"
+         tear_off="true"
+         top="-201"
+         width="121">
+            <menu_item_call
+             label="New Folder"
+             layout="topleft"
+             name="New Folder">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="category" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Script"
+             layout="topleft"
+             name="New Script">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="lsl" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Note"
+             layout="topleft"
+             name="New Note">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="notecard" />
+            </menu_item_call>
+            <menu_item_call
+             label="New Gesture"
+             layout="topleft"
+             name="New Gesture">
+                <menu_item_call.on_click
+                 function="Inventory.DoCreate"
+                 parameter="gesture" />
+            </menu_item_call>
+            <menu
+             height="175"
+             label="New Clothes"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Clothes"
+             top_pad="514"
+             width="125">
+                <menu_item_call
+                 label="New Shirt"
+                 layout="topleft"
+                 name="New Shirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Pants"
+                 layout="topleft"
+                 name="New Pants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="pants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Shoes"
+                 layout="topleft"
+                 name="New Shoes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shoes" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Socks"
+                 layout="topleft"
+                 name="New Socks">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="socks" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Jacket"
+                 layout="topleft"
+                 name="New Jacket">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="jacket" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skirt"
+                 layout="topleft"
+                 name="New Skirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Gloves"
+                 layout="topleft"
+                 name="New Gloves">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="gloves" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Undershirt"
+                 layout="topleft"
+                 name="New Undershirt">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="undershirt" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Underpants"
+                 layout="topleft"
+                 name="New Underpants">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="underpants" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Alpha"
+                 layout="topleft"
+                 name="New Alpha">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="alpha" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Tattoo"
+                 layout="topleft"
+                 name="New Tattoo">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="tattoo" />
+                </menu_item_call>
+            </menu>
+            <menu
+             height="85"
+             label="New Body Parts"
+             layout="topleft"
+             left_delta="0"
+             mouse_opaque="false"
+             name="New Body Parts"
+             top_pad="514"
+             width="118">
+                <menu_item_call
+                 label="New Shape"
+                 layout="topleft"
+                 name="New Shape">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="shape" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Skin"
+                 layout="topleft"
+                 name="New Skin">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="skin" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Hair"
+                 layout="topleft"
+                 name="New Hair">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="hair" />
+                </menu_item_call>
+                <menu_item_call
+                 label="New Eyes"
+                 layout="topleft"
+                 name="New Eyes">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="eyes" />
+                </menu_item_call>
+            </menu>
+        </menu>
+        <menu
+         height="49"
+         label="Sort"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         name="Sort"
+         tear_off="true"
+         top="-113"
+         width="118">
+            <menu_item_check
+             control_name="Inventory.SortByName"
+             label="By Name"
+             layout="topleft"
+             name="By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="name" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SortByDate"
+             label="By Date"
+             layout="topleft"
+             name="By Date">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="date" />
+            </menu_item_check>
+            <menu_item_separator
+             layout="topleft" />
+            <menu_item_check
+             control_name="Inventory.FoldersAlwaysByName"
+             label="Folders Always By Name"
+             layout="topleft"
+             name="Folders Always By Name">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="foldersalwaysbyname" />
+            </menu_item_check>
+            <menu_item_check
+             control_name="Inventory.SystemFoldersToTop"
+             label="System Folders To Top"
+             layout="topleft"
+             name="System Folders To Top">
+                <menu_item_check.on_click
+                 function="Inventory.SetSortBy"
+                 parameter="systemfolderstotop" />
+            </menu_item_check>
+        </menu>
+    </menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
index cc47e99c2cb9c6d80a22d4259b448e4cf07cf428..686f4ac1d5ebb281b06abb43828638da0c22015a 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
@@ -16,7 +16,7 @@
    follows="top|left" 
    height="15" 
    left="10" 
-   name="">
+   name="home_label">
     Home URL:
   </text>
   <line_editor 
@@ -49,7 +49,7 @@
    follows="top|left"
    height="15"
    left="164"
-   name="">
+   name="preview_label">
     Preview
   </text>
   
@@ -88,7 +88,7 @@
    follows="top|left" 
    height="15"
    left="10" 
-   name="">
+   name="controls_label">
     Controls:
   </text>
   <combo_box 
@@ -207,7 +207,7 @@
    follows="top|left" 
    height="15" 
    left="30" 
-   name="">
+   name="size_label">
     Size:
   </text>
   
@@ -228,7 +228,7 @@
    name="width_pixels" 
    width="50" />
    
-  <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="">
+  <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="X_label">
     X
   </text>
   <spinner bottom_delta="0"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 4175d21639b500c7b273fef43835dc571f550b75..a90337d31a20705a16c36e1de1d78faa6df65fcb 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -7,11 +7,12 @@
  height="65"
  layout="topleft"
  name="navigation_bar"
+ chrome="true"
  width="600">
 	<icon
 	 follows="all"
 	 image_name="NavBar_BG"
-	 mouse_opaque="true"
+	 mouse_opaque="false"
 	 name="bg_icon"
 	 scale_image="true"
 	 visible="true"
@@ -22,7 +23,7 @@
 	<icon
 	 follows="all"
 	 image_name="NavBar_BG_NoFav"
-	 mouse_opaque="true"
+	 mouse_opaque="false"
 	 name="bg_icon_no_fav"
 	 scale_image="true"
 	 visible="false"
@@ -51,7 +52,6 @@
 	     layout="topleft"
 	     left="10"
 	     name="back_btn"
-	     picture_style="true"
 	     tool_tip="Go back to previous location"
 	     top="3"
 	     width="31" />
@@ -69,7 +69,6 @@
 	     layout="topleft"
 	     left_pad="0"
 	     name="forward_btn"
-	     picture_style="true"
 	     tool_tip="Go forward one location"
 	     top_delta="0"
 	     width="31" />
@@ -86,7 +85,6 @@
 	     layout="topleft"
 	     left_pad="7"
 	     name="home_btn"
-	     picture_style="true"
 	     tool_tip="Teleport to my home location"
 	     top_delta="0"
 	     width="32" />
@@ -127,7 +125,6 @@
 	<!--      left_pad="5" -->
 	<!--      mouse_opaque="false" -->
 	<!--      name="search_bg" -->
-	<!--      picture_style="true" -->
 	<!--      top_delta="0" -->
 	<!--      width="168" /> -->
 
@@ -148,7 +145,8 @@
 	     top_delta="0"
 	     width="200" >
          <combo_editor
-          label="Search" />
+          label="Search [SECOND_LIFE]"
+          name="search_combo_editor"/>
         </search_combo_box>
 	</panel>
 
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 2182163da5bd88dd2826d379028751758cfed9f3..7128c200380d8385100370f6dc2dd7aa86428e5d 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -42,13 +42,17 @@
      width="20" />
     <button
      follows="right"
+     is_toggle="true"
      width="45"
      top="0"
      layout="topleft"
      left_pad="8"
      label="Log"
      height="23"
-     tool_tip="Show/hide nearby chat log">
-    <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/>
+     name="show_nearby_chat"
+     tool_tip="Shows/hides nearby chat log">
+        <button.init_callback
+           function="Button.SetDockableFloaterToggle"
+           parameter="nearby_chat" />
     </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index 5333dfa2f5b399efe008e6705ed9b66b8f405952..c02dabed2c160ae8897dfc9b2124f9d501acb206 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -17,13 +17,16 @@
      left="0"
      top="0"
      height="517"
+     width="313"
      border_size="0">
         <panel
          name="notes_stack"
          follows="all"
          layout="topleft"
          top="0"
-         left="0">
+         left="0"
+         height="475"
+         width="313">
             <scroll_container
              color="DkGray2"
              follows="all"
@@ -31,8 +34,11 @@
              left="0"
              name="profile_scroll"
              opaque="true"
+             height="475"
+             width="313"
              top="0">
               <panel
+               height="450"
                layout="topleft"
                name="profile_scroll_panel"
                top="0"
@@ -104,7 +110,8 @@
          layout="topleft"
          left="0"
          name="notes_buttons_panel"
-         auto_resize="false">
+         auto_resize="false"
+         width="313">
        <button
          follows="bottom|left"
          height="19"
@@ -125,7 +132,6 @@
          left_pad="5"
          width="40" />
         <button
-         enabled="false"
          follows="bottom|left"
          height="19"
          label="Call"
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 0d34aa0f081571f610e73e4d23591bd4feeeb83a..34a185fb44a23bb1e672f8ce58a8c3a4330a6f8b 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -2,9 +2,6 @@
 <panel
   background_opaque="false"
       border_visible="false"
-  border = "false"
-  border_drop_shadow_visible = "false"
-  drop_shadow_visible = "false"
   background_visible="true"
   bg_alpha_color="0.3 0.3 0.3 0"
   bg_opaque_color="0.3 0.3 0.3 0"
@@ -18,12 +15,7 @@
   <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
   <panel
       border_visible="false"
-      drop_shadow="false"
  bevel_style="none"
- border_style="none"
-  border = "false"
-  border_drop_shadow_visible = "false"
-  drop_shadow_visible = "false"
     background_visible="true"
   bg_alpha_color="0.3 0.3 0.3 0"
   bg_opaque_color="0.3 0.3 0.3 0"
@@ -67,9 +59,6 @@
 	v_pad="0"
       bg_readonly_color="0.0 0.0 0.0 0"
       border_visible="false"
-	  border = "false"
-	  border_drop_shadow_visible = "false"
-	  drop_shadow_visible = "false"
       embedded_items="false"
       enabled="false"
       follows="left|right|top|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
index c67ae4167732f54afb73d669672bffe75593feac..7b6c0f33da8586e89166774c641bad99972fabb6 100644
--- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
@@ -71,7 +71,6 @@
      layout="topleft"
      left_delta="0"
      name="header"
-     picture_style="true"
      top_delta="-20"
      width="100" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index e234a7b358ebbfd9a0d38a14516a10f23f5d4cc0..15fdd73bdc14bc2b260701706db04b971a4ec10a 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -75,7 +75,6 @@ background_visible="true"
              multi_select="true"
              name="avatar_list"
              top="0"
-             volume_column_width="20"
              width="313" />
             <panel
              follows="left|right|bottom"
@@ -95,7 +94,6 @@ background_visible="true"
              layout="topleft"
              left="10"
              name="nearby_view_sort_btn"
-             picture_style="true"
              top="5"
              width="18" />
              <button
@@ -107,7 +105,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
@@ -132,7 +129,6 @@ background_visible="true"
              top="0"
              width="313">
                 <accordion_tab
-                 can_resize="false"
                  layout="topleft"
                  height="235"
                  min_height="150"
@@ -149,7 +145,6 @@ background_visible="true"
                          width="313" />
                 </accordion_tab>
                 <accordion_tab
-                 can_resize="false"
                  layout="topleft"
                  height="235"
                  name="tab_all"
@@ -183,7 +178,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="friends_viewsort_btn"
-               picture_style="true"
                top="5"
                width="18" />
                 <button
@@ -195,7 +189,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_btn"
-                 picture_style="true"
                  tool_tip="Offer friendship to a resident"
                  top_delta="0"
                  width="18" />
@@ -209,7 +202,6 @@ background_visible="true"
                  left_pad="10"
                  right="-10"
                  name="del_btn"
-                 picture_style="true"
                  tool_tip="Remove selected person from your Friends list"
                  top_delta="0"
                  width="18" />
@@ -252,7 +244,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="groups_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
                 <button
@@ -264,7 +255,6 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="plus_btn"
-                 picture_style="true"
                  tool_tip="Join group/Create new group"
                  top_delta="0"
                  width="18" />
@@ -277,23 +267,9 @@ background_visible="true"
                  layout="topleft"
                  left_pad="24"
                  name="activate_btn"
-                 picture_style="true"
                  tool_tip="Activate selected group"
                  top_delta="5"
                  width="10" />
-                <button
-                 follows="bottom|left"
-                 height="18"
-                 image_selected="TrashItem_Press"
-                 image_unselected="TrashItem_Off"
-                 layout="topleft"
-                left_pad="10"
-                 right="-10"
-                 name="minus_btn"
-                 picture_style="true"
-                 tool_tip="Leave selected group"
-                 top_delta="-5"
-                 width="18" />
             </panel>
         </panel>
         <panel
@@ -336,7 +312,6 @@ background_visible="true"
                layout="topleft"
                left="10"
                name="recent_viewsort_btn"
-               picture_style="true"
                top="7"
                width="18" />
               <button
@@ -348,163 +323,94 @@ background_visible="true"
                  layout="topleft"
                  left_pad="5"
                  name="add_friend_btn"
-                 picture_style="true"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
                  width="18" />
             </panel>
         </panel>
     </tab_container>
-    <layout_stack
-     animate="false"
-     border_size="0"
-     follows="left|right|bottom"
+    <panel
+     follows="bottom|left"
      height="25"
      layout="topleft"
      left="10"
      name="button_bar"
-     orientation="horizontal"
      width="313">
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
-         height="25"
-         layout="topleft"
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
          left="0"
-         name="view_profile_btn_panel"
-         top="-25"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Profile"
-             layout="topleft"
-             name="view_profile_btn"
-             tool_tip="Show picture, groups, and other residents information"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
          height="19"
+         label="Profile"
          layout="topleft"
-         left="0"
-         min_width="80"
-         name="group_info_btn_panel"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Group Profile"
-             layout="topleft"
-             name="group_info_btn"
-             tool_tip="Show group information"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top"
-         height="25"
-         layout="topleft"
-         left_pad="5"
-         min_width="45"
-         name="chat_btn_panel"
-         top_delta="0"
-         width="100">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Group Chat"
-             layout="topleft"
-             name="chat_btn"
-             tool_tip="Open chat session"
-             width="100" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top|"
-         height="25"
+         name="view_profile_btn"
+         tool_tip="Show picture, groups, and other residents information"
+         width="70" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="IM"
          layout="topleft"
-         left_pad="5"
-         min_width="35"
-         name="im_btn_panel"
-         top_delta="0"
-         width="50">
-            <button
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="IM"
-             layout="topleft"
-             name="im_btn"
-             tool_tip="Open instant message session"
-             width="50" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
-         follows="left|top|right"
-         height="25"
+         name="im_btn"
+         tool_tip="Open instant message session"
+         width="45" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Call"
          layout="topleft"
-         left_pad="5"
-         min_width="40"
-         name="call_btn_panel"
-         top_delta="0"
-         visible="false"
-         width="40">
-            <button
-             enabled="false"
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Call"
-             layout="topleft"
-             name="call_btn"
-             width="50" />
-        </layout_panel>
-        <layout_panel
-         default_tab_group="1"
+         name="call_btn"
+         tool_tip="Call this resident"
+         width="50" />
+        <button
          follows="left|top"
-         height="25"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Share"
          layout="topleft"
-         left_pad="5"
-         min_width="65"
-         name="teleport_btn_panel"
-         top_delta="0"
-         width="100">
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="19"
-             label="Teleport"
-             layout="topleft"
-             name="teleport_btn"
-             tool_tip="Offer teleport"
-             width="100" />
-        </layout_panel>
-      <layout_panel
-         default_tab_group="1"
-         enabled="false"
-         follows="left|top"
-         height="25"
+         name="share_btn"
+         width="60" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Teleport"
          layout="topleft"
-         left_pad="5"
-         min_width="50"
-         name="share_btn_panel"
-         top_delta="0"
-         visible="false"
-         width="80">
-            <button
-             enabled="false"
-             follows="top|left"
-             font="SansSerifSmall"
-             height="19"
-             label="Share"
-             layout="topleft"
-             name="share_btn"
-             width="80" />
-        </layout_panel>
-    </layout_stack>
+         name="teleport_btn"
+         tool_tip="Offer teleport"
+         width="75" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left="0"
+         height="19"
+         label="Group Profile"
+         layout="topleft"
+         name="group_info_btn"
+         tool_tip="Show group information"
+         width="110" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         top="4"
+         left_pad="2"
+         height="19"
+         label="Group Chat"
+         layout="topleft"
+         name="chat_btn"
+         tool_tip="Open chat session"
+         width="110" />
+    </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index a67ae59b4a40bf7df50eadca4d586e0476980f7c..cf18aa2d393746bc90feb0f25e441cc208885669 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -15,7 +15,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
@@ -30,7 +29,7 @@
      text_color="white"
      top="0"
      value="Pick Info"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <scroll_container
      color="DkGray2"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index 38ea6b6196e4665a30e78bd22f13890d41385782..7ff227ecb608a6aafe388ad98b7d9d279267e553 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -75,7 +75,6 @@
      image_unselected="BuyArrow_Press"
      layout="topleft"
      name="info_chevron"
-     picture_style="true"
      right="-7"
      tab_stop="false"
      top="27"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index cbe1f11e3d7e90a7d1b6d7d5d5c2e0bec6101e39..ae61852f68d256d7045be78e02bf50ca6943ae29 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -41,7 +41,6 @@
              layout="topleft"
              left="0"
              name="gear_menu_btn"
-             picture_style="true"
              top="5"
              width="18" />
             <button
@@ -53,7 +52,6 @@
              layout="topleft"
              left_pad="15"
              name="new_btn"
-             picture_style="true"
              tool_tip="Create new pick at current location"
              top="5"
              width="18" />
@@ -65,7 +63,6 @@
              image_unselected="TrashItem_Off"
              layout="topleft"
              name="trash_btn"
-             picture_style="true"
              right="-10"
              top="5"
              width="18" />
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
new file mode 100644
index 0000000000000000000000000000000000000000..65f150b33c6c52a3ac3dba073fde4cef600bc5e6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -0,0 +1,919 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="place_profile"
+ top="20"
+ width="330">
+    <string
+     name="on"
+     value="On" />
+    <string
+     name="off"
+     value="Off" />
+    <string
+     name="anyone"
+     value="Anyone" />
+    <string
+     name="available"
+     value="available" />
+    <string
+     name="allocated"
+     value="allocated" />
+    <string
+     name="title_place"
+     value="Place Profile" />
+    <string
+     name="title_teleport_history"
+     value="Teleport History Location" />
+    <string
+     name="not_available"
+     value="(N\A)" />
+    <string
+     name="unknown"
+     value="(unknown)" />
+    <string
+     name="public"
+     value="(public)" />
+    <string
+     name="none_text"
+     value="(none)" />
+    <string
+     name="sale_pending_text"
+     value="(Sale Pending)" />
+    <string
+     name="group_owned_text"
+     value="(Group Owned)" />
+    <string
+     name="price_text"
+     value="L$" />
+    <string
+     name="area_text"
+     value="m²" />
+    <string
+     name="all_residents_text"
+     value="All Residents" />
+    <string
+     name="group_text"
+     value="Group" />
+    <string
+     name="can_resell">
+        Purchased land in this region may be resold.
+    </string>
+    <string
+     name="can_not_resell">
+        Purchased land in this region may not be resold.
+    </string>
+    <string
+     name="can_change">
+        Purchased land in this region may be joined or subdivided.
+    </string>
+    <string
+     name="can_not_change">
+        Purchased land in this region may not be joined or subdivided.
+    </string>
+    <string
+     name="server_update_text">
+        Place information not available without server update.
+    </string>
+    <string
+     name="server_error_text">
+        Information about this location is unavailable at this time, please try again later.
+    </string>
+    <string
+     name="server_forbidden_text">
+        Information about this location is unavailable due to access restrictions.  Please check your permissions with the parcel owner.
+    </string>
+    <string
+     name="acquired_date">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+    </string>
+    <!-- Texture names for parcel permissions icons -->
+    <string
+     name="icon_PG"
+     value="parcel_drk_PG" />
+    <string
+     name="icon_M"
+     value="parcel_drk_M" />
+    <string
+     name="icon_R"
+     value="parcel_drk_R" />
+    <string
+     name="icon_Voice"
+     value="parcel_drk_Voice" />
+    <string
+     name="icon_VoiceNo"
+     value="parcel_drk_VoiceNo" />
+    <string
+     name="icon_Fly"
+     value="parcel_drk_Fly" />
+    <string
+     name="icon_FlyNo"
+     value="parcel_drk_FlyNo" />
+    <string
+     name="icon_Push"
+     value="parcel_drk_Push" />
+    <string
+     name="icon_PushNo"
+     value="parcel_drk_PushNo" />
+    <string
+     name="icon_Build"
+     value="parcel_drk_Build" />
+    <string
+     name="icon_BuildNo"
+     value="parcel_drk_BuildNo" />
+    <string
+     name="icon_Scripts"
+     value="parcel_drk_Scripts" />
+    <string
+     name="icon_ScriptsNo"
+     value="parcel_drk_ScriptsNo" />
+    <string
+     name="icon_Damage"
+     value="parcel_drk_Damage" />
+    <string
+     name="icon_DamageNo"
+     value="parcel_drk_DamageNo" />
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     left="10"
+     name="back_btn"
+     tab_stop="false"
+     top="0"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     use_ellipses="true"
+     value="Place Profile"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="10"
+     name="place_scroll"
+     opaque="true"
+     top_pad="5"
+     width="313">
+        <panel
+         bg_alpha_color="DkGray2"
+         follows="all"
+         height="533"
+         layout="topleft"
+         left="0"
+         min_height="300"
+         name="scrolling_panel"
+         top="0"
+         value="&gt;"
+         width="313">
+            <texture_picker
+             enabled="false"
+             follows="top|left"
+             height="190"
+             layout="topleft"
+             left="10"
+             name="logo"
+             top="10"
+             width="290" />
+            <layout_stack
+             border_size="0"
+             clip="false"
+             follows="all"
+             height="50"
+             layout="topleft"
+             mouse_opaque="false"
+             name="panel_stack"
+             orientation="horizontal"
+             top_pad="-65"
+             width="100">
+                <layout_panel
+                 follows="left|right"
+                 height="50"
+                 layout="topleft"
+                 left="0"
+                 min_height="50"
+                 min_width="50"
+                 mouse_opaque="false"
+                 name="here_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="YouAreHere_Badge"
+                     layout="topleft"
+                     left="0"
+                     name="icon_you_are_here"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+                <layout_panel
+                 follows="left|right"
+                 height="60"
+                 layout="topleft"
+                 min_height="50"
+                 min_width="60"
+                 mouse_opaque="false"
+                 name="for_sale_panel"
+                 top="0"
+                 user_resize="false"
+                 width="60">
+                    <icon
+                     follows="top|left"
+                     height="50"
+                     image_name="ForSale_Badge"
+                     layout="topleft"
+                     left="10"
+                     name="icon_for_sale"
+                     top="0"
+                     width="50" />
+                </layout_panel>
+            </layout_stack>
+            <text
+             follows="left|top|right"
+             font="SansSerifLarge"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="region_title"
+             text_color="white"
+             top_pad="5"
+             use_ellipses="true"
+             value="SampleRegion"
+             width="290" />
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="parcel_title"
+             top_pad="4"
+             use_ellipses="true"
+             value="SampleParcel, Name Long (145, 228, 26)"
+             width="285" />
+            <expandable_text
+             follows="left|top|right"
+             height="50"
+             layout="topleft"
+             left="5"
+             name="description"
+             top_pad="10"
+             value="Du waltz die spritz"
+             width="300" />
+            <text
+             follows="left|top"
+             height="14"
+             layout="topleft"
+             left="10"
+             name="owner_label"
+             text_color="White"
+             top_pad="0"
+             value="Owner:"
+             width="90" />
+         <!--TODO: HOOK THIS NAME UP WITH AN INSPECTOR  -->
+            <text
+             follows="left|top|right"
+             height="14"
+             layout="topleft"
+             left_pad="1"
+             name="owner_value"
+             top_delta="0"
+             value="Alex Superduperlongenamenton"
+             width="205" />
+            <accordion
+             follows="all"
+             height="230"
+             layout="topleft"
+             left="0"
+             name="advanced_info_accordion"
+             top_pad="10"
+             width="313">
+                <accordion_tab
+                 layout="topleft"
+                 name="parcel_characteristics_tab"
+                 title="Parcel">
+                    <scroll_container
+                     color="DkGray2"
+                     follows="all"
+                     height="132"
+                     layout="topleft"
+                     left="0"
+                     name="parcel_scroll"
+                     opaque="true"
+                     top="0"
+                     width="290">
+                        <panel
+                         follows="all"
+                         height="165"
+                         layout="topleft"
+                         left="0"
+                         top="0"
+                         width="275">
+                            <icon
+                             follows="top|left"
+                             height="16"
+                             image_name="parcel_drk_PG"
+                             layout="topleft"
+                             left="20"
+                             name="rating_icon"
+                             top="0"
+                             width="18" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="rating_label"
+                             value="Rating:"
+                             width="80" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="rating_value"
+                             top_delta="0"
+                             value="unknown"
+                             width="120" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Voice"
+                             layout="topleft"
+                             left="20"
+                             name="voice_icon"
+                             top_pad="5"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="8"
+                             name="voice_label"
+                             top_delta="0"
+                             value="Voice:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="18"
+                             layout="topleft"
+                             left_pad="0"
+                             name="voice_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Fly"
+                             layout="topleft"
+                             left="20"
+                             name="fly_icon"
+                             top_pad="3"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="8"
+                             name="fly_label"
+                             value="Fly:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="16"
+                             layout="topleft"
+                             left_pad="0"
+                             name="fly_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Push"
+                             layout="topleft"
+                             left="20"
+                             name="push_icon"
+                             top_pad="3"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="push_label"
+                             value="Push:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="push_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Build"
+                             layout="topleft"
+                             left="20"
+                             name="build_icon"
+                             top_pad="3"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="build_label"
+                             value="Build:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="15"
+                             layout="topleft"
+                             left_pad="0"
+                             name="build_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Scripts"
+                             layout="topleft"
+                             left="20"
+                             name="scripts_icon"
+                             top_pad="3"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="scripts_label"
+                             value="Scripts:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="scripts_value"
+                             top_delta="0"
+                             value="On"
+                             width="60" />
+                            <icon
+                             follows="top|left"
+                             height="18"
+                             image_name="parcel_drk_Damage"
+                             layout="topleft"
+                             left="20"
+                             name="damage_icon"
+                             top_pad="7"
+                             width="22" />
+                            <text
+                             follows="left|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="8"
+                             name="damage_label"
+                             value="Damage:"
+                             width="76" />
+                            <text
+                             follows="right|top"
+                             height="14"
+                             layout="topleft"
+                             left_pad="0"
+                             name="damage_value"
+                             top_delta="0"
+                             value="Off"
+                             width="60" />
+                            <button
+                             follows="bottom|right"
+                             height="19"
+                             label="About Land"
+                             layout="topleft"
+                             name="about_land_btn"
+                             right="-5"
+                             tab_stop="false"
+                             top="138"
+                             width="90">
+                                <click_callback
+                                 function="ShowFloater"
+                                 parameter="about_land" />
+                            </button>
+                        </panel>
+                    </scroll_container>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="region_information_tab"
+                 title="Region">
+                    <panel
+                     follows="all"
+                     height="125"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_name_label"
+                         top_pad="5"
+                         value="Region:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_name"
+                         top_delta="0"
+                         value="Mooseland"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_type_label"
+                         top_pad="5"
+                         value="Type:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_type"
+                         top_delta="0"
+                         value="Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_rating_label"
+                         top_pad="7"
+                         value="Rating:"
+                         width="80" />
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_PG"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_rating_icon"
+                         width="18" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="10"
+                         name="region_rating"
+                         value="Explicit"
+                         width="100" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_owner"
+                         top_delta="0"
+                         value="moose Van Moose"
+                         width="195" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="region_group_label"
+                         top_pad="5"
+                         value="Group:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="region_group"
+                         top_delta="0"
+                         use_ellipses="true"
+                         width="195">
+                            The Mighty Moose of mooseville soundvillemoose
+                        </text>
+                        <button
+                         follows="bottom|right"
+                         height="19"
+                         label="Region/Estate"
+                         layout="topleft"
+                         name="region_info_btn"
+                         right="-5"
+                         tab_stop="false"
+                         width="105">
+                            <click_callback
+                             function="ShowFloater"
+                             parameter="region_info" />
+                        </button>
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="estate_information_tab"
+                 title="Estate">
+                    <panel
+                     follows="all"
+                     height="189"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_name_label"
+                         top_pad="5"
+                         value="Estate:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_name"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_rating_label"
+                         top_pad="5"
+                         value="Rating:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_rating"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="estate_owner_label"
+                         top_pad="5"
+                         value="Owner:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="estate_owner"
+                         top_delta="0"
+                         width="160" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="covenant_label"
+                         top_pad="5"
+                         value="Covenant:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         handle_edit_keys_directly="true"
+                         height="90"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="covenant"
+                         read_only="true"
+                         top_pad="0"
+                         width="280" />
+                    </panel>
+                </accordion_tab>
+                <accordion_tab
+                 expanded="false"
+                 layout="topleft"
+                 name="sales_tab"
+                 title="For Sale">
+                    <panel
+                     follows="all"
+                     height="300"
+                     layout="topleft"
+                     left="0"
+                     top="0"
+                     width="290">
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sales_price_label"
+                         top_pad="5"
+                         value="Price:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="sales_price"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="area_label"
+                         top_pad="5"
+                         value="Area:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="area"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="traffic_label"
+                         top_pad="5"
+                         value="Traffic:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="traffic"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="primitives_label"
+                         top_pad="5"
+                         value="Primitives:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="primitives"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="parcel_scripts_label"
+                         top_pad="5"
+                         value="Scripts:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="parcel_scripts"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="terraform_limits_label"
+                         top_pad="5"
+                         value="Terraform limits:"
+                         width="100" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="110"
+                         name="terraform_limits"
+                         top_delta="0"
+                         width="140" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="subdivide_label"
+                         top_pad="5"
+                         value="Subdivide/Join ability:"
+                         width="220" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="subdivide"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="resale_label"
+                         top_pad="5"
+                         value="ReSale ability:"
+                         width="80" />
+                        <text_editor
+                         bg_focus_color="DkGray2"
+                         bg_readonly_color="DkGray2"
+                         follows="left|top|right"
+                         height="45"
+                         layout="topleft"
+                         left="10"
+                         max_length="65535"
+                         name="resale"
+                         read_only="true"
+                         top_pad="5"
+                         width="245" />
+                        <text
+                         follows="left|top"
+                         height="15"
+                         layout="topleft"
+                         left="10"
+                         name="sale_to_label"
+                         top_pad="5"
+                         value="For sale to:"
+                         width="80" />
+                        <text
+                         follows="left|top|right"
+                         height="15"
+                         layout="topleft"
+                         left="90"
+                         name="sale_to"
+                         top_delta="0"
+                         width="160" />
+                    </panel>
+                </accordion_tab>
+            </accordion>
+        </panel>
+    </scroll_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5aa53ab46b1049a5328516a7072a7d6b21098e46..cbbcfe50681d5c142a523c1427ef42a7b6c02d8d 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -40,14 +40,26 @@ background_visible="true"
      top_pad="10"
      width="313" />
     <panel
-     class="panel_place_info"
-     filename="panel_place_info.xml"
+     class="panel_place_profile"
+     filename="panel_place_profile.xml"
      follows="all"
      height="533"
      layout="topleft"
      left="0"
      help_topic="places_info_tab"
-     name="panel_place_info"
+     name="panel_place_profile"
+     top="5"
+     visible="false"
+     width="313" />
+    <panel
+     class="panel_landmark_info"
+     filename="panel_landmark_info.xml"
+     follows="all"
+     height="533"
+     layout="topleft"
+     left="0"
+     help_topic="places_info_tab"
+     name="panel_landmark_info"
      top="5"
      visible="false"
      width="313" />
@@ -67,7 +79,7 @@ background_visible="true"
          left="5"
          name="teleport_btn"
          top="0"
-         width="77" />
+         width="100" />
         <button
          follows="bottom|left"
          font="SansSerifSmall"
@@ -77,18 +89,7 @@ background_visible="true"
          left_pad="5"
          name="map_btn"
          top="0"
-         width="50" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmall"
-         height="19"
-         label="Share"
-         layout="topleft"
-         left_pad="5"
-         name="share_btn"
-         top="0"
-         width="60" />
+         width="70" />
         <button
          follows="bottom|left"
          font="SansSerifSmall"
@@ -98,7 +99,7 @@ background_visible="true"
          left_pad="5"
          name="edit_btn"
          top="0"
-         width="50" />
+         width="70" />
         <button
          follows="bottom|right"
          font="SansSerifSmall"
@@ -106,7 +107,6 @@ background_visible="true"
          image_disabled="ForwardArrow_Disabled"
          image_selected="ForwardArrow_Press"
          image_unselected="ForwardArrow_Off"
-         picture_style="true"
          layout="topleft"
          name="overflow_btn"
          right="-10"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 91dcdce23bb8bc44165f72e9584f21d49d50ba55..06f0710406538cd434ab7569fa0a763e5a8846ba 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -28,7 +28,19 @@
      top="10"
      name="bubble_text_chat"
      width="150" />
-
+    <color_swatch
+     border_color="0.45098 0.517647 0.607843 1"
+     can_apply_immediately="true"
+     color="0 0 0 1"
+     control_name="BackgroundChatColor"
+     follows="left|top"
+     height="47"
+     layout="topleft"
+     left_delta="280"
+     name="background"
+     tool_tip="Choose color for bubble chat"
+     top_delta="1"
+     width="44" />
     <slider
      control_name="ChatBubbleOpacity"
      follows="left|top"
@@ -37,8 +49,8 @@
      initial_value="1"
      label="Opacity"
      layout="topleft"
-     left_delta="50"
-     top_pad="5"
+     left_delta="-230"
+     top_pad="-28"
      label_width="50"
      name="bubble_chat_opacity"
      width="200" />
@@ -200,7 +212,7 @@ Avatars:
      width="256"
      top_pad="0"/>
     <check_box
-     control_name="ArrowKeysMoveAvatar"
+     control_name="ArrowKeysAlwaysMove"
      follows="left|top"
      height="20"
      label="Arrow keys always move me"
@@ -240,8 +252,8 @@ Avatars:
      width="256"
      top_pad="5"/>
     <radio_group
-	 enabled_control="ShowScriptErrors"
-	 control_name="ShowScriptErrorsLocation"
+     enabled_control="ShowScriptErrors"
+     control_name="ShowScriptErrorsLocation"
      follows="top|left"
      draw_border="false"
      height="40"
@@ -260,7 +272,7 @@ Avatars:
          width="315" />
         <radio_item
          height="16"
-         label="In window"
+         label="In a window"
          layout="topleft"
          left_delta="175"
          name="1"
@@ -269,40 +281,53 @@ Avatars:
     </radio_group>
      <check_box
      follows="top|left"
+     enabled_control="EnableVoiceChat"
+     control_name="PushToTalkToggle"
      height="20"
-     label="Use Push-to-talk in toggle mode"
+     label="Toggle mode for microphone when I press the Speak trigger key:"
      layout="topleft"
      left="30"
      name="push_to_talk_toggle_check"
      width="237"
      top_pad="-25"
-     tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/>
+     tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
     <line_editor
      follows="top|left"
+     control_name="PushToTalkButton"
+     enabled="false" 
+     enabled_control="EnableVoiceChat"
      height="19"
      left_delta="50"
      max_length="254"
      name="modifier_combo"
-     label="Push-to-talk trigger"
+     label="Push-to-Speak trigger"
      top_pad="0"
      width="280" />
     <button
-	follows="top|left"
-	height="20"
-	label="Set Key"
-	left_delta="0"
-        name="set_voice_hotkey_button"
-	width="115"
-	top_pad="5" />
+     follows="top|left"
+     enabled_control="EnableVoiceChat"
+     height="20"
+     label="Set Key"
+     left_delta="0"
+     name="set_voice_hotkey_button"
+     width="115"
+     top_pad="5">
+          <button.commit_callback
+          function="Pref.VoiceSetKey" />
+    </button>
     <button
-        bottom_delta="0"
-	follows="left"
-	font="SansSerif"
-	halign="center"
-	height="20"
-	label="Middle Mouse Button"
-	left_delta="120"
-	mouse_opaque="true"
-	name="set_voice_middlemouse_button"
-	width="160" />
+     bottom_delta="0"
+     enabled_control="EnableVoiceChat"
+     follows="left"
+     font="SansSerif"
+     halign="center"
+     height="20"
+     label="Middle Mouse Button"
+     left_delta="120"
+     mouse_opaque="true"
+     name="set_voice_middlemouse_button"
+     width="160">
+          <button.commit_callback
+          function="Pref.VoiceSetMiddleMouse" />
+    </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 159323538ca89a87ae5b4f64367ef92bb11199df..a94df4150da43eacfce0a30c66b15106dc3e931d 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -73,7 +73,6 @@
      layout="topleft"
      left_delta="137"
      name="enable_this_popup"
-     picture_style="true"
      top_pad="10"
      width="43">
         <button.commit_callback
@@ -92,7 +91,6 @@
      layout="topleft"
      left_pad="50"
      name="disable_this_popup"
-     picture_style="true"
      top_delta="0"
      width="43">
         <button.commit_callback
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 051cb51d25c63ddb8b68ce4db3ad5e84d69ea15b..645863e7a4ac804e53f4097eade5f44950ee4430 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -217,31 +217,6 @@
      width="95">
         Owner
     </text>
-    <color_swatch
-     border_color="0.45098 0.517647 0.607843 1"
-     can_apply_immediately="true"
-     color="0 0 0 1"
-     control_name="BackgroundChatColor"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="180"
-     name="background"
-     top_pad="-17"
-     width="44" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box8"
-     top_delta="5"
-     width="95">
-        Bubble
-    </text>
     <color_swatch
      border_color="0.45098 0.517647 0.607843 1"
      can_apply_immediately="true"
@@ -250,7 +225,7 @@
      follows="left|top"
      height="47"
      layout="topleft"
-     left="350"
+     left="180"
      name="links"
      top_pad="-17"
      width="44" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index ce7939c00f525ad791500c3ea07e994afe75bb4e..acf4601bfe5eaf6c2d7c8583193b582e65ff312a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -94,6 +94,7 @@
      layout="topleft"
      left="30"
      mouse_opaque="false"
+     name="Logs:"
      top_pad="10"
      width="350">
         Logs:
@@ -184,6 +185,7 @@
      layout="topleft"
      left_delta="0"
      mouse_opaque="false"
+     name="log_path_desc"
      top_pad="1"
      width="128"
      text_color="LtGray_50">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 832c9775ce2fbc6880d14b97f14ef172682676bf..d454b9e5c8dce8d2dc6dfd17c45b6332ad2f1349 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -40,7 +40,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_audio"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -86,7 +85,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_wind"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -122,7 +120,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_ui"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -158,7 +155,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_media"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -194,7 +190,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_sfx"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -230,19 +225,21 @@
      layout="topleft"
      left_pad="16"
      name="mute_music"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
-     <check_box
-     height="16"
-	 control_name ="EnableVoiceChat"
-	 disabled_control="CmdLineDisableVoice"
-     label="Enable Voice"
-     layout="topleft"
-     left="22"
+   <check_box
+     label_text.halign="left"
+     follows="right|top"
+    height="16"
+    control_name ="EnableVoiceChat"
+   disabled_control="CmdLineDisableVoice"
+     label="Voice"
+     left="50"
      name="enable_voice_check"
-     width="100">
+     top_pad="5"
+     width="110"
+     >
     </check_box>
     <slider
      control_name="AudioLevelVoice"
@@ -252,16 +249,15 @@
      height="15"
      increment="0.05"
      initial_value="0.5"
-	 label="Voice"
-     label_width="60"
+     label_width="0"
      layout="topleft"
-     left="100"
+     left="165"
+     top_delta="0"
      name="Voice Volume"
      show_text="false"
      slider_label.halign="right"
-     top_pad="-15"
      volume="true"
-     width="250">
+     width="185">
         <slider.commit_callback
          function="Pref.setControlFalse"
          parameter="MuteVoice" />
@@ -278,7 +274,6 @@
      layout="topleft"
      left_pad="16"
      name="mute_voice"
-     picture_style="true"
      tab_stop="false"
      top_delta="-2"
      width="22" />
@@ -296,7 +291,7 @@
     <icon
 	 follows="left"
 	 height="18"
-	 image_name="CameraView_Off"
+	 image_name="Cam_FreeCam_Off"
 	 name="camera_icon"
 	 mouse_opaque="false"
 	 visible="true"
@@ -323,32 +318,33 @@
          height="16"
          label="Camera position"
          left_pad="1"
-		 follows="topleft"
+	follows="topleft"
          name="0"
          top_delta="-30"
          width="200" />
         <radio_item
          height="16"
-		 follows="topleft"
+	follows="topleft"
          label="Avatar position"
          left_delta="0"
          name="1"
          top_delta="19"
          width="200" />
     </radio_group>
-    <button
-     control_name="ShowDeviceSettings"
-     follows="left|bottom"
-     height="19"
-     is_toggle="true"
-     label="Input / Output  Devices"
-     layout="topleft"
-     left="165"
-     top_pad="12"
-     name="device_settings_btn"
-     width="190" />
+  <button
+   control_name="ShowDeviceSettings"
+   follows="left|bottom"
+   height="19"
+   is_toggle="true"
+   label="Input/Output Devices"
+   layout="topleft"
+   left="165"
+   top_pad="12"
+   name="device_settings_btn"
+   width="190">
+  </button>
     <panel
-    background_visible="true"
+     background_visible="true"
      bg_alpha_color="DkGray"
      visiblity_control="ShowDeviceSettings"
      border="false"
@@ -357,8 +353,13 @@
      label="DeviceSettings"
      layout="topleft"
      left="0"
-     name="Device Settings"
+     name="device_settings_panel"
+     class="panel_voice_device_settings"
      width="501">
+      <panel.string
+        name="default_text">
+        Default
+      </panel.string>
       <icon
              height="18"
              image_name="Microphone_On"
@@ -382,6 +383,7 @@
     </text>
     <combo_box
      height="19"
+     control_name="VoiceInputAudioDevice"
      layout="topleft"
      left="165"
      max_chars="128"
@@ -400,7 +402,8 @@
      width="200">
         My volume:
     </text>
-      <slider
+      <slider_bar
+        control_name="AudioLevelMic"
      follows="left|top"
      height="17"
      increment="0.05"
@@ -492,6 +495,7 @@
         Output
     </text>
     <combo_box
+     control_name="VoiceOutputAudioDevice"
      height="19"
      layout="topleft"
      left="165"
@@ -500,17 +504,4 @@
      top_pad="0"
      width="200" />
     </panel>
-          <!-- Until new panel is hooked up to code, we need to be able to get to
-    the old window to change input devices. James -->
-  <button
-    follows="left|bottom"
-    label="Old"
-    name="legacy_device_window_btn"
-    height="16"
-    left="20"
-    top="-270"
-    width="40"
-    commit_callback.function="Floater.Show"
-    commit_callback.parameter="pref_voicedevicesettings"
-    />
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index b21fbc1795fe05e2dd8b1989f97745668e9b4b7c..3bdd7114eedaba636a4f5c019979aee0ea0e2554 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -82,7 +82,6 @@
 		  image_unselected="media_btn_back.png"
 		  layout="topleft"
 		  tool_tip="Step back"
-		  picture_style="true"
 		  width="22"
 		  top_delta="4">
 		<button.commit_callback
@@ -103,7 +102,6 @@
 		  image_unselected="media_btn_forward.png"
 		  layout="topleft"
 		  tool_tip="Step forward"
-		  picture_style="true"
 		  top_delta="0"
 		  min_width="17"
 		  width="17">
@@ -141,7 +139,6 @@
 		  image_unselected="media_btn_home.png"
 		  layout="topleft"
 		  tool_tip="Home page"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -162,7 +159,6 @@
 		  image_unselected="button_anim_stop.tga"
 		  layout="topleft"
 		  tool_tip="Stop media"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -199,7 +195,6 @@
 		  image_unselected="media_btn_reload.png"
 		  layout="topleft"
 		  tool_tip="Reload"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -219,7 +214,6 @@
 		  image_selected="media_btn_stoploading.png"
 		  image_unselected="media_btn_stoploading.png"
 		  layout="topleft"
-		  picture_style="true"
 		  tool_tip = "Stop loading"
 		  min_width="22"
 		  width="22">
@@ -241,7 +235,6 @@
 		  image_unselected="button_anim_play.tga"
 		  layout="topleft"
 		  tool_tip = "Play media"
-		  picture_style="true"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -261,8 +254,7 @@
 		  image_selected="button_anim_pause.tga"
 		  image_unselected="button_anim_pause.tga"
 		  layout="topleft"
-		  tool_tip = "Pause media"
-		  picture_style="true">
+		  tool_tip = "Pause media">
 		<button.commit_callback
 			function="MediaCtrl.Pause" />
 	  </button>
@@ -367,7 +359,6 @@ function="MediaCtrl.CommitURL" />
 		  is_toggle="true"
 		  layout="topleft"
 		  scale_image="false" 
-		  picture_style="true"
 		  tool_tip="Mute This Media"
 		  top_delta="22"
 		  min_width="24"
@@ -391,7 +382,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrollup.png"
 		  layout="topleft"
 		  tool_tip="Volume up"
-		  picture_style="true"
 		  scale_image="true"
 		  min_width="20"
 		  width="20" >
@@ -414,7 +404,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrolldown.png"
 		  layout="topleft"
 		  tool_tip="Volume down"
-		  picture_style="true"
 		  scale_image="true"
 		  min_width="20"
 		  width="20">
@@ -423,6 +412,8 @@ function="MediaCtrl.CommitURL" />
 	  </button>
 	</layout_panel>
 	<!-- Scroll pad -->
+<!--
+disabled
 	<layout_panel
 		name="media_panel_scroll"
 		auto_resize="false"
@@ -446,7 +437,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_scrollup.png"
 		  layout="topleft"
 		  tool_tip="Scroll up"
-		  picture_style="true"
 		  scale_image="false"
 		  left="12"
 		  top_delta="4"
@@ -460,7 +450,6 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left="3"
 		  tool_tip="Scroll left"
-		  picture_style="true"
 		  scale_image="false"
 		  top="12"
 		  min_width="8"
@@ -473,7 +462,6 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left_pad="9"
 		  tool_tip="Scroll right"
-		  picture_style="true"
 		  scale_image="false"
 		  top_delta="0"
 		  min_width="8"
@@ -486,12 +474,13 @@ function="MediaCtrl.CommitURL" />
 		  layout="topleft"
 		  left="12"
 		  tool_tip="Scroll down"
-		  picture_style="true"
 		  scale_image="false"
 		  top="20"
 		  min_width="8"
 		  width="8" />
 	</layout_panel>
+disabled
+-->
 	<layout_panel
 		name="zoom_frame"
 		auto_resize="false"
@@ -505,14 +494,32 @@ function="MediaCtrl.CommitURL" />
 		  image_selected="media_btn_optimalzoom.png"
 		  image_unselected="media_btn_optimalzoom.png"
 		  layout="topleft"
-		  tool_tip="Zoom"
-		  picture_style="true"
+		  tool_tip="Zoom into media"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
 			function="MediaCtrl.Zoom" />
 	  </button>
 	</layout_panel>
+	<layout_panel
+		name="close"
+		auto_resize="false"
+		user_resize="false"
+		layout="topleft"
+		min_width="21"
+		width="21" >
+	  <button
+		  height="22"
+		  image_selected="media_btn_done.png"
+		  image_unselected="media_btn_done.png"
+		  layout="topleft"
+		  tool_tip ="Zoom Back"
+		  top_delta="-4"
+		  width="21" >
+		<button.commit_callback
+			function="MediaCtrl.Close" />
+	  </button>
+	</layout_panel>
 <!--
 	<panel
 		height="22"
@@ -542,7 +549,6 @@ function="MediaCtrl.CommitURL" />
 		  image_unselected="media_btn_newwindow.png"
 		  layout="topleft"
 		  tool_tip = "Open URL in browser"
-		  picture_style="true"
 		  top_delta="-3"
 		  min_width="24"
 		  width="24" >
@@ -566,26 +572,6 @@ function="MediaCtrl.CommitURL" />
 		  width="3" />
 	</panel>
 -->
-	<layout_panel
-		name="close"
-		auto_resize="false"
-		user_resize="false"
-		layout="topleft"
-		min_width="21"
-		width="21" >
-	  <button
-		  height="22"
-		  image_selected="media_btn_done.png"
-		  image_unselected="media_btn_done.png"
-		  layout="topleft"
-		  tool_tip ="Close media control"
-		  picture_style="true"
-		  top_delta="-4"
-		  width="21" >
-		<button.commit_callback
-			function="MediaCtrl.Close" />
-	  </button>
-	</layout_panel>
 	<layout_panel
 		width="0"
 		layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 5af7d7d6744164ec208c26e39f6e7970dbadda1a..0f5e96416df6616f9cfa1cd98ecabcae1d417aca 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -31,7 +31,6 @@
      color="DkGray2"
      follows="all"
      height="485"
-     min_height="300"
      layout="topleft"
      name="profile_scroll"
      reserve_scroll_corner="true"
@@ -59,7 +58,7 @@
              default_image_name="None"
              enabled="false"
              follows="top|left"
-             height="117"
+             height="102"
              layout="topleft"
              left="0"
              name="2nd_life_pic"
@@ -81,7 +80,7 @@
              height="95"
              layout="topleft"
              left="107"
-             max_length="512"
+             textbox.max_length="512"
              name="sl_description_edit"
              top_pad="-3"
              width="173"
@@ -103,7 +102,7 @@
              default_image_name="None"
              enabled="false"
              follows="top|left"
-             height="117"
+             height="102"
              layout="topleft"
              left="0"
              name="real_world_pic"
@@ -124,7 +123,7 @@
              height="95"
              layout="topleft"
              left="107"
-             max_length="512"
+             textbox.max_length="512"
              name="fl_description_edit"
              top_pad="-3"
              width="173"
@@ -157,7 +156,7 @@
          value="http://librarianavengers.org"
          width="280"
          word_wrap="false"
-         use_elipsis="true"
+         use_ellipses="true"
          />
         <text
          follows="left|top"
@@ -295,7 +294,6 @@
          left_pad="5"
          width="45" />
         <button
-         enabled="false"
          follows="bottom|left"
          height="19"
          label="Call"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 195b7315313e6d9479f06dc09a0c9f933adb59cf..b015346a799e9981d7af002b07f7dbca563d7f4f 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -21,7 +21,6 @@
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back"
-     picture_style="true"
      left="10"
      tab_stop="false"
      top="2"
@@ -36,7 +35,7 @@
      text_color="white"
      top="0"
      value="(Loading...)"
-     use_elipsis="true"
+     use_ellipses="true"
      width="275" />
     <text
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index a312e4cf13fd4e20e15d18bfed12218ec171d050..18c2228906296b8958c7f602ff93ef398b6c85ad 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -129,7 +129,6 @@
      layout="topleft"
      left="-106"
      name="cancel_btn"
-     picture_style="true"
      top="700"
      width="90" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
index b3147f5e6bafd51ace1c6e3841c467fd5bdaf2e6..49fc930cd8ae1ba18225cf3fbd683e082b45e174 100644
--- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
@@ -103,17 +103,6 @@
      width="308">
         Last Modified Wed Dec 31 16:00:00 1969
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="covenant_help"
-     top_delta="-2"
-     width="18" />
-
     <text_editor
      enabled="false"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index 25e1171688c7a89c7c35050bae7cdb2fad4a5686..a1bca4229dcfa2cf309ad46a369d0a254b0199ac 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -40,16 +40,6 @@
      tool_tip="Disable all scripts in this region"
      top="30"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_scripts_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Disable Collisions"
@@ -59,16 +49,6 @@
      tool_tip="Disable non-avatar collisions in this region"
      top="50"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_collisions_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Disable Physics"
@@ -78,16 +58,6 @@
      tool_tip="Disable all physics in this region"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="disable_physics_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -204,16 +174,6 @@
      tool_tip="List of objects experiencing the most potential collisions"
      top="313"
      width="150" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="top_colliders_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
@@ -225,16 +185,6 @@
      tool_tip="List of objects spending the most time running scripts"
      top_pad="5"
      width="150" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="top_scripts_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
@@ -246,16 +196,6 @@
      tool_tip="Give 2 minute countdown and restart region"
      top_pad="5"
      width="130" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="restart_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index c7a60ed2e48d196acbb601abbe3015f7f493946b..add1476179191b8e1e3b021b91fddc1f275cb4b4 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -94,16 +94,6 @@ regions in the estate.
      name="use_global_time_check"
      top="132"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="use_global_time_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Fixed Sun"
@@ -112,16 +102,6 @@ regions in the estate.
      name="fixed_sun_check"
      top="152"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="120"
-     name="fixed_sun_help"
-     top_delta="2"
-     width="18" />
     <icon
      height="20"
      image_name="icon_day_cycle.tga"
@@ -151,16 +131,6 @@ regions in the estate.
      name="externally_visible_check"
      top_pad="6"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="externally_visible_help"
-     top_delta="2"
-     width="18" />
     <text
      type="string"
      length="1"
@@ -201,16 +171,6 @@ regions in the estate.
      name="voice_chat_check"
      top="304"
      width="200" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="20"
-     name="voice_chat_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Direct Teleport"
@@ -219,16 +179,6 @@ regions in the estate.
      name="allow_direct_teleport"
      top_pad="4"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="140"
-     name="allow_direct_teleport_help"
-     top_delta="2"
-     width="18" />
     <text
      type="string"
      length="1"
@@ -249,16 +199,6 @@ regions in the estate.
      name="abuse_email_address"
      top_pad="5"
      width="205" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="12"
-     name="abuse_email_address_help"
-     top_dekta="0"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -300,16 +240,6 @@ regions in the estate.
      width="200">
         Estate Managers:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="estate_manager_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -357,16 +287,6 @@ regions in the estate.
      width="200">
         Allowed Residents:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="allow_resident_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -414,16 +334,6 @@ regions in the estate.
      width="200">
         Allowed Groups:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="allow_group_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
@@ -471,16 +381,6 @@ regions in the estate.
      width="200">
         Banned Residents:
     </text>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_delta="182"
-     name="ban_resident_help"
-     top_delta="-1"
-     width="18" />
     <view_border
      bevel_style="none"
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index 160ae96fc4e0b66d7b17bd5c8052a8ff7206a52d..42c63196995b2901496c0046ec964e082c453d73 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -83,16 +83,6 @@
      name="block_terraform_check"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="terraform_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Fly"
@@ -101,16 +91,6 @@
      name="block_fly_check"
      top="90"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="fly_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Damage"
@@ -119,16 +99,6 @@
      name="allow_damage_check"
      top="110"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="damage_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Restrict Pushing"
@@ -137,16 +107,6 @@
      name="restrict_pushobject"
      top="130"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="restrict_pushobject_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Resell"
@@ -155,16 +115,6 @@
      name="allow_land_resell_check"
      top="160"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="land_resell_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Join/Divide"
@@ -173,16 +123,6 @@
      name="allow_parcel_changes_check"
      top="180"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_changes_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Land Show in Search"
@@ -192,16 +132,6 @@
      tool_tip="Let people see this region and its parcels in search results"
      top="200"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_search_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -215,16 +145,6 @@
      name="agent_limit_spin"
      top="240"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="agent_limit_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -238,16 +158,6 @@
      name="object_bonus_spin"
      top="260"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="object_bonus_help"
-     top_delta="2"
-     width="18" />
     <text
      follows="left|top"
      height="20"
@@ -280,16 +190,6 @@
          name="PG"
          value="13" />
     </combo_box>
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="access_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -299,10 +199,7 @@
      left="108"
      name="apply_btn"
      top="320"
-     width="100">
-    <button.commit_callback
-         function="RegionInfo.Cancel" />
-    </button>
+     width="100"/> 
     <button
      follows="left|top"
      height="20"
@@ -338,5 +235,8 @@
      left="250"
      name="manage_telehub_btn"
      top="70"
-     width="150" />
+     width="150">
+		<button.commit_callback
+         function="RegionInfo.ManageTelehub" />
+    </button>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
index 9b9c62dbf9d6d9928b4f60937813d8b780513233..bffd84877f701bb2ef4745d05326ca666e73084c 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
@@ -83,16 +83,6 @@
      name="block_terraform_check"
      top="70"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="terraform_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Fly"
@@ -101,16 +91,6 @@
      name="block_fly_check"
      top="90"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="fly_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Damage"
@@ -119,16 +99,6 @@
      name="allow_damage_check"
      top="110"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="damage_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Restrict Pushing"
@@ -137,16 +107,6 @@
      name="restrict_pushobject"
      top="130"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="restrict_pushobject_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Resell"
@@ -155,16 +115,6 @@
      name="allow_land_resell_check"
      top="160"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="land_resell_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Allow Land Join/Divide"
@@ -173,16 +123,6 @@
      name="allow_parcel_changes_check"
      top="180"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_changes_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Block Land Show in Search"
@@ -192,16 +132,6 @@
      tool_tip="Let people see this region and its parcels in search results"
      top="200"
      width="80" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="115"
-     name="parcel_search_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -215,16 +145,6 @@
      name="agent_limit_spin"
      top="240"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="agent_limit_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -238,16 +158,6 @@
      name="object_bonus_spin"
      top="260"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="25"
-     name="object_bonus_help"
-     top_delta="2"
-     width="18" />
     <text
      follows="left|top"
      height="20"
@@ -280,16 +190,6 @@
          name="PG"
          value="13" />
     </combo_box> 
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="access_help"
-     top_delta="2"
-     width="18" />
     <button
      enabled="false"
      follows="left|top"
@@ -299,10 +199,7 @@
      left="108"
      name="apply_btn"
      top="320"
-     width="100">
-        <button.commit_callback
-         function="RegionInfo.Cancel" />
-    </button>
+     width="100"/>
    <button
      follows="left|top"
      height="20"
@@ -338,5 +235,8 @@
      left_delta="0"
      name="manage_telehub_btn"
      top_pad="20"
-     width="150" /> 
+     width="150" >
+		<button.commit_callback
+         function="RegionInfo.ManageTelehub" />
+    </button> 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
index 148d9500bb8324e8289a0ceacaf6252357502aac..ffd51bf510fc1e60195f15cd00cbeed374fe75ac 100644
--- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
@@ -42,16 +42,6 @@
      name="water_height_spin"
      top="40"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="water_height_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -64,16 +54,6 @@
      name="terrain_raise_spin"
      top="60"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="terrain_raise_help"
-     top_delta="2"
-     width="18" />
     <spinner
      follows="left|top"
      height="20"
@@ -87,16 +67,6 @@
      name="terrain_lower_spin"
      top="80"
      width="180" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="5"
-     name="terrain_lower_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Use Estate Sun"
@@ -105,16 +75,6 @@
      name="use_estate_sun_check"
      top="35"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="use_estate_sun_help"
-     top_delta="2"
-     width="18" />
     <check_box
      height="20"
      label="Fixed Sun"
@@ -123,16 +83,6 @@
      name="fixed_sun_check"
      top="55"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="70"
-     name="fixed_sun_help"
-     top_delta="2"
-     width="18" />
     <icon
      height="20"
      image_name="icon_day_cycle.tga"
@@ -182,16 +132,6 @@
      tool_tip="Available only to estate owners, not managers"
      top_pad="60"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="download_raw_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      height="20"
@@ -202,16 +142,6 @@
      tool_tip="Available only to estate owners, not managers"
      top="243"
      width="170" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="upload_raw_help"
-     top_delta="2"
-     width="18" />
     <button
      follows="left|top"
      height="20"
@@ -222,14 +152,4 @@
      tool_tip="Set current terrain as mid-point for raise/lower limits"
      top="283"
      width="100" />
-    <button
-     follows="left|top"
-     font="SansSerifSmall"
-     height="18"
-     label="?"
-     layout="topleft"
-     left_pad="10"
-     name="bake_terrain_help"
-     top_delta="2"
-     width="18" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
index 21ecd0183977bd1c87fb4d5bda0c9b8728c19e0b..44afadf65a6df9a077e0d0c06121d6e39780b1c7 100644
--- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
+++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
@@ -56,7 +56,6 @@
      layout="topleft"
      left="2"
      name="less"
-     picture_style="true"
      tab_stop="false"
      top="0"
      width="132" />
@@ -70,7 +69,6 @@
      layout="topleft"
      left_pad="2"
      name="more"
-     picture_style="true"
      tab_stop="false"
      top_delta="0"
      width="132" />
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 3f64c9c633f4ff4e714e9337f6a84abd1616698d..a9874f45530eb20b8a023079ab9fb8ec82d59ab1 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<!-- Side tray cannot show background because it is always 
+<!-- Side tray cannot show background because it is always
 	partially on screen to hold tab buttons. -->
 <side_tray
   name="sidebar"
@@ -10,7 +10,7 @@
 >
   <!-- Individual tabs must show background to have seemless
 	appearance up to tray panel header word like "Home".
-	Embedded panels are inset by a pixel and so their 
+	Embedded panels are inset by a pixel and so their
 	backgrounds will not block the world fully. -->
   <sidetray_tab
     name="sidebar_home"
@@ -70,7 +70,7 @@
 
     </panel_container>
   </sidetray_tab>
-  
+
   <sidetray_tab
     name="sidebar_places"
     help_topic="sidebar_places"
@@ -128,4 +128,23 @@
       />
   </sidetray_tab>
 
+  <sidetray_tab
+    name="sidebar_inventory"
+    help_topic="sidebar_inventory"
+    tab_title="Inventory"
+    description="Browse your inventory."
+    image="TabIcon_Things_Off"
+    image_selected="TabIcon_Things_Selected"
+    mouse_opaque="false"
+    background_visible="true"
+  >
+      <panel
+        class="sidepanel_inventory"
+        name="sidepanel_inventory"
+        filename="sidepanel_inventory.xml"
+        label="Edit Inventory"
+        font="SansSerifBold"
+      />
+  </sidetray_tab>
+
 </side_tray>
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
index 9845a9eb78e219031364fcbad9b17f7011bd0e17..0a9c70303e1b81d046e45f5f8c98807b4acfb871 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
@@ -19,16 +19,17 @@
      top="4"
      value="Side Panel"
      width="255" />
-    <button
+     <button
      follows="left|right|top"
-     font="SansSerif"
-     height="23"
-     label="?"
+     height="16"
+     image_selected="Icon_Help_Press"
+     image_unselected="Icon_Help_Foreground"
+     image_disabled="Icon_Help_Press"
      layout="topleft"
      name="show_help"
-     top="5"
-     right="-8"
-     width="28"
+     top="10"
+     right="-11"
+     width="16"
      tool_tip="Show Help">
         <button.commit_callback
          function="Button.ShowHelp" />
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index 247054772e1f1a74dd7c90382ac070ceb69b59eb..9636e321870a9edab4944ca0df262dc0ba893e81 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -12,7 +12,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top="17"
@@ -42,7 +42,7 @@
          width="20" />
         <text
          follows="left|right|bottom"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -59,7 +59,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -89,7 +89,7 @@
          image_name="TabIcon_Places_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -106,7 +106,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -136,7 +136,7 @@
          image_name="TabIcon_Me_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -153,7 +153,7 @@
      bg_alpha_color="DkGray2"
      class="panel_sidetray_home_info"
      follows="left|top|right"
-     height="120"
+     height="90"
      layout="topleft"
      left="15"
      top_pad="15"
@@ -183,7 +183,7 @@
          image_name="TabIcon_Appearance_Selected"/>
         <text
          follows="all"
-         height="120"
+         height="90"
          layout="topleft"
          left="10"
          mouse_opaque="false"
@@ -195,4 +195,51 @@
             Change your appearance and current look.
         </text>
     </panel>
+    <panel
+     background_visible="true"
+     bg_alpha_color="DkGray2"
+     class="panel_sidetray_home_info"
+     follows="left|top|right"
+     height="90"
+     layout="topleft"
+     left="15"
+     top_pad="15"
+     name="sidebar_inventory"
+     width="303">
+        <text
+         follows="left|right|top"
+         font="SansSerifBigBold"
+         height="30"
+         layout="topleft"
+         left="10"
+         mouse_opaque="false"
+         name="tab_name"
+         text_color="EmphasisColor"
+         top="10"
+         value="My Inventory"
+         width="200"
+         word_wrap="true" />
+        <icon
+         follows="top|right"
+         height="20"
+         layout="topleft"
+         name="tab_icon"
+         right="-10"
+         top="10"
+         width="20"
+         image_name="TabIcon_Inventory_Selected"/>
+        <text
+         follows="all"
+         height="90"
+         layout="topleft"
+         left="10"
+         mouse_opaque="false"
+         name="tab_description"
+         right="-10"
+         text_color="white"
+         top="40"
+         word_wrap="true">
+            Browse your inventory.
+        </text>
+    </panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
index c8703aa895ac3be7e1a1458be6084a1a09f56fb5..b48943c6994fb6e17979c3bd72bb8d0130955fff 100644
--- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
@@ -5,7 +5,7 @@
  layout="topleft"
  name="panel_stand_stop_flying"
  mouse_opaque="false"
- visible="false"
+ visible="true"
  width="115">
     <button
      follows="left|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 7b9c9f47a2fe1a7463139adc05e4fa71629a741d..1171a8f0b5d8a20ae6630a11778e873c3d706d83 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -3,7 +3,7 @@
  background_opaque="true"
  background_visible="true"
  bg_opaque_color="MouseGray"
- follows="top|left|right"
+ follows="all"
  height="19"
  layout="topleft"
  left="0"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index 4169c6245b18837245480f4ee1e869109002445f..01204ba7795faef7c062c44cd92615074f9f65b8 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -10,12 +10,10 @@
      name="history_accordion"
      width="380">
 	    <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="today"
          title="Today">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -26,12 +24,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="yesterday"
          title="Yesterday">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -42,12 +38,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="2_days_ago"
          title="2 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -58,12 +52,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="3_days_ago"
          title="3 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -74,12 +66,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="4_days_ago"
          title="4 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -90,12 +80,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="5_days_ago"
          title="5 days ago">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -106,12 +94,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="6_days_and_older"
          title="6 days and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -122,12 +108,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="1_month_and_older"
          title="1 month and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -138,12 +122,10 @@
 	        </flat_list_view>
 	    </accordion_tab>
         <accordion_tab
-         can_resize="false"
          layout="topleft"
          name="6_months_and_older"
          title="6 months and older">
             <flat_list_view
-             draw_heading="false"
              follows="all"
              height="150"
              layout="topleft"
@@ -176,7 +158,6 @@
          layout="topleft"
          left="10"
          name="gear_btn"
-         picture_style="true"
          top="5"
          width="18" />
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index f559343b34a6d2c4c2571dc9719a6dec93fc4595..1f67a0a7328bbf6eeda16fd0bc0dffad078f9377 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -47,17 +47,6 @@
      top="4"
      value="..."
      width="242" />
-    <button
-     follows="right"
-     height="16"
-     image_pressed="Info_Press"
-     image_unselected="Info_Over"
-     left_pad="3"
-     right="-31"
-     name="info_btn"
-     picture_style="true"
-     top_delta="-2"
-     width="16" />
     <button
      follows="right"
      height="20"
@@ -66,7 +55,7 @@
      left_pad="5"
      right="-3"
      name="profile_btn"
-     picture_style="true"
      top_delta="-2"
+     visible="false"
      width="20" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cbcc3f10ad2a7828edf69a0f7d1a8f646a3f2db8
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	  background_visible="true"
+	  follows="all"
+	  height="570"
+	  label="Things"
+	  layout="topleft"
+	  min_height="350"
+	  min_width="240"
+	  name="objects panel"
+	  width="333">
+	 <panel
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 name="sidepanel__inventory_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="true"
+		 width="330">
+		<panel
+			 class="panel_main_inventory"
+			 filename="panel_main_inventory.xml"
+			 follows="all"
+			 layout="topleft"
+			 left="0"
+			 name="panel_main_inventory"
+			 top="0"
+			 label=""
+			 height="500"
+			 width="330" />
+		<panel
+			 height="25"
+			 layout="bottomright"
+			 help_topic="item_button_tab"
+			 name="button_panel"
+			 left="5"
+			 bottom="5"
+			 width="313">
+			<button
+				 enabled="true"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Info"
+				 layout="topleft"
+				 left="0"
+				 name="info_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="true"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Share"
+				 layout="topleft"
+				 left_pad="5"
+				 name="share_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Wear"
+				 layout="topleft"
+				 left="130"
+				 name="wear_btn"
+				 top="0"
+				 width="60" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Play"
+				 layout="topleft"
+				 name="play_btn"
+				 left="130"
+				 top="0"
+				 width="50" />
+			<button
+				 enabled="false"
+				 follows="bottom|left"
+				 font="SansSerifSmallBold"
+				 height="25"
+				 label="Teleport"
+				 layout="topleft"
+				 left="130"
+				 name="teleport_btn"
+				 top="0"
+				 width="77" />
+		</panel>
+	</panel>
+
+	<panel
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 class="sidepanel_item_info"
+		 filename="sidepanel_item_info.xml"
+		 name="sidepanel__item_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="false"
+		 width="330">
+	</panel>
+
+	<panel
+		 follows="all"
+		 layout="topleft"
+		 left="0"
+		 class="sidepanel_task_info"
+		 filename="sidepanel_task_info.xml"
+		 name="sidepanel__task_panel"
+		 top="0"
+		 label=""
+		 height="570"
+		 visible="false"
+		 width="330">
+	</panel>
+
+</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..39cd75074e566795af344c8f71a1066e712ac167
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -0,0 +1,511 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	 auto_tile="true"
+	 height="570"
+	 layout="topleft"
+	 name="item properties"
+	 help_topic="item_properties"
+	 save_rect="true"
+	 title="Inventory Item Properties"
+	 width="333">
+	<panel.string
+		 name="unknown">
+        (unknown)
+	</panel.string>
+	<panel.string
+		 name="public">
+        (public)
+    </panel.string>
+	<panel.string
+    	 name="you_can">
+        You can:
+    </panel.string>
+	<panel.string
+    	 name="owner_can">
+        Owner can:
+    </panel.string>
+	<panel.string
+    	 name="acquiredDate">
+        [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
+	</panel.string>
+	<icon
+     	 follows="top|right"
+     	 height="18"
+     	 image_name="Lock"
+	     layout="topleft"
+		 right="-50"
+	     mouse_opaque="true"
+	     name="IconLocked"
+	     top="4"
+	     width="18" />
+    <button
+	     follows="top|right"
+	     height="25"
+	     image_overlay="BackArrow_Off"
+	     layout="topleft"
+	     name="back_btn"
+	     picture_style="true"
+	     right="-5"
+	     tab_stop="false"
+	     top="0"
+	     width="25" />
+	<panel
+         follows="all"
+         height="500"
+         label=""
+         layout="topleft"
+         left="5"
+         help_topic=""
+         top="30"
+		 border="1"
+         width="313">
+	    <text	 	 	 
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="10"
+		     layout="topleft"
+		     left="5"
+		     name="LabelItemNameTitle"
+		     top="5"
+		     width="78">
+	        Name:
+	    </text>
+    	<line_editor
+		     border_style="line"
+		     border_thickness="1"
+	    	 follows="left|top|right"
+		     height="16"
+		     layout="topleft"
+	    	 left_delta="78"
+		     max_length="63"
+		     name="LabelItemName"
+	    	 top_delta="0"
+		     width="225" />
+	    <text
+		     type="string"
+		     length="1"
+	    	 follows="left|top"
+	    	 height="10"
+		     layout="topleft"
+    		 left="5"
+		     name="LabelItemDescTitle"
+    		 top_delta="20"
+	    	 width="78">
+	        Description:
+	    </text>
+	    <line_editor
+		     border_style="line"
+    		 border_thickness="1"
+	    	 follows="left|top|right"
+	    	 height="16"
+		     layout="topleft"
+    		 left_delta="78"
+		     max_length="127"
+    		 name="LabelItemDesc"
+	    	 top_delta="0"
+	    	 width="225" />
+	    <text
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="16"
+		     layout="topleft"
+		     left="10"
+		     name="LabelCreatorTitle"
+		     top="65"
+		     width="78">
+	        Creator:
+    	</text>
+	    <text
+		     type="string"
+		     length="1"
+		     follows="left|top"
+		     height="16"
+		     layout="topleft"
+		     left_delta="78"
+		     name="LabelCreatorName"
+		     top_delta="0"
+		     width="200">
+	        Nicole Linden
+	     </text>
+	     <button
+			 follows="top|right"
+			 font="SansSerifSmall"
+			 height="16"
+			 label="Profile..."
+			 layout="topleft"
+			 left_delta="144"
+			 name="BtnCreator"
+			 top_delta="0"
+			 width="78" />
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="LabelOwnerTitle"
+			 top="85"
+			 width="78">
+			    Owner:
+	     </text>
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="LabelOwnerName"
+			 top_delta="0"
+			 width="200">
+			    Thrax Linden
+	     </text>
+	     <button
+			 follows="top|right"
+			 font="SansSerifSmall"
+			 height="16"
+			 label="Profile..."
+			 layout="topleft"
+			 left_delta="144"
+			 name="BtnOwner"
+			 top_delta="0"
+			 width="78" />
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="LabelAcquiredTitle"
+			 top="105"
+			 width="78">
+			Acquired:
+	     </text>
+	     <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="LabelAcquiredDate"
+			 top_delta="0"
+			 width="252">
+			Wed May 24 12:50:46 2006
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="OwnerLabel"
+			 top="125"
+			 width="78">
+			You:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Edit"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckOwnerModify"
+			 top_delta="0"
+			 width="78" />
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckOwnerCopy"
+			 top_pad="5"
+			 width="88" />
+	    <check_box
+			 height="16"
+			 label="Resell"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckOwnerTransfer"
+			 top_pad="5"
+			 width="106" />
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="AnyoneLabel"
+			 top_pad="5"
+			 width="78">
+			Anyone:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckEveryoneCopy"
+			 top_delta="0"
+			 width="130" />
+    	<text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="GroupLabel"
+			 top_pad="5"
+			 width="78">
+			Group:
+    	</text>
+	    <check_box
+			 height="16"
+			 label="Share"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckShareWithGroup"
+			 top_delta="5"
+			 width="106" />
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="NextOwnerLabel"
+			 top_pad="5"
+			 width="78">
+			Next owner:
+	    </text>
+	    <check_box
+			 height="16"
+			 label="Edit"
+			 layout="topleft"
+			 left_pad="5"
+			 name="CheckNextOwnerModify"
+			 top_delta="0"
+			 width="78" />
+	    <check_box
+			 height="16"
+			 label="Copy"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckNextOwnerCopy"
+			 top_pad="5"
+			 width="88" />
+	    <check_box
+			 height="16"
+			 label="Resell"
+			 layout="topleft"
+			 left_delta="0"
+			 name="CheckNextOwnerTransfer"
+			 top_pad="5"
+			 width="106" />
+	    <check_box
+			 height="16"
+			 label="For Sale"
+			 layout="topleft"
+			 left="10"
+			 name="CheckPurchase"
+			 top_pad="5"
+			 width="78" />
+		<combo_box
+			 height="19"
+			 left_pad="5"
+			 layout="topleft"
+			 follows="left|top"
+			 name="combobox sale copy"
+			 width="90">
+			<combo_box.item
+			     label="Copy"
+			     name="Copy"
+			     value="Copy" />
+			<combo_box.item
+			     label="Original"
+			     name="Original"
+			     value="Original" />
+	    </combo_box>
+	    <spinner
+			    follows="left|top"
+			    decimal_digits="0"
+			    increment="1"
+			    control_name="Edit Cost"
+			    name="Edit Cost"
+			    label="Price: L$"
+			    label_width="60"
+			    left="10"
+			    width="180"
+			    min_val="1"
+			    height="19"
+			    max_val="999999999"
+			    top_pad="5"/>
+	    <!--line_editor
+			 border_style="line"
+			 border_thickness="1"
+			 follows="left|top|right"
+			 height="16"
+			 layout="topleft"
+			 left_pad="5"
+			 max_length="25"
+			 name="EditPrice"
+			 top_delta="0"
+			 width="242" /-->
+	    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="BaseMaskDebug"
+			 top="155"
+			 width="330">
+			B:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="OwnerMaskDebug"
+			 top_delta="0"
+			 width="270">
+			O:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="GroupMaskDebug"
+			 top_delta="0"
+			 width="210">
+			G:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="EveryoneMaskDebug"
+			 top_delta="0"
+			 width="150">
+			E:
+	    </text>
+	    <text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left_delta="60"
+			 name="NextMaskDebug"
+			 top_delta="0"
+			 width="90">
+			N:
+	    </text-->
+			    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="10"
+			 layout="topleft"
+			 left="10"
+			 name="SaleLabel"
+			 top_pad="5"
+			 width="330">
+			Mark Item:
+	    </text-->
+	    <!--radio_group
+			 draw_border="false"
+			 follows="left|top|right"
+			 height="16"
+			 layout="topleft"
+			 left_delta="78"
+			 name="RadioSaleType"
+			 top_delta="0"
+			 width="252">
+			    <radio_item
+			     height="16"
+			     label="Original"
+			     layout="topleft"
+			     left="0"
+			     name="radio"
+			     top="0"
+			     width="70" />
+			    <radio_item
+			     height="16"
+			     label="Copy"
+			     layout="topleft"
+			     left_delta="60"
+			     name="radio2"
+			     top_delta="0"
+			     width="70" />
+	    </radio_group-->
+	    <!--text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="TextPrice"
+			 top_pad="5"
+			 width="78">
+			Price: L$
+	    </text-->
+	</panel>
+    <panel
+		 height="25"
+		 layout="bottomright"
+		 help_topic="button_tab"
+		 name="button_panel"
+		 left="5"
+		 bottom="5"
+		 width="313">
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Edit"
+		     layout="topleft"
+		     left="0"
+		     name="edit_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Cancel"
+		     layout="topleft"
+		     name="cancel_btn"
+		     right="-1"
+		     top="0"
+		     width="70" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Save"
+		     layout="topleft"
+		     name="save_btn"
+		     left_pad="-135"
+		     top="0"
+		     width="60" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8eb22541126304100d4f973b00110174e5ffd11a
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -0,0 +1,547 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	 auto_tile="true"
+	 height="570"
+	 layout="topleft"
+	 name="object properties"
+	 help_topic="object_properties"
+	 save_rect="true"
+	 title="Object Properties"
+	 width="333">
+	 <panel.string
+	  name="text deed continued">
+		Deed
+	 </panel.string>
+	<panel.string
+	 name="text deed">
+		Deed
+	</panel.string>
+            <panel.string
+             name="text modify info 1">
+                You can modify this object
+            </panel.string>
+            <panel.string
+             name="text modify info 2">
+                You can modify these objects
+            </panel.string>
+            <panel.string
+             name="text modify info 3">
+                You can't modify this object
+            </panel.string>
+            <panel.string
+             name="text modify info 4">
+                You can't modify these objects
+            </panel.string>
+            <panel.string
+             name="text modify warning">
+                This object has linked parts
+            </panel.string>
+            <panel.string
+             name="Cost Default">
+                Price: L$
+            </panel.string>
+            <panel.string
+             name="Cost Total">
+                Total Price: L$
+            </panel.string>
+            <panel.string
+             name="Cost Per Unit">
+                Price Per: L$
+            </panel.string>
+            <panel.string
+             name="Cost Mixed">
+                Mixed Price
+            </panel.string>
+            <panel.string
+             name="Sale Mixed">
+                Mixed Sale
+            </panel.string>
+    <button
+	     follows="top|right"
+	     height="25"
+	     image_overlay="BackArrow_Off"
+	     layout="topleft"
+	     name="back_btn"
+	     picture_style="true"
+	     right="-5"
+	     tab_stop="false"
+	     top="0"
+	     width="25" />
+	<panel
+         follows="all"
+         height="500"
+         label=""
+         layout="topleft"
+         left="5"
+         help_topic=""
+         top="30"
+		 border="1"
+         width="313">
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="Name:"
+             top_pad="5"
+             width="90">
+                Name:
+            </text>
+            <line_editor
+             follows="left|top|right"
+             height="19"
+             layout="topleft"
+             left_pad="0"
+             max_length="63"
+             name="Object Name"
+             select_on_focus="true"
+             top_delta="0"
+             width="170" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="Description:"
+             top_pad="3"
+             width="90">
+                Description:
+            </text>
+            <line_editor
+             follows="left|top|right"
+             height="19"
+             layout="topleft"
+             left_pad="0"
+             max_length="127"
+             name="Object Description"
+             select_on_focus="true"
+             top_delta="0"
+             width="170" />
+            <text
+             type="string"
+             left="10"
+             length="1"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Creator:"
+             width="90">
+                Creator:
+            </text>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             left_pad="0"
+             height="19"
+             layout="topleft"
+             name="Creator Name"
+             width="175">
+                Esbee Linden
+            </text>
+            <text
+             type="string"
+             length="1"
+             left="10"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Owner:"
+             width="90">
+                Owner:
+            </text>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="19"
+             layout="topleft"
+             name="Owner Name"
+             left_pad="0"
+             width="175">
+                Erica Linden
+            </text>
+           <text
+             type="string"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left="10"
+             height="18"
+             name="Group:"
+             top_pad="4"
+             width="75">
+                Group:
+            </text>
+            <button
+			 follows="top|left"
+			 height="10"
+			 image_disabled="Activate_Checkmark"
+			 image_selected="Activate_Checkmark"
+			 image_unselected="Activate_Checkmark"
+			 image_color="White_50"
+			 layout="topleft"
+			 left_pad="0"
+			 top_delta="0"
+			 name="button set group"
+			 picture_style="true"
+			 tab_stop="false"
+			 tool_tip="Choose a group to share this object's permissions"
+			 width="10" />
+            <name_box
+             follows="left|top"
+             height="18"
+             initial_value="Loading..."
+             layout="topleft"
+             left_pad="5"
+             top_delta="-1"
+             name="Group Name Proxy"
+             width="150" />
+            <button
+             follows="top|left"
+             font="SansSerifSmall"
+             height="20"
+             label="Deed"
+             label_selected="Deed"
+             layout="topleft"
+             name="button deed"
+             top_pad="0"
+             left="100"
+             tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
+             width="80" />
+            <check_box
+             height="19"
+             follows="left|top"
+             label="Share"
+             layout="topleft"
+             name="checkbox share with group"
+             tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
+             left_pad="3"
+             width="100" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="16"
+             layout="topleft"
+             top_pad="15"
+             left="10"
+             name="label click action"
+             width="90">
+                Click to:
+            </text>
+            <combo_box
+             follows="left|top"
+             height="20"
+             layout="topleft"
+             name="clickaction"
+             width="168"
+             left_pad="0">
+                <combo_box.item
+                 label="Touch  (default)"
+                 name="Touch/grab(default)"
+                 value="Touch/grab (default)" />
+                <combo_box.item
+                 label="Sit on object"
+                 name="Sitonobject"
+                 value="Sit on object" />
+                <combo_box.item
+                 label="Buy object"
+                 name="Buyobject"
+                 value="Buy object" />
+                <combo_box.item
+                 label="Pay object"
+                 name="Payobject"
+                 value="Pay object" />
+                <combo_box.item
+                 label="Open"
+                 name="Open"
+                 value="Open" />
+            </combo_box>
+            <check_box
+             height="16"
+             top_pad="15"
+             label="For Sale:"
+             layout="topleft"
+             name="checkbox for sale"
+             left="10"
+             width="90" />
+<!-- NEW SALE TYPE COMBO BOX -->
+      <combo_box
+            left_pad="0"
+            layout="topleft"
+            follows="left|top"
+            allow_text_entry="false"
+            height="20"
+            intial_value="2"
+            max_chars="20"
+            mouse_opaque="true"
+            name="sale type"
+            width="158">
+        <combo_box.item
+           name="Copy"
+           label="Copy"
+           value="2" />
+        <combo_box.item
+           name="Contents"
+           label="Contents"
+           value="3" />
+        <combo_box.item
+           name="Original"
+           label="Original"
+           value="1" />
+      </combo_box>
+<!-- NEW PRICE SPINNER -->
+      <spinner
+        follows="left|top"
+        decimal_digits="0"
+        increment="1"
+        top_pad="8"
+        left="100"
+        control_name="Edit Cost"
+        name="Edit Cost"
+        label="Price: L$"
+        label_width="65"
+        width="150"
+        min_val="1"
+        height="20"
+        max_val="999999999" />
+      <check_box
+	   height="15"
+	   width="110"
+	   top_pad="3"
+	   label="Show in search"
+       layout="topleft"
+	   left="100"
+       name="search_check"
+       tool_tip="Let people see this object in search results" />
+		<panel
+         border="false"
+         follows="left|top"
+         layout="topleft"
+         mouse_opaque="false"
+         background_visible="true"
+         bg_alpha_color="DkGray"
+         name="perms_build"
+         left="0"
+         top="241"
+         height="120"
+         width="278">
+            <text
+             type="string"
+             length="1"
+             left="10"
+             top_pad="9"
+             text_color="EmphasisColor"
+             height="16"
+             follows="left|top|right"
+             layout="topleft"
+             name="perm_modify"
+             width="250">
+                You can modify this object
+            </text>
+            <text
+               type="string"
+               follows="left|top"
+               name="Anyone can:"
+               width="250"
+               left="10">
+                 Anyone:
+            </text>
+            <check_box
+             height="19"
+             label="Move"
+             layout="topleft"
+             name="checkbox allow everyone move"
+             left="15"
+             width="85" />
+            <check_box
+             height="19"
+             label="Copy"
+             layout="topleft"
+             left_pad="0"
+             name="checkbox allow everyone copy"
+             width="90" />
+            <text
+               type="string"
+               follows="left|top"
+               height="19"
+               name="Next owner can:"
+               width="250"
+               left="10">
+                  Next owner:
+            </text>
+            <check_box
+             follows="left|top|right"
+             label="Modify"
+             layout="topleft"
+             left="15"
+             name="checkbox next owner can modify"
+             width="85" />
+            <check_box
+             follows="left|top|right"
+             height="19"
+             label="Copy"
+             layout="topleft"
+             left_pad="0"
+             name="checkbox next owner can copy"
+             width="90" />
+            <check_box
+             follows="left|top|right"
+             height="19"
+             label="Transfer"
+             layout="topleft"
+             name="checkbox next owner can transfer"
+             left_pad="0"
+             top_delta="0"
+             tool_tip="Next owner can give away or resell this object"
+             width="90" />
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             top_pad="5"
+             follows="left|top"
+             layout="topleft"
+             left="10"
+             name="B:"
+             height="10"
+             width="45">
+                B:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="O:"
+             height="10"
+             width="44">
+                O:
+            </text>
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="G:"
+             height="10"
+             width="43">
+                G:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             left_pad="0"
+             layout="topleft"
+             name="E:"
+             height="10"
+             width="43">
+                E:
+            </text>
+            <text
+             type="string"
+             text_color="EmphasisColor"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="N:"
+             height="10"
+             width="48">
+                N:
+            </text>
+            <text
+             type="string"
+             text_color="White"
+             length="1"
+             follows="left|top"
+             layout="topleft"
+             left_pad="0"
+             name="F:"
+             height="10"
+             width="50">
+                F:
+            </text>
+		</panel>
+ </panel>
+    <panel
+		 height="25"
+		 layout="bottomright"
+		 help_topic="button_tab"
+		 name="button_panel"
+		 left="5"
+		 bottom="5"
+		 width="313">
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Edit"
+		     layout="topleft"
+		     left="0"
+		     name="edit_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Open"
+		     layout="topleft"
+		     left_pad="5"
+		     name="open_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Pay"
+		     layout="topleft"
+		     left_pad="5"
+		     name="pay_btn"
+		     top="0"
+		     width="50" />
+	    <button
+		     follows="bottom|left"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Buy"
+		     layout="topleft"
+		     left_pad="5"
+		     name="buy_btn"
+		     top="0"
+		     width="60" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Cancel"
+		     layout="topleft"
+		     name="cancel_btn"
+		     right="-1"
+		     top="0"
+		     width="70" />
+	    <button
+		     follows="bottom|right"
+		     font="SansSerifSmallBold"
+		     height="25"
+		     label="Save"
+		     layout="topleft"
+		     name="save_btn"
+		     left_pad="-135"
+		     top="0"
+		     width="60" />
+	</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index a1f8a9a08d5f7c4d7bdef22d4118eb909b8ac0fd..2fdc8337c893a8b5066f1215789ba911955e93b4 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -73,8 +73,13 @@
 	<string name="TooltipParcelUrl">Click to view this parcel's description</string>
 	<string name="TooltipTeleportUrl">Click to teleport to this location</string>
 	<string name="TooltipObjectIMUrl">Click to view this object's description</string>
+	<string name="TooltipMapUrl">Click to view this location on a map</string>
 	<string name="TooltipSLAPP">Click to run the secondlife:// command</string>
 	<string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />
+
+	<!-- text for SLURL labels -->
+	<string name="SLurlLabelTeleport">Teleport to</string>
+	<string name="SLurlLabelShowOnMap">Show Map for</string>
 	
 	<!-- ButtonToolTips, llfloater.cpp -->
 	<string name="BUTTON_CLOSE_DARWIN">Close (&#8984;W)</string>
@@ -2043,9 +2048,6 @@ this texture in your inventory
 	<!-- panel contents -->
 	<string name="PanelContentsNewScript">New Script</string>
 	
-	<!-- panel avatar -->
-	<!-- <string name="None">None</string>	Duplicate-->
-	
 	<!-- Mute -->
 	<string name="MuteByName">(by name)</string>
 	<string name="MuteAgent">(resident)</string>
@@ -2302,9 +2304,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Body Thick">Body Thick</string>
 <string name="Body Thickness">Body Thickness</string>
 <string name="Body Thin">Body Thin</string>
-<string name="Bottom">Bottom</string>
-<string name="Bottom Left">Bottom Left</string>
-<string name="Bottom Right">Bottom Right</string>
 
 <string name="Bow Legged">Bow Legged</string>
 <string name="Breast Buoyancy">Breast Buoyancy</string>
@@ -2326,13 +2325,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="no bustle">No Bustle</string>
 <string name="more bustle">More Bustle</string>
 
-<string name="Center">Center</string>
-<string name="Center 2">Center 2</string>
 <string name="Chaplin">Chaplin</string>
 <string name="Cheek Bones">Cheek Bones</string>
-<string name="Chest">Chest</string>
 <string name="Chest Size">Chest Size</string>
-<string name="Chin">Chin</string>
 <string name="Chin Angle">Chin Angle</string>
 <string name="Chin Cleft">Chin Cleft</string>
 <string name="Chin Curtains">Chin Curtains</string>
@@ -2496,22 +2491,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Jowls">Jowls</string>
 <string name="Knee Angle">Knee Angle</string>
 <string name="Knock Kneed">Knock Kneed</string>
-<string name="L Forearm">L Forearm</string>
-<string name="L Lower Leg">L Lower Leg</string>
-<string name="L Upper Arm">L Upper Arm</string>
-<string name="L Upper Leg">L Upper Leg</string>
 
 <string name="Large">Large</string>
 <string name="Large Hands">Large Hands</string>
-<string name="Left">Left</string>
-<string name="Left Ear">Left Ear</string>
-<string name="Left Eyeball">Left Eyeball</string>
-<string name="Left Foot">Left Foot</string>
-<string name="Left Hand">Left Hand</string>
-<string name="Left Hip">Left Hip</string>
 <string name="Left Part">Left Part</string>
-<string name="Left Pec">Left Pec</string>
-<string name="Left Shoulder">Left Shoulder</string>
 <string name="Leg Length">Leg Length</string>
 <string name="Leg Muscles">Leg Muscles</string>
 <string name="Less">Less</string>
@@ -2529,7 +2512,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Less Square">Less Square</string>
 <string name="Less Volume">Less Volume</string>
 <string name="Less soul">Less soul</string>
-<string name="Light">Light</string>
 <string name="Lighter">Lighter</string>
 <string name="Lip Cleft">Lip Cleft</string>
 <string name="Lip Cleft Depth">Lip Cleft Depth</string>
@@ -2592,7 +2574,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="More soul">More soul</string>
 <string name="Moustache">Moustache</string>
 
-<string name="Mouth">Mouth</string>
 <string name="Mouth Corner">Mouth Corner</string>
 <string name="Mouth Position">Mouth Position</string>
 <string name="Mowhawk">Mowhawk</string>
@@ -2620,10 +2601,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="No Spikes">No Spikes</string>
 <string name="No White">No White</string>
 <string name="No Wrinkles">No Wrinkles</string>
-<string name="None">None</string>
 <string name="Normal Lower">Normal Lower</string>
 <string name="Normal Upper">Normal Upper</string>
-<string name="Nose">Nose</string>
 <string name="Nose Left">Nose Left</string>
 <string name="Nose Right">Nose Right</string>
 <string name="Nose Size">Nose Size</string>
@@ -2663,7 +2642,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Part">Part</string>
 <string name="Part Bangs">Part Bangs</string>
 <string name="Pectorals">Pectorals</string>
-<string name="Pelvis">Pelvis</string>
 <string name="Pigment">Pigment</string>
 <string name="Pigtails">Pigtails</string>
 <string name="Pink">Pink</string>
@@ -2679,24 +2657,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Pop Right Eye">Pop Right Eye</string>
 <string name="Puffy">Puffy</string>
 <string name="Puffy Eyelids">Puffy Eyelids</string>
-<string name="R Forearm">R Forearm</string>
-<string name="R Lower Leg">R Lower Leg</string>
-<string name="R Upper Arm">R Upper Arm</string>
-<string name="R Upper Leg">R Upper Leg</string>
 <string name="Rainbow Color">Rainbow Color</string>
 <string name="Red Hair">Red Hair</string>
 <string name="Red Skin">Red Skin</string>
 <string name="Regular">Regular</string>
 <string name="Regular Muscles">Regular Muscles</string>
-<string name="Right">Right</string>
-<string name="Right Ear">Right Ear</string>
-<string name="Right Eyeball">Right Eyeball</string>
-<string name="Right Foot">Right Foot</string>
-<string name="Right Hand">Right Hand</string>
-<string name="Right Hip">Right Hip</string>
 <string name="Right Part">Right Part</string>
-<string name="Right Pec">Right Pec</string>
-<string name="Right Shoulder">Right Shoulder</string>
 <string name="Rosy Complexion">Rosy Complexion</string>
 <string name="Round">Round</string>
 <string name="Round Forehead">Round Forehead</string>
@@ -2753,7 +2719,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Skinny Neck">Skinny Neck</string>
 <string name="Skirt Fit">Skirt Fit</string>
 <string name="Skirt Length">Skirt Length</string>
-<string name="Skull">Skull</string>
 <string name="Slanted Forehead">Slanted Forehead</string>
 <string name="Sleeve Length">Sleeve Length</string>
 
@@ -2776,12 +2741,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 
 <string name="Sparse">Sparse</string>
 <string name="Spiked Hair">Spiked Hair</string>
-<string name="Spine">Spine</string>
 <string name="Square">Square</string>
 <string name="Square Toe">Square Toe</string>
 <string name="Squash Head">Squash Head</string>
 <string name="Squash/Stretch Head">Squash/Stretch Head</string>
-<string name="Stomach">Stomach</string>
 <string name="Stretch Head">Stretch Head</string>
 <string name="Sunken">Sunken</string>
 <string name="Sunken Chest">Sunken Chest</string>
@@ -2813,9 +2776,6 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Tilt Right">Tilt Right</string>
 <string name="Toe Shape">Toe Shape</string>
 <string name="Toe Thickness">Toe Thickness</string>
-<string name="Top">Top</string>
-<string name="Top Left">Top Left</string>
-<string name="Top Right">Top Right</string>
 <string name="Torso Length">Torso Length</string>
 <string name="Torso Muscles">Torso Muscles</string>
 <string name="Torso Scrawny">Torso Scrawny</string>
@@ -2886,6 +2846,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="Unnamed">(Unnamed)</string>
 	<string name="IM_moderated_chat_label">(Moderated: Voices off by default)</string>
 	<string name="IM_unavailable_text_label">Text chat is not available for this call.</string>
+	<string name="IM_muted_text_label">Your text chat has been disabled by a Group Moderator.</string>
+	<string name="IM_default_text_label">Click here to instant message.</string>
+	<string name="IM_to_label">To</string>
+	<string name="IM_moderator_label">(Moderator)</string>
 
 
   <string name="ringing-im">
diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
index fcfe89c6530852c9a9f47babc3e233230d2a3135..08c337455c612572a41e20bd37275bcf5b8dd41b 100644
--- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <accordion_tab
+    font="SansSerifBold"
     header_bg_color="DkGray2"
-    header_txt_color="LtGray"
     header_collapse_img="Accordion_ArrowClosed_Off"
     header_collapse_img_pressed="Accordion_ArrowClosed_Press"
     header_expand_img="Accordion_ArrowOpened_Off"
@@ -9,5 +9,6 @@
     header_image="Accordion_Off"
     header_image_over="Accordion_Over"
     header_image_pressed="Accordion_Press"
-    header_image_selected="Accordion_Selected"
+    header_image_expanded="Accordion_Selected"
+    header_text_color="LtGray" 
     />
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
index ea6997ebd54940039a796a39d678b28e221d5cf0..32916c08167168fe5db562798beff37c807c1eee 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
@@ -6,6 +6,10 @@
 	right_text_pad="15"
     left_widget_pad="0"
 	right_widget_pad="10"
+	top_separator_pad="5"
+	bottom_separator_pad="5"
+	top_header_pad="17"
+	bottom_header_pad="10"
 	max_length="2147483647"
 	enabled="false"
 	track_bottom="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index 9ed3749308bfdbbedecc8d5670417e58af06e35b..fa3cb9275ec9afb9f9f76c386811fbe86a139686 100644
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -4,7 +4,6 @@
            max_chars="20"
            follows="right|top">
   <combo_box.combo_button name="Combobox Button"
-                          label=""
                           hover_glow_amount="0.15"
                           font="SansSerifSmall"
                           scale_image="false"
@@ -12,7 +11,6 @@
                           image_selected="ComboButton_Selected"
                           image_disabled="ComboButton_Disabled" />
   <combo_box.drop_down_button name="Drop Down Button"
-                              label=""
                               hover_glow_amount="0.15"
                               font="SansSerifSmall"
                               scale_image="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..459706c689c940d100852fe1c81fcada91b628a1
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu visible="false"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
index ab4ad940893a8819ad6e0f585ee0a29ecfd1f2d9..6171be034f4b440171101213fe9fae9879089a33 100644
--- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
@@ -15,14 +15,14 @@
                           image_disabled_selected="ComboButton_Disabled_Selected" />
   <gesture_combo_box.drop_down_button name="Drop Down Button"
                               label=""
+                              halign="center"
                               hover_glow_amount="0.15"
                               font="SansSerif"
                               scale_image="true"
-                              pad_right="24"
-                              image_unselected="DropDown_Off"
-                              image_selected="DropDown_Selected"
-                              image_disabled="DropDown_Disabled"
-                              image_disabled_selected="DropDown_Disabled_Selected" />
+                              image_unselected="PushButton_Off"
+                              image_selected="PushButton_Selected"
+                              image_disabled="PushButton_Disabled"
+                              image_disabled_selected="PushButton_Selected_Disabled" />
   <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor"
                                 scroll_bar_bg_visible="true" />
   <gesture_combo_box.combo_editor name="Combo Text Entry"
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index f2e48c517d8a9797ab5ffb11328e74faf990da4f..d88bcfab1d7b6445f114247b1d8f9c204534a3e5 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -20,7 +20,6 @@
                 allow_new_values="true"
                 >
   <info_button name="Place Information"
-                          label=""
                           width="16"
                           height="16"
                           follows="left|top"
@@ -30,7 +29,6 @@
                           image_disabled_selected="Info_Off"
                           image_disabled="Info_Off" />
   <add_landmark_button name="Add Landmark"
-                          label=""
                           hover_glow_amount="0.15"
                           image_hover_selected="Favorite_Star_Over"
                           image_hover_unselected="Favorite_Star_Over"
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c98e9cb6b839b3c7aa5f846c1e18b66b3b36a53f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Use this for the top-level menu styling -->
+<menu_item
+  font="SansSerifSmall"
+  >
+</menu_item>
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0794b49a0c63967a7360be806cd5b5f7af5a5f2c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<scroll_column_header image_unselected="square_btn_32x128.tga"
+                      image_selected="square_btn_selected_32x128.tga"
+                      image_disabled="square_btn_32x128.tga"
+                      image_disabled_selected="square_btn_selected_32x128.tga"
+                      image_overlay="combobox_arrow.tga"
+                      image_overlay_alignment="right"
+                      halign="left"
+                      scale_image="true"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
index f482ff3b894d7b504959571ce0d2c58520f45a77..9a79243b0335dfdcf17c7a3274703bfe72714ffe 100644
--- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
@@ -7,14 +7,14 @@
   background_image="TextField_Search_Off"
   background_image_disabled="TextField_Search_Disabled"
   background_image_focused="TextField_Search_Active" >
-  <search_button label=""
+  <search_button 
     top_pad="4"
     left_pad="4" 
     width="13"
     height="13" 
 	  image_unselected="Search"
 	  image_selected="Search" />
-  <clear_button label=""
+  <clear_button 
    image_unselected="Icon_Close_Foreground"
    image_selected="Icon_Close_Press" />
 </search_editor>
diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
index 8b4a5afbe9564e31e3622dd481872461d05033ca..022564c12fcee20dc04b7d23d71fcfa01a46dec9 100644
--- a/indra/newview/skins/default/xui/en/widgets/side_tray.xml
+++ b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <side_tray tab_btn_image="TaskPanel_Tab_Off"
-        tab_btn_image_selected="TaskPanel_Tab_Selected"
-		tab_btn_width="32"
-		tab_btn_height="40"
-		tab_btn_margin="1"
-        >
+           tab_btn_image_selected="TaskPanel_Tab_Selected"
+           tab_btn_width="32"
+           tab_btn_height="40"
+           tab_btn_margin="1">
 </side_tray>
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
index fe2f1423b74a284c8a0c7adc507d30ff840a76ad..f1401140deba3b7d952e38a176a54d690769ecd6 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -2,6 +2,7 @@
 <tab_container tab_min_width="60"
                tab_max_width="150"
                font_halign="center"
+               font="SansSerif" 
                tab_height="21">
   <first_tab tab_top_image_unselected="TabTop_Left_Off"
                tab_top_image_selected="TabTop_Left_Selected"
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1d8257fbc8ae0b308d4c09f24a1cdaef40e18dc6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Derives from LLUICtrl -->
+<talk_button>
+  <!-- To make speak button look green when selected set:
+    image_selected="SegmentedBtn_Left_Selected"
+    image_unselected="SegmentedBtn_Left_Off"
+  -->
+  <speak_button
+    name="left"
+    label="Speak"
+    label_selected="Speak"
+    font="SansSerifSmall"
+    tab_stop="false"
+    />
+  <show_button
+    name="right"
+    label=""
+    left="0"
+    top="0"
+    right="20"
+    bottom="0"
+    tab_stop="false"
+    is_toggle="true"
+    image_selected="ComboButton_UpSelected"
+    image_unselected="ComboButton_UpOff"
+    />
+  <monitor
+    name="monitor"
+    left="0"
+    top="18"
+    right="18"
+    bottom="0"
+    />
+</talk_button>
diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48950a98ad547f59d7d83a2396438e0f414d8894
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu visible="false"/>
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 071d5055699d6052e5cbaabca7e3c7478c774607..5545ab29e0cba559666001d6e7f3fd6d355a7505 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Acerca de [APP_NAME]">
+<floater name="floater_about" title="ACERCA DE [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index bc775c1b1c1ba338835344858fa8dad43df65286..7575df4b98f37320e9a65c7ae0cb9ac776e1396d 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Acerca del terreno">
+<floater name="floaterland" title="ACERCA DEL TERRENO">
 	<tab_container name="landtab">
 		<panel label="General" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml
index c6d89891bcadc06ce49c6b1392fbc0e0d7f6f92b..5196ac0b78cb78d238379ec8d483d186914f145a 100644
--- a/indra/newview/skins/default/xui/es/floater_auction.xml
+++ b/indra/newview/skins/default/xui/es/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Empezar venta de terreno Linden">
+<floater name="floater_auction" title="EMPEZAR VENTA DE TERRENO LINDEN">
 	<check_box label="Incluir la valla amarilla de selección" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
index 68a56ac678268c8b2ba4979b138f4a8e1c9088c5..df0147b191a7b874e6bfb7091ed669e971d0e0ec 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Elegir a un residente">
+<floater name="avatarpicker" title="ELEGIR A UN RESIDENTE">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Buscar" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
index 6344768c7f3b5410d9478d430e10e4653c62f9f3..8febe4b0a9dd2cafb7ca8d834edfc9a681656f30 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texturas del avatar">
+<floater name="avatar_texture_debug" title="TEXTURAS DEL AVATAR">
 	<text name="baked_label">
 		Texturas predeterminadas
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_beacons.xml b/indra/newview/skins/default/xui/es/floater_beacons.xml
index 9282cb04a693cb540899ec2790d4ff7fdc6a48be..2df90bc911f4573917eca4ef578535c5375a1830 100644
--- a/indra/newview/skins/default/xui/es/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/es/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balizas">
+<floater name="beacons" title="BALIZAS">
 	<panel name="beacons_panel">
 		<check_box label="Objetos con script sólo al tocarlos" name="touch_only"/>
 		<check_box label="Objetos con script" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
index c3e4acacf09f2189defacd4dd721d523abb91695..3d839bf645f14d25fa583f8c3f1282709cd20f3c 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opciones de la cuadrícula">
+<floater name="build options floater" title="OPCIONES DE LA CUADRÍCULA">
 	<spinner label="Unidad de la cuadrícula (metros)" name="GridResolution" width="250" label_width="192"/>
 	<spinner label="Graduación de la cuadrícula (metros)" name="GridDrawSize" width="250" label_width="192"/>
 	<check_box label="Activar subunidades" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
index 32517130743d48d73e159658a3b2200a5b290064..0553f4c6725bce0cc9292eb314a2e15e8571ca82 100644
--- a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Cambio masivo de los permisos del contenido">
+<floater name="floaterbulkperms" title="CAMBIO MASIVO DE LOS PERMISOS DEL CONTENIDO">
 	<text name="applyto">
 		Tipos de contenido
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml
index ed43e936880a77418561b9d6da35b1d13b17a716..0522f788bbd2f6b6ac9e2255e544092a9d228daa 100644
--- a/indra/newview/skins/default/xui/es/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/es/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Choques, empujones, e impactos">
+<floater name="floater_bumps" title="CHOQUES, EMPUJONES, E IMPACTOS">
 	<text name="none_detected">
 		No se han detectado
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
index 2346798f94aa8c71dfe5139c99cc4cc85913572e..c4d269ff391256034a546f439f84990dd266bd44 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Comprar el contenido">
+<floater name="floater_buy_contents" title="COMPRAR EL CONTENIDO">
 	<text name="contains_text">
 		[NAME] contiene:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
index a01e07e694b8a7dfd2ec8df3ba025920a15edabb..af542acbcefe6de1b2bb6810a344f0a1b181e657 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Comprar dinero">
+<floater name="buy currency" title="COMPRAR DINERO">
 	<text name="info_buying">
 		Comprando dinero:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml
index 7ee15955eb30aea99b81d50c697deeafb3f596f7..7ff45fcf799e088402e883d254439a87c2d5b3b2 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Comprar terreno">
+<floater name="buy land" title="COMPRAR TERRENO">
 	<text name="region_name_label">
 		Región:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml
index 8e713f362b459f9b8cf9b12fc959299d50fb54fa..26696bc868221cc445bd32bcb66a4e9d92642a55 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Comprar una copia del objeto">
+<floater name="contents" title="COMPRAR UNA COPIA DEL OBJETO">
 	<text name="contents_text">
 		y sus contenidos:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_choose_group.xml b/indra/newview/skins/default/xui/es/floater_choose_group.xml
index 71331abb65448e43c824f942e96030621f2498ae..a5967b814ebdaaf1fdeb7bf461c7396b9dd5180f 100644
--- a/indra/newview/skins/default/xui/es/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/es/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Grupos">
+<floater name="groups" title="GRUPOS">
 	<text name="groupdesc">
 		Elegir un grupo:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml
index 616c373d187a5f613ea34c7cdd397a0dff8680bd..4395ee6890eb7b1734832e9b2aca0e539d1195a5 100644
--- a/indra/newview/skins/default/xui/es/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Paleta de colores">
+<floater name="ColorPicker" title="PALETA DE COLORES">
 	<text name="r_val_text">
 		Rojo:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml
index 1322b9a5cf256217eb328fb36eaf0c6cbc3ca9cf..94452dae6b03b6cefc713ecf91bd5b752366a56f 100644
--- a/indra/newview/skins/default/xui/es/floater_customize.xml
+++ b/indra/newview/skins/default/xui/es/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Apariencia" width="527">
+<floater name="floater customize" title="APARIENCIA" width="527">
 	<tab_container name="customize tab container" width="525">
 		<placeholder label="Partes del cuerpo" name="body_parts_placeholder"/>
 		<panel label="Forma" name="Shape" width="389">
diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
index 9ee7fc3ead2eac226a1a1d5fa6fd06f8bd442dda..fc2b12d1e460d40e140614bbf2837c89312712f9 100644
--- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor del ciclo de un día">
+<floater name="Day Cycle Floater" title="EDITOR DEL CICLO DE UN DÍA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo de un día" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml
index e8989f44ef8a28431d2118bac8b4414e1468cea1..eadf04a4170103c42aaaf6b875903d9da17e3724 100644
--- a/indra/newview/skins/default/xui/es/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Configuración de los dispositivos del chat de voz"/>
+<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/>
diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml
index 65710fc5ed7fefcd0751cb430b3355c4d9ec94ec..5d6ba47daf1691b43212808c4f2801011effc5fb 100644
--- a/indra/newview/skins/default/xui/es/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor del entorno">
+<floater name="Environment Editor Floater" title="EDITOR DEL ENTORNO">
 	<text name="EnvTimeText">
 		Duración de
 un día
diff --git a/indra/newview/skins/default/xui/es/floater_font_test.xml b/indra/newview/skins/default/xui/es/floater_font_test.xml
index e6b8087b6074fcef1cb664fbe57fdd3aca0e69c0..9a665321a4694416482a71899e5c243856f73f22 100644
--- a/indra/newview/skins/default/xui/es/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/es/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Prueba de fuentes">
+<floater name="contents" title="PRUEBA DE FUENTES">
 	<text name="linea">
 		OverrideTest, debería de aparecer aquí en Times. (Desde default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
index e7f1a7aca27fd8c134d9dfe440c096b20190d218..496881f2d237a82d982080e67ae4f97bed9bff73 100644
--- a/indra/newview/skins/default/xui/es/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gestos disponibles">
+<floater name="gestures" title="GESTOS DISPONIBLES">
 	<text name="help_label">
 		Pulse dos veces en un gesto para reproducir las animaciones
 y sonidos.
diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml
index ea2571ecb884251ea36e478f636dde38735eded4..78ec76e32bcd784fb61f65b7b59c3ec9a9f31cf2 100644
--- a/indra/newview/skins/default/xui/es/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="Herramientas de Dios">
+<floater name="godtools floater" title="HERRAMIENTAS DE DIOS">
 	<tab_container name="GodTools Tabs">
 		<panel label="Red" name="grid">
 			<button label="Expulsar a todos los usuarios"
diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
index 29750ee7371db337a69f46b56274be6f6c153b73..9418252036eac09ed3e6188b1a481ee5f84a7daa 100644
--- a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Configuración del hardware">
+<floater name="Hardware Settings Floater" title="CONFIGURACIÓN DEL HARDWARE">
 	<text name="Filtering:">
 		Filtrado:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_hud.xml b/indra/newview/skins/default/xui/es/floater_hud.xml
index d31bcedf05e8a65a275f09aedb8d98f19799181b..e458913452f0c3afb7d2244af3b00a0ab3fc51a1 100644
--- a/indra/newview/skins/default/xui/es/floater_hud.xml
+++ b/indra/newview/skins/default/xui/es/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml
index 026081bc042ae3400a63c559cb99bdc341320ebc..3c8b38648f69e636d907eeed620b09b07aad8847 100644
--- a/indra/newview/skins/default/xui/es/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/es/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Examinar objetos" min_width="450">
+<floater name="inspect" title="EXAMINAR OBJETOS" min_width="450">
 	<scroll_list name="object_list" tool_tip="Seleccione un objeto de esta lista para realzarlo en el mundo">
 		<column label="Nombre del objeto" name="object_name"/>
 		<column label="Propietario" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml
index 7da14c0579d14d74e55c6273444000e3814144a1..8d16d6089eeb3145db434f8d81694bafd95e4327 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventario">
+<floater name="Inventory" title="INVENTARIO">
 	<search_editor label="Escriba aquí para buscar" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Todos los ítems" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
index 4df3ca2cf6f8b881d2ee2fa4d9f81613d03d647f..7abdfceb94e69f488f5b8785bbb98b8f71c2ac86 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propiedades del ítem del inventario">
+<floater name="item properties" title="PROPIEDADES DEL ÍTEM DEL INVENTARIO">
 	<text name="LabelItemNameTitle">
 		Nombre:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
index 7cd787bfb5188b8b3906b3df0317c6c15b922c54..0cbee11bfb8e73f2b444e64993cb8049efb490c3 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="ítems_recientes_del_inventario">
+<floater name="Inventory Finder" title="ÍTEMS_RECIENTES_DEL_INVENTARIO">
 	<check_box label="Animaciones" name="check_animation"/>
 	<check_box label="Tarjetas de visita" name="check_calling_card"/>
 	<check_box label="Ropa" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml
index 2e0fb87744b2c0a3ba176ec07091813d2545c80e..75c53dd646f9ba1445c65aaa25badc137c9b2f31 100644
--- a/indra/newview/skins/default/xui/es/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/es/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuración del joystick">
+<floater name="Joystick" title="CONFIGURACIÓN DEL JOYSTICK">
 	<check_box name="enable_joystick" label="Activar el joystick:"/>
 	<text left="140" name="joystick_type" width="360"/>
 	<spinner label="Mapping: eje X" name="JoystickAxis1" label_width="118" width="161"/>
diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
index 1af0bb065cbd3e3e5dbc8ef4ebc99cbcfd2e6a6b..54c4ce8c6ac1dffea33e3d0ab880593c45967573 100644
--- a/indra/newview/skins/default/xui/es/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Medidor del lag">
+<floater name="floater_lagmeter" title="MEDIDOR DEL LAG">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Estado del lag del cliente"/>
 	<text name="client">
 		Cliente:
diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
index 5df319905df256ab2b24339a6f5f6083b4a17679..bcdebf458846400e5079ad2ac8ba9d5bf4bd789f 100644
--- a/indra/newview/skins/default/xui/es/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mi terreno">
+<floater name="land holdings floater" title="MI TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nombre de la parcela" name="name"/>
 		<column label="Región" name="location"/>
diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
index 226c3482af24c5c3b21479230687d917e93e5edd..02be809319fceb043e1a3deba84d3fc644e6afd8 100644
--- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: script nuevo">
+<floater name="script ed float" title="SCRIPT: SCRIPT NUEVO">
 	<button label="Reiniciar" label_selected="Reiniciar" name="Reset"/>
 	<check_box label="Ejecutándose" name="running" left="4"/>
 	<check_box label="Mono" name="mono" left="106"/>
diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
index 859a2d38124c697bfa67bbf90570c8690450a465..0cde2fe5bc9dbbfb3a01b2ebfd5317cfede2cd8c 100644
--- a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Wiki de LSL">
+<floater name="script ed float" title="WIKI DE LSL">
 	<check_box label="Seguir al cursor" name="lock_check"/>
 	<combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/>
 	<button label="Atrás" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml
index 79c8980c02571feb1e72c9ea453c23d512269a86..ff50b56a32fd35b8cafe2f3fde923e0d9c001de8 100644
--- a/indra/newview/skins/default/xui/es/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/es/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Navegador">
+<floater name="floater_about" title="NAVEGADOR">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Atrás" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
index a2791d643275b047ff1e44e115348d46edc63478..6d5e987409e89201545be2e342301ef0f742b586 100644
--- a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Prueba de la fuga de memoria">
+<floater name="MemLeak" title="PRUEBA DE LA FUGA DE MEMORIA">
 	<spinner label="Velocidad de la fuga (bites por fotograma):" name="leak_speed"/>
 	<spinner label="Fuga de memoria máx. (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml
index 0cf38c09ee08a03fddc72b2a9f0ad29ed42ee229..390333cd1d521b928e9ca97bcf700973c8cffe52 100644
--- a/indra/newview/skins/default/xui/es/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignorar un objeto según su nombre">
+<floater name="mute by name" title="IGNORAR UN OBJETO SEGÚN SU NOMBRE">
 	<text name="message" bottom_delta="-40">
 		Ignorar según el nombre sólo afecta al chat y los MI del
 objeto, no a sus sonidos. 
diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml
index d555eed305fc0fcf4608e4868ef81801eb292cb5..07f362560b99bac0979368b4c5d0d65a97144756 100644
--- a/indra/newview/skins/default/xui/es/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/es/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contactos">
+<floater name="floater_my_friends" title="CONTACTOS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amigos" name="friends_panel"/>
 		<panel label="Grupos" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml
index 60487b829c59216cd526d4f347953c2d1eac4430..89c79e8833957090947fe5440a9650467fe77632 100644
--- a/indra/newview/skins/default/xui/es/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/es/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Contenido del objeto">
+<floater name="objectcontents" title="CONTENIDO DEL OBJETO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
index 4a3977be3d427fd808f350f23869cb2219ea1cd9..7d3c8e62f3d0787858345fb85ba85513594fb771 100644
--- a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permisos de subida por defecto">
+<floater name="perm prefs" title="PERMISOS DE SUBIDA POR DEFECTO">
 	<panel label="Permisos" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Compartir con el grupo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/es/floater_post_process.xml b/indra/newview/skins/default/xui/es/floater_post_process.xml
index acac2b2bf91f2e1c77278eac61d18ce61a0aa7f7..5c62ccde36067c68f5e13e1364b3c1caea7a8535 100644
--- a/indra/newview/skins/default/xui/es/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/es/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Configuración del procesamiento">
+<floater name="Post-Process Floater" title="CONFIGURACIÓN DEL PROCESAMIENTO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Color del filtro" name="wmiColorFilterPanel">
 			<check_box label="Activar" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/es/floater_postcard.xml b/indra/newview/skins/default/xui/es/floater_postcard.xml
index 6a9811c058351bca4fd4adff73783a3af49f0504..ace3204cc7b964e09fc1a8f3f9cec0128b61fae2 100644
--- a/indra/newview/skins/default/xui/es/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/es/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Foto por correo electrónico">
+<floater name="Postcard" title="FOTO POR CORREO ELECTRÓNICO">
 	<text name="to_label">
 		Correo electrónico
    del destinatario:
diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml
index df7fc93dd9eff5676efea0ac5a0607bd4b742e59..5fe4ae3b64c2dccb0cdb76aa0fa391336d1db4a4 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferencias" min_width="350" width="646">
+<floater name="Preferences" title="PREFERENCIAS" min_width="350" width="646">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
index f2fa38ead839c069f15bbb9d0adb86443ecb633b..8114c7f3c2b6cbdbc4695d7eab93b4684ae7d350 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Información clasificada"/>
+<floater name="classified_preview" title="INFORMACIÓN CLASIFICADA"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml
index 7f727b050241b581022d29e005c0d082bcc3a60f..04cb0de4d40a6dd9b72151496ddb96015f2e8f8b 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Información de eventos"/>
+<floater name="event_preview" title="INFORMACIÓN DE EVENTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
index 4d11520335e706b2ee2ce68c385388d71947398f..35f795a7ec8cf9613a426955f21d9dacfe6c2c22 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Guardar" label_selected="Guardar" name="Save"/>
 	<text name="desc txt">
 		Descripción:
diff --git a/indra/newview/skins/default/xui/es/floater_region_info.xml b/indra/newview/skins/default/xui/es/floater_region_info.xml
index b5a85378c20b0027cc089282b25e4e1086f7ec51..46d0839238dbe94a362211e275c664957dbb694a 100644
--- a/indra/newview/skins/default/xui/es/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/es/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Región/Estado"/>
+<floater name="regioninfo" title="REGIÓN/ESTADO"/>
diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
index 8ae8c212e6a05281e5086ff4a37f258ada78ff61..a075c512470fa23a5b1d8f868d35f25a53f6755c 100644
--- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Denuncia de Infracción">
+<floater name="floater_report_abuse" title="DENUNCIA DE INFRACCIÓN">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Incluir una captura de pantalla" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml
index e33ffb7d96ec28736837582b4c7d81b8aa1701a8..e7eddfd9f33f045d931b2a755f0f07d4596e3925 100644
--- a/indra/newview/skins/default/xui/es/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Alerta/Error de los scripts">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Todos los scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml
index 0d8cd0b406842692d7d55f2587c42e3647b5cc81..79984e7bc110a53b60627bef21e3d0f03ea3a296 100644
--- a/indra/newview/skins/default/xui/es/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview lsl text" title="Script: script de rotación">
+<floater name="preview lsl text" title="SCRIPT: SCRIPT DE ROTACIÓN">
 	<text name="desc txt">
 		Descripción:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_script_queue.xml b/indra/newview/skins/default/xui/es/floater_script_queue.xml
index dcd2bfe5b0c206b81545af5b721bd6a226737442..ace596cd9a1c6ad6325cc0eaab6321d8a6ba7e6d 100644
--- a/indra/newview/skins/default/xui/es/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Reinicio">
+<floater name="queue" title="REINICIO">
 	<button label="Cerrar" label_selected="Cerrar" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml
index 3c8dc2fe9c1b6ccc659c8e5efcaf909ca14e0a24..a59f258a18e03a1e339b3da8d7509a0076bc5cfc 100644
--- a/indra/newview/skins/default/xui/es/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Buscar en el script" width="320">
+<floater name="script search" title="BUSCAR EN EL SCRIPT" width="320">
 	<check_box label="Indiferente mays./mins." name="case_text" left="75"/>
 	<button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
 	<button label="Reemplazar" label_selected="Reemplazar" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/es/floater_sell_land.xml b/indra/newview/skins/default/xui/es/floater_sell_land.xml
index bce13c1e3383ee31417adb38f329766b4cdf8f24..c6e874625044734f4ebcde5af5abc22ddf32c4a8 100644
--- a/indra/newview/skins/default/xui/es/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vender el terreno">
+<floater name="sell land" title="VENDER EL TERRENO">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
index 1d5ad2f34cdceab163a9cb435f86de2445db1e5e..0e8e6bdfd295e1901efb74cb4209cae68d6dae7d 100644
--- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configuración del depurador">
+<floater name="settings_debug" title="CONFIGURACIÓN DEL DEPURADOR">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="TRUE" />
 		<combo_box.item name="FALSE" label="FALSE" />
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
index c1ace235030f3baff75905cc91973dbc1c615cfa..afea6c09fefc0b9090f881f9cbcdc5334597f3ab 100644
--- a/indra/newview/skins/default/xui/es/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Vista previa de la foto">
+<floater name="Snapshot" title="VISTA PREVIA DE LA FOTO">
 	<text name="type_label">
 		Destino de la foto
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_sound_preview.xml b/indra/newview/skins/default/xui/es/floater_sound_preview.xml
index e69ac1012343df32d35eb9b72383d8f59ebacbc1..8b8d9f13ced8b0d0ffb1bc4652d7c38a709c5f7d 100644
--- a/indra/newview/skins/default/xui/es/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nombre:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml
index 6e644cacf1fa4b26f8caff6297c9f098bf7c1f4b..c9b0a76df0c6d969d0e1309ed3af73214c4bafac 100644
--- a/indra/newview/skins/default/xui/es/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/es/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Estadísticas"/>
+<floater name="stats floater" title="ESTADÍSTICAS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml
index 74084e9db9fa66fe2172aa0a23e7161081a01f4e..b2dddfb7f7fc1581d79666068926e67c4d0ecd69 100644
--- a/indra/newview/skins/default/xui/es/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/es/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Punto de Teleporte" min_height="310" height="310">
+<floater name="telehub" title="PUNTO DE TELEPORTE" min_height="310" height="310">
 	<text name="status_text_connected">
 		Punto de Teleporte conectado al objeto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
index 8b661a6041a0c298d7bc7da787ab25f44e3e5bf0..09d6e7e4aa3dc52acaf52ba4b4e278d02de34c2d 100644
--- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Elegir: Textura">
+<floater name="texture picker" title="ELEGIR: TEXTURA">
 	<string name="choose_picture">
 		Pulse para elegir una imagen
 	</string>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index da842d22c62e61888da3b36c847ad8f3a1ed6b87..24db352ac423c35db634b84550ef9485f28ace1b 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Visión"/>
 	<button label="" label_selected="" name="button move" tool_tip="Mover"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
index 95f2c39d423addfa8fe01f93e500db9f1c672e1c..29ae9991af54bd49401d5fe360f4fa016da61776 100644
--- a/indra/newview/skins/default/xui/es/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="cargando...">
+<floater name="top_objects" title="CARGANDO...">
 	<text name="title_text">
 		Cargando...
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
index 934fc7882b7372950bc96241016a5ef8d0c58618..c86e49a35547ee3c40b9a6db8c0419ff11e9929e 100644
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ b/indra/newview/skins/default/xui/es/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor avanzado del agua">
+<floater name="Water Floater" title="EDITOR AVANZADO DEL AGUA">
 	<text name="KeyFramePresetsText">
 		Agua predefinida:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
index e240dea0b5c68d3cbc9a6af2d0e8ca2b8aca9835..0697f05553f7e42670f19f0438b284b25718d9f3 100644
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor avanzado del cielo">
+<floater name="WindLight floater" title="EDITOR AVANZADO DEL CIELO">
 	<text name="KeyFramePresetsText">
 		Cielos definidos:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml
index 6521e72d5a4c1ed6f933bd0b8f8399660024ff69..4d7337bef744b572c6bf4f25508e08729765ff36 100644
--- a/indra/newview/skins/default/xui/es/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa del Mundo">
+<floater name="worldmap" title="MAPA DEL MUNDO">
 	<tab_container name="maptab">
 		<panel label="Objetos" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
index bcf4128e01ff20b0531174fc5032f3954b748809..c12dd8d58c1dab2d93e3f65294d0908f72ae52e7 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Residente" />
-   <string name="AcctTypeTrial"
-    value="Prueba" />
-   <string name="AcctTypeCharterMember"
-    value="Miembro fundador" />
-   <string name="AcctTypeEmployee"
-    value="Empleado de Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Ha usado una forma de pago" />
-   <string name="PaymentInfoOnFile"
-    value="Hay infor. de la forma de pago" />
-   <string name="NoPaymentInfoOnFile"
-    value="Sin infor. de la forma de pago" />
-   <string name="AgeVerified"
-    value="Edad verificada" />
-   <string name="NotAgeVerified"
-    value="Edad no verificada" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=es
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Compañero/a:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Mensaje en el estado ocupado:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Residente" />
+   <string name="AcctTypeTrial"
+    value="Prueba" />
+   <string name="AcctTypeCharterMember"
+    value="Miembro fundador" />
+   <string name="AcctTypeEmployee"
+    value="Empleado de Linden Lab" />
+   <string name="PaymentInfoUsed"
+    value="Ha usado una forma de pago" />
+   <string name="PaymentInfoOnFile"
+    value="Hay infor. de la forma de pago" />
+   <string name="NoPaymentInfoOnFile"
+    value="Sin infor. de la forma de pago" />
+   <string name="AgeVerified"
+    value="Edad verificada" />
+   <string name="NotAgeVerified"
+    value="Edad no verificada" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=es
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Compañero/a:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Mensaje en el estado ocupado:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index 7b918be075eb5e6d89febfb826e46b113801cdeb..8cd1ec4e09a5c0ea7eefed6027ceb9717e41ef81 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="A propos de [APP_NAME]">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl et de nombreuses autres personnes.
-
-  Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) :  able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-  Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-  GL Copyright (C) 1999-2004 Brian Paul.
-  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-  ogg/vorbis Copyright (C) 2001, Xiphophorus
-  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
-  google-perftools Copyright (c) 2005, Google Inc.
-  
-  Tous droits réservés.  Voir licenses.txt pour plus de détails.
-
-  Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<string name="you_are_at">
-		Votre position : [POSITION]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="A PROPOS DE [APP_NAME]">
+	<tab_container name="about_tab">
+		<panel label="Remerciements" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl et de nombreuses autres personnes.
+
+  Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) :  able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+  Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="Licences" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+  APR Copyright (C) 2000-2004 The Apache Software Foundation
+  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+  GL Copyright (C) 1999-2004 Brian Paul.
+  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+  ogg/vorbis Copyright (C) 2001, Xiphophorus
+  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+  zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler.
+  google-perftools Copyright (c) 2005, Google Inc.
+  
+  Tous droits réservés.  Voir licenses.txt pour plus de détails.
+
+  Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index f2d2dbfa07830a1864e472e257ff5b029c170adb..d1aea074e6a7c098a525426a879d539365803663 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,501 +1,480 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="À propos du terrain">
-	<tab_container name="landtab">
-		<panel label="Général" name="land_general_panel">
-			<text name="Name:">
-				Nom :
-			</text>
-			<line_editor name="Name"/>
-			<text name="Description:">
-				Description :
-			</text>
-			<text_editor name="Description"/>
-			<text name="LandType">
-				Type :
-			</text>
-			<text name="LandTypeText">
-				Continent / Homestead
-			</text>
-			<text name="ContentRating">
-				Catégorie :
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				Propriétaire :
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
-			<text name="Group:">
-				Groupe :
-			</text>
-			<text name="GroupText"/>
-			<button label="Définir..." label_selected="Définir..." name="Set..."/>
-			<check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe."/>
-			<button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné."/>
-			<check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu&apos;un terrain est cédé au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant."/>
-			<text name="For Sale:">
-				À vendre :
-			</text>
-			<text name="Not for sale.">
-				Pas à vendre
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
-			</text>
-			<text name="SalePending"/>
-			<button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
-			<text name="For sale to">
-				À vendre à : [BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel.">
-				Objets inclus dans la vente.
-			</text>
-			<text name="Selling with no objects in parcel.">
-				Objets non inclus dans la vente.
-			</text>
-			<button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/>
-			<text name="Claimed:">
-				Acquis :
-			</text>
-			<text name="DateClaimText">
-				Tue Aug 15 13:47:25 2006
-			</text>
-			<text name="PriceLabel">
-				Superficie :
-			</text>
-			<text name="PriceText">
-				4048 m²
-			</text>
-			<text name="Traffic:">
-				Trafic :
-			</text>
-			<text name="DwellText">
-				0
-			</text>
-			<button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/>
-			<button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
-			<button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
-			<button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/>
-			<button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/>
-			<button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
-			<panel.string name="new users only">
-				Nouveaux utilisateurs uniquement
-			</panel.string>
-			<panel.string name="anyone">
-				Tout le monde
-			</panel.string>
-			<panel.string name="area_text">
-				Surface
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA] m²
-			</panel.string>
-			<panel.string name="auction_id_text">
-				Code de l&apos;enchère : [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				Pour modifier ce terrain, vous devez approuver votre achat.
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(propriété du groupe)
-			</panel.string>
-			<panel.string name="profile_text">
-				Profil...
-			</panel.string>
-			<panel.string name="info_text">
-				Infos...
-			</panel.string>
-			<panel.string name="public_text">
-				(public)
-			</panel.string>
-			<panel.string name="none_text">
-				(aucun)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(vente en cours)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				Aucune parcelle sélectionnée.
-Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
-			</panel.string>
-		</panel>
-		<panel label="Règlement" name="land_covenant_panel">
-			<text name="estate_section_lbl">
-				Domaine :
-			</text>
-			<text name="estate_name_lbl">
-				Nom :
-			</text>
-			<text name="estate_name_text">
-				continent
-			</text>
-			<text name="estate_owner_lbl">
-				Propriétaire :
-			</text>
-			<text name="estate_owner_text">
-				(aucun)
-			</text>
-			<text_editor name="covenant_editor">
-				Il n&apos;y a aucun règlement pour ce domaine.
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				Last Modified Wed Dec 31 16:00:00 1969
-			</text>
-			<text name="region_section_lbl">
-				Région :
-			</text>
-			<text name="region_name_lbl">
-				Nom :
-			</text>
-			<text name="region_name_text">
-				leyla
-			</text>
-			<text name="region_landtype_lbl">
-				Type :
-			</text>
-			<text name="region_landtype_text">
-				Continent / Homestead
-			</text>
-			<text name="region_maturity_lbl">
-				Catégorie :
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				Revendre :
-			</text>
-			<text name="resellable_clause">
-				Le terrain dans cette région ne peut être revendu.
-			</text>
-			<text name="changeable_lbl">
-				Sous-diviser :
-			</text>
-			<text name="changeable_clause">
-				Le terrain dans cette région ne peut être fusionné/divisé.
-			</text>
-			<panel.string name="can_resell">
-				Le terrain acheté dans cette région peut être revendu.
-			</panel.string>
-			<panel.string name="can_not_resell">
-				Le terrain acheté dans cette région ne peut pas être revendu.
-			</panel.string>
-			<panel.string name="can_change">
-				Le terrain acheté dans cette région peut être fusionné
-ou divisé.
-			</panel.string>
-			<panel.string name="can_not_change">
-				Le terrain acheté dans cette région ne peut pas être fusionné
-ou divisé.
-			</panel.string>
-		</panel>
-		<panel label="Objets" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				Facteur Bonus Objets : [BONUS]
-			</text>
-			<text name="Simulator primitive usage:">
-				Prims utilisées sur la parcelle :
-			</text>
-			<text left="214" name="objects_available" width="230">
-				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
-			</text>
-			<panel.string name="objects_available_text">
-				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
-			</panel.string>
-			<panel.string name="objects_deleted_text">
-				[COUNT] sur [MAX] ([DELETED] seront supprimés)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				Prims max. sur la parcelle :
-			</text>
-			<text left="214" name="object_contrib_text" width="152">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				Prims sur la parcelle :
-			</text>
-			<text left="214" name="total_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="14" name="Owned by parcel owner:" width="180">
-				Appartenant au propriétaire :
-			</text>
-			<text left="214" name="owner_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Set to group:" width="180">
-				Données au groupe :
-			</text>
-			<text left="214" name="group_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Owned by others:" width="128">
-				Appartenant à d&apos;autres :
-			</text>
-			<text left="214" name="other_objects_text" width="48">
-				[COUNT]
-			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/>
-			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
-			<text left="14" name="Selected / sat upon:" width="193">
-				Sélectionnées/où quelqu&apos;un est assis :
-			</text>
-			<text left="214" name="selected_objects_text" width="48">
-				[COUNT]
-			</text>
-			<text left="4" name="Autoreturn" width="412">
-				Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
-			</text>
-			<line_editor name="clean other time" right="-6" width="36"/>
-			<text name="Object Owners:">
-				Propriétaires :
-			</text>
-			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/>
-			<button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
-			<name_list label="Plus récents" name="owner list">
-				<column label="Type" name="type"/>
-				<column name="online_status"/>
-				<column label="Nom" name="name"/>
-				<column label="Nombre" name="count"/>
-				<column label="Plus récents" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="Options" name="land_options_panel">
-			<text name="allow_label">
-				Autoriser les autres résidents à :
-			</text>
-			<check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
-			<check_box label="Créer des repères" name="check landmark"/>
-			<check_box label="Voler" name="check fly" tool_tip="Si cette option est cochée, les résidents peuvent voler sur votre terrain. Si elle n&apos;est pas cochée, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
-			<text left="152" name="allow_label2">
-				Créer des objets :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="edit objects check"/>
-			<check_box label="Groupe" left="395" name="edit group objects check"/>
-			<text left="152" name="allow_label3" width="134">
-				Laisser entrer des objets :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="all object entry check"/>
-			<check_box label="Groupe" left="395" name="group object entry check"/>
-			<text left="152" name="allow_label4">
-				Exécuter des scripts :
-			</text>
-			<check_box label="Tous les résidents" left="285" name="check other scripts"/>
-			<check_box label="Groupe" left="395" name="check group scripts"/>
-			<text name="land_options_label">
-				Options du terrain :
-			</text>
-			<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
-			<check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
-			<check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
-			<panel.string name="search_enabled_tooltip">
-				Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
-Seules les parcelles de grande taille peuvent apparaître dans la recherche.
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
-			</panel.string>
-			<combo_box bottom="-160" left="286" name="land category with adult" width="146">
-				<combo_box.item name="item0" label="Toutes catégories"
-				/>
-				<combo_box.item name="item1" label="Appartenant aux Lindens"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="Art et Culture"
-				/>
-				<combo_box.item name="item4" label="Affaires"
-				/>
-				<combo_box.item name="item5" label="Éducation"
-				/>
-				<combo_box.item name="item6" label="Jeux"
-				/>
-				<combo_box.item name="item7" label="Favoris"
-				/>
-				<combo_box.item name="item8" label="Accueil pour les nouveaux"
-				/>
-				<combo_box.item name="item9" label="Parcs et Nature"
-				/>
-				<combo_box.item name="item10" label="Résidentiel"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Autre"
-				/>
-			</combo_box>
-			<combo_box bottom="-160" left="286" name="land category" width="146">
-				<combo_box.item name="item0" label="Toutes catégories"
-				/>
-				<combo_box.item name="item1" label="Appartenant aux Lindens"
-				/>
-				<combo_box.item name="item3" label="Art et Culture"
-				/>
-				<combo_box.item name="item4" label="Affaires"
-				/>
-				<combo_box.item name="item5" label="Éducation"
-				/>
-				<combo_box.item name="item6" label="Jeux"
-				/>
-				<combo_box.item name="item7" label="Favoris"
-				/>
-				<combo_box.item name="item8" label="Accueil pour les nouveaux"
-				/>
-				<combo_box.item name="item9" label="Parcs et Nature"
-				/>
-				<combo_box.item name="item10" label="Résidentiel"
-				/>
-				<combo_box.item name="item11" label="Shopping"
-				/>
-				<combo_box.item name="item12" label="Autre"
-				/>
-			</combo_box>
-			<button bottom="-160" label="?" label_selected="?" left="436" name="?"/>
-			<check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Contenu Mature
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Contenu Adult
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				Les informations ou contenu de votre parcelle sont classés Mature.
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				Les informations ou contenu de votre parcelle sont classés Adult.
-			</panel.string>
-			<text bottom="-200" name="Snapshot:">
-				Photo :
-			</text>
-			<texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
-			<text bottom="-323" name="landing_point">
-				Lieu d&apos;arrivée : [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(aucun)
-			</panel.string>
-			<button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
-			<button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d&apos;arrivée."/>
-			<text bottom="-343" name="Teleport Routing: ">
-				Règles de téléportation :
-			</text>
-			<combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140">
-				<combo_box.item name="Blocked" label="Bloqué"
-				/>
-				<combo_box.item name="LandingPoint" label="Lieu d&apos;arrivée fixe"
-				/>
-				<combo_box.item name="Anywhere" label="Lieu d&apos;arrivée libre"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				Pas de bousculades
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				Pas de bousculades (les règles de la région priment)
-			</panel.string>
-		</panel>
-		<panel label="Médias" name="land_media_panel">
-			<text name="with media:" width="85">
-				Type de média :
-			</text>
-			<combo_box left="97" name="media type" tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre"/>
-			<text name="mime_type"/>
-			<text name="at URL:" width="85">
-				URL du média :
-			</text>
-			<line_editor left="97" name="media_url"/>
-			<button label="Définir..." label_selected="Définir..." name="set_media_url"/>
-			<text name="Description:">
-				Description :
-			</text>
-			<line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
-			<text name="Media texture:">
-				Remplacer
-la texture :
-			</text>
-			<texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
-			<text name="replace_texture_help">
-				(Les objets avec cette texture affichent le film ou 
-la page web quand vous cliquez sur la flèche Jouer.)
-			</text>
-			<text name="Options:">
-				Options
-média :
-			</text>
-			<check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement."/>
-			<check_box label="Média en boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/>
-			<check_box label="Masquer l&apos;URL du média" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
-			<check_box label="Masquer l&apos;URL de la musique" name="hide_music_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL de la musique."/>
-			<text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105">
-				Taille du média :
-			</text>
-			<spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
-			<spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
-			<text name="pixels">
-				pixels
-			</text>
-			<text bottom_delta="-28" name="MusicURL:">
-				URL de la
-musique :
-			</text>
-			<line_editor bottom_delta="-12" left="97" name="music_url"/>
-			<text name="Sound:">
-				Son :
-			</text>
-			<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" left="97" name="check sound local"/>
-			<button label="?" label_selected="?" left="378" name="?"/>
-			<text name="Voice settings:">
-				Voix :
-			</text>
-			<check_box label="Activer le chat vocal" left="97" name="parcel_enable_voice_channel"/>
-			<check_box label="Activer le chat vocal (contrôlé par le domaine)" left="97" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="Limiter le chat vocal à cette parcelle" left="117" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="Accès" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				Accès à cette parcelle
-			</text>
-			<check_box label="Autoriser l&apos;accès public" name="public_access"/>
-			<text name="Only Allow">
-				Bloquer l&apos;accès aux résidents :
-			</text>
-			<check_box label="Qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/>
-			<check_box label="Dont l&apos;âge n&apos;a pas été vérifié" name="limit_age_verified" tool_tip="Aux résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com."/>
-			<panel.string name="estate_override">
-				Au moins une de ces options est définie au niveau du domaine.
-			</panel.string>
-			<check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l&apos;onglet Général."/>
-			<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="Tout le monde"
-				/>
-				<combo_box.item name="Group" label="Groupe"
-				/>
-			</combo_box>
-			<spinner label="Prix en L$ :" name="PriceSpin"/>
-			<spinner label="Durée en heures :" name="HoursSpin"/>
-			<text label="Toujours autoriser" name="AllowedText">
-				Résidents autorisés
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/>
-			<button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/>
-			<text label="Bannir" name="BanCheck">
-				Résidents bannis
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
-			<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="À PROPOS DU TERRAIN">
+	<floater.string name="Minutes">
+		[MINUTES] minutes
+	</floater.string>
+	<floater.string name="Minute">
+		minute
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] secondes
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="Général" name="land_general_panel">
+			<panel.string name="new users only">
+				Nouveaux utilisateurs uniquement
+			</panel.string>
+			<panel.string name="anyone">
+				Tout le monde
+			</panel.string>
+			<panel.string name="area_text">
+				Surface
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA] m²
+			</panel.string>
+			<panel.string name="auction_id_text">
+				Code de l&apos;enchère : [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				Pour modifier ce terrain, vous devez approuver votre achat.
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(propriété du groupe)
+			</panel.string>
+			<panel.string name="profile_text">
+				Profil...
+			</panel.string>
+			<panel.string name="info_text">
+				Infos...
+			</panel.string>
+			<panel.string name="public_text">
+				(public)
+			</panel.string>
+			<panel.string name="none_text">
+				(aucun)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(vente en cours)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				Aucune parcelle sélectionnée.
+Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
+			</panel.string>
+			<text name="Name:">
+				Nom :
+			</text>
+			<line_editor name="Name"/>
+			<text name="Description:">
+				Description :
+			</text>
+			<text_editor name="Description"/>
+			<text name="LandType">
+				Type :
+			</text>
+			<text name="LandTypeText">
+				Continent / Homestead
+			</text>
+			<text name="ContentRating">
+				Catégorie :
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				Propriétaire :
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="Profil..." label_selected="Profil..." name="Profile..."/>
+			<text name="Group:">
+				Groupe :
+			</text>
+			<text name="GroupText"/>
+			<button label="Définir..." label_selected="Définir..." name="Set..."/>
+			<check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s&apos;ajouter au patrimoine du groupe."/>
+			<button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d&apos;officier dans le groupe sélectionné."/>
+			<check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu&apos;un terrain est cédé au groupe, l&apos;ancien propriétaire fait également un don de terrain suffisant."/>
+			<text name="For Sale:">
+				À vendre :
+			</text>
+			<text name="Not for sale.">
+				Pas à vendre
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
+			</text>
+			<text name="SalePending"/>
+			<button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
+			<text name="For sale to">
+				À vendre à : [BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel.">
+				Objets inclus dans la vente.
+			</text>
+			<text name="Selling with no objects in parcel.">
+				Objets non inclus dans la vente.
+			</text>
+			<button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/>
+			<text name="Claimed:">
+				Acquis :
+			</text>
+			<text name="DateClaimText">
+				Tue Aug 15 13:47:25 2006
+			</text>
+			<text name="PriceLabel">
+				Superficie :
+			</text>
+			<text name="PriceText">
+				4048 m²
+			</text>
+			<text name="Traffic:">
+				Trafic :
+			</text>
+			<text name="DwellText">
+				0
+			</text>
+			<button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/>
+			<button label="Acheter pour le groupe..." label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
+			<button label="Acheter un pass..." label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
+			<button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/>
+			<button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/>
+			<button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
+		</panel>
+		<panel label="Règlement" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				Le terrain acheté dans cette région peut être revendu.
+			</panel.string>
+			<panel.string name="can_not_resell">
+				Le terrain acheté dans cette région ne peut pas être revendu.
+			</panel.string>
+			<panel.string name="can_change">
+				Le terrain acheté dans cette région peut être fusionné
+ou divisé.
+			</panel.string>
+			<panel.string name="can_not_change">
+				Le terrain acheté dans cette région ne peut pas être fusionné
+ou divisé.
+			</panel.string>
+			<text name="estate_section_lbl">
+				Domaine :
+			</text>
+			<text name="estate_name_lbl">
+				Nom :
+			</text>
+			<text name="estate_name_text">
+				continent
+			</text>
+			<text name="estate_owner_lbl">
+				Propriétaire :
+			</text>
+			<text name="estate_owner_text">
+				(aucun)
+			</text>
+			<text_editor name="covenant_editor">
+				Il n&apos;y a aucun règlement pour ce domaine.
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				Last Modified Wed Dec 31 16:00:00 1969
+			</text>
+			<text name="region_section_lbl">
+				Région :
+			</text>
+			<text name="region_name_lbl">
+				Nom :
+			</text>
+			<text name="region_name_text">
+				leyla
+			</text>
+			<text name="region_landtype_lbl">
+				Type :
+			</text>
+			<text name="region_landtype_text">
+				Continent / Homestead
+			</text>
+			<text name="region_maturity_lbl">
+				Catégorie :
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				Revendre :
+			</text>
+			<text name="resellable_clause">
+				Le terrain dans cette région ne peut être revendu.
+			</text>
+			<text name="changeable_lbl">
+				Sous-diviser :
+			</text>
+			<text name="changeable_clause">
+				Le terrain dans cette région ne peut être fusionné/divisé.
+			</text>
+		</panel>
+		<panel label="Objets" name="land_objects_panel">
+			<panel.string name="objects_available_text">
+				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
+			</panel.string>
+			<panel.string name="objects_deleted_text">
+				[COUNT] sur [MAX] ([DELETED] seront supprimés)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				Facteur Bonus Objets : [BONUS]
+			</text>
+			<text name="Simulator primitive usage:">
+				Prims utilisées sur la parcelle :
+			</text>
+			<text left="214" name="objects_available" width="230">
+				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				Prims max. sur la parcelle :
+			</text>
+			<text left="214" name="object_contrib_text" width="152">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				Prims sur la parcelle :
+			</text>
+			<text left="214" name="total_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="14" name="Owned by parcel owner:" width="180">
+				Appartenant au propriétaire :
+			</text>
+			<text left="214" name="owner_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Set to group:" width="180">
+				Données au groupe :
+			</text>
+			<text left="214" name="group_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Owned by others:" width="128">
+				Appartenant à d&apos;autres :
+			</text>
+			<text left="214" name="other_objects_text" width="48">
+				[COUNT]
+			</text>
+			<button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/>
+			<button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/>
+			<text left="14" name="Selected / sat upon:" width="193">
+				Sélectionnées/où quelqu&apos;un est assis :
+			</text>
+			<text left="214" name="selected_objects_text" width="48">
+				[COUNT]
+			</text>
+			<text left="4" name="Autoreturn" width="412">
+				Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
+			</text>
+			<line_editor name="clean other time" right="-6" width="36"/>
+			<text name="Object Owners:">
+				Propriétaires :
+			</text>
+			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/>
+			<button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
+			<name_list label="Plus récents" name="owner list">
+				<name_list.columns label="Type" name="type"/>
+				<name_list.columns name="online_status"/>
+				<name_list.columns label="Nom" name="name"/>
+				<name_list.columns label="Nombre" name="count"/>
+				<name_list.columns label="Plus récents" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="Options" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
+Seules les parcelles de grande taille peuvent apparaître dans la recherche.
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Contenu Mature
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Contenu Adult
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				Les informations ou contenu de votre parcelle sont classés Mature.
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				Les informations ou contenu de votre parcelle sont classés Adult.
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(aucun)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				Pas de bousculades
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				Pas de bousculades (les règles de la région priment)
+			</panel.string>
+			<text name="allow_label">
+				Autoriser les autres résidents à :
+			</text>
+			<check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n&apos;importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/>
+			<check_box label="Voler" name="check fly" tool_tip="Si cette option est cochée, les résidents peuvent voler sur votre terrain. Si elle n&apos;est pas cochée, ils ne pourront voler que lorsqu&apos;ils arrivent et passent au dessus de votre terrain."/>
+			<text left="152" name="allow_label2">
+				Créer des objets :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="edit objects check"/>
+			<check_box label="Groupe" left="395" name="edit group objects check"/>
+			<text left="152" name="allow_label3" width="134">
+				Laisser entrer des objets :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="all object entry check"/>
+			<check_box label="Groupe" left="395" name="group object entry check"/>
+			<text left="152" name="allow_label4">
+				Exécuter des scripts :
+			</text>
+			<check_box label="Tous les résidents" left="285" name="check other scripts"/>
+			<check_box label="Groupe" left="395" name="check group scripts"/>
+			<text name="land_options_label">
+				Options du terrain :
+			</text>
+			<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
+			<check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
+			<check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
+			<combo_box bottom="-160" left="286" name="land category with adult" width="146">
+				<combo_box.item label="Toutes catégories" name="item0"/>
+				<combo_box.item label="Appartenant aux Lindens" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="Art et Culture" name="item3"/>
+				<combo_box.item label="Affaires" name="item4"/>
+				<combo_box.item label="Éducation" name="item5"/>
+				<combo_box.item label="Jeux" name="item6"/>
+				<combo_box.item label="Favoris" name="item7"/>
+				<combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+				<combo_box.item label="Parcs et Nature" name="item9"/>
+				<combo_box.item label="Résidentiel" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Autre" name="item12"/>
+			</combo_box>
+			<combo_box bottom="-160" left="286" name="land category" width="146">
+				<combo_box.item label="Toutes catégories" name="item0"/>
+				<combo_box.item label="Appartenant aux Lindens" name="item1"/>
+				<combo_box.item label="Art et Culture" name="item3"/>
+				<combo_box.item label="Affaires" name="item4"/>
+				<combo_box.item label="Éducation" name="item5"/>
+				<combo_box.item label="Jeux" name="item6"/>
+				<combo_box.item label="Favoris" name="item7"/>
+				<combo_box.item label="Accueil pour les nouveaux" name="item8"/>
+				<combo_box.item label="Parcs et Nature" name="item9"/>
+				<combo_box.item label="Résidentiel" name="item10"/>
+				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Autre" name="item12"/>
+			</combo_box>
+			<check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/>
+			<text bottom="-200" name="Snapshot:">
+				Photo :
+			</text>
+			<texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
+			<text bottom="-323" name="landing_point">
+				Lieu d&apos;arrivée : [LANDING]
+			</text>
+			<button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d&apos;arrivée des visiteurs. Définit l&apos;emplacement de votre avatar sur ce terrain."/>
+			<button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d&apos;arrivée."/>
+			<text bottom="-343" name="Teleport Routing: ">
+				Règles de téléportation :
+			</text>
+			<combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140">
+				<combo_box.item label="Bloqué" name="Blocked"/>
+				<combo_box.item label="Lieu d&apos;arrivée fixe" name="LandingPoint"/>
+				<combo_box.item label="Lieu d&apos;arrivée libre" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="Médias" name="land_media_panel">
+			<text name="with media:" width="85">
+				Type :
+			</text>
+			<combo_box left="97" name="media type" tool_tip="Indiquez s&apos;il s&apos;agit de l&apos;URL d&apos;un film, d&apos;une page web ou autre"/>
+			<text name="mime_type"/>
+			<text name="at URL:" width="85">
+				URL du domicile :
+			</text>
+			<line_editor left="97" name="media_url"/>
+			<button label="Définir..." label_selected="Définir..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				URL actuelle :
+			</text>
+			<button label="Réinitialiser..." label_selected="Réinitialiser..." name="reset_media_url"/>
+			<check_box label="Masquer l&apos;URL" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l&apos;URL du média. Cette option n&apos;est pas disponible pour les fichiers HTML."/>
+			<text name="Description:">
+				Description :
+			</text>
+			<line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
+			<text name="Media texture:">
+				Remplacer
+la texture :
+			</text>
+			<texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
+			<text name="replace_texture_help">
+				Les objets avec cette texture affichent le film ou la page web quand vous cliquez sur la flèche Jouer.
+
+Sélectionnez l&apos;image miniature pour choisir une texture différente.
+			</text>
+			<check_box label="Échelle automatique" left="97" name="media_auto_scale" tool_tip="Si vous sélectionnez cette option, le contenu de cette parcelle sera automatiquement mis à l&apos;échelle. La qualité visuelle sera peut-être amoindrie mais vous n&apos;aurez à faire aucune autre mise à l&apos;échelle ou alignement."/>
+			<text left="102" name="media_size" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut." width="105">
+				Taille :
+			</text>
+			<spinner left_delta="89" name="media_size_width" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+			<spinner name="media_size_height" tool_tip="Taille du média Web, laisser 0 pour la valeur par défaut."/>
+			<text name="pixels">
+				pixels
+			</text>
+			<text name="Options:">
+				Options :
+			</text>
+			<check_box label="En boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/>
+		</panel>
+		<panel label="Audio" name="land_audio_panel">
+			<text name="MusicURL:">
+				URL de la musique :
+			</text>
+			<text name="Sound:">
+				Son :
+			</text>
+			<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" name="check sound local"/>
+			<text name="Voice settings:">
+				Voix :
+			</text>
+			<check_box label="Activer le chat vocal" name="parcel_enable_voice_channel"/>
+			<check_box label="Activer la voix (contrôlé par le domaine)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="Limiter le chat vocal à cette parcelle" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="Accès" name="land_access_panel">
+			<panel.string name="estate_override">
+				Au moins une de ces options est définie au niveau du domaine.
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				Accès à cette parcelle
+			</text>
+			<check_box label="Autoriser l&apos;accès public" name="public_access"/>
+			<text name="Only Allow">
+				Bloquer l&apos;accès aux résidents :
+			</text>
+			<check_box label="Qui n&apos;ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/>
+			<check_box label="Dont l&apos;âge n&apos;a pas été vérifié" name="limit_age_verified" tool_tip="Interdire les résidents qui n&apos;ont pas vérifié leur âge. Consultez la page [SUPPORT_SITE] pour plus d&apos;informations."/>
+			<check_box label="Autoriser l&apos;accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l&apos;onglet Général."/>
+			<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="Tout le monde" name="Anyone"/>
+				<combo_box.item label="Groupe" name="Group"/>
+			</combo_box>
+			<spinner label="Prix en L$ :" name="PriceSpin"/>
+			<spinner label="Durée en heures :" name="HoursSpin"/>
+			<text label="Toujours autoriser" name="AllowedText">
+				Résidents autorisés
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED] listés, [MAX] max)"/>
+			<button label="Ajouter..." label_selected="Ajouter..." name="add_allowed"/>
+			<button label="Supprimer" label_selected="Supprimer" name="remove_allowed"/>
+			<text label="Bannir" name="BanCheck">
+				Résidents bannis
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED] listés, [MAX] max)"/>
+			<button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
+			<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
index af6cb41ba857de2b6c95a4445cad3ee5e8691c20..00ab29703ffdadf8fccca61d594e30b76ed85566 100644
--- a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
@@ -1,91 +1,186 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		Nom :
-	</text>
-	<text name="description_label">
-		Description :
-	</text>
-	<spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/>
-	<text name="preview_label" width="110">
-		Prévisualiser pendant
-	</text>
-	<combo_box label="" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." left_delta="116" width="124">
-		<combo_box.item name="Standing" label="Debout" />
-		<combo_box.item name="Walking" label="En train de marcher" />
-		<combo_box.item name="Sitting" label="Assis" />
-		<combo_box.item name="Flying" label="En train de voler" />
-	</combo_box>
-	<check_box  left="6" label="Boucle" name="loop_check" tool_tip="Joue cette animation en boucle."/>
-	<spinner left="76" label_width="55" width="105" label="Début (%)" name="loop_in_point" tool_tip="Définit le moment de l&apos;animation où la boucle repart."/>
-	<spinner left="195" label="Fin (%)" name="loop_out_point" tool_tip="Définit le moment de l&apos;animation où la boucle finit."/>
-	<text name="hand_label" width="110">
-		Mouvement de main
-	</text>
-	<combo_box label="" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l&apos;animation" left_delta="116" width="124">
-		<combo_box.item name="Spread" label="Doigts écartés" />
-		<combo_box.item name="Relaxed" label="Détendues" />
-		<combo_box.item name="PointBoth" label="Pointer (les deux)" />
-		<combo_box.item name="Fist" label="Poing" />
-		<combo_box.item name="RelaxedLeft" label="Détendue (gauche)" />
-		<combo_box.item name="PointLeft" label="Pointer (gauche)" />
-		<combo_box.item name="FistLeft" label="Poing (gauche)" />
-		<combo_box.item name="RelaxedRight" label="Détendue (droite)" />
-		<combo_box.item name="PointRight" label="Pointer (droite)" />
-		<combo_box.item name="FistRight" label="Poing (droite)" />
-		<combo_box.item name="SaluteRight" label="Saluer (droite)" />
-		<combo_box.item name="Typing" label="Taper" />
-		<combo_box.item name="PeaceRight" label="Paix (main droite)" />
-	</combo_box>
-	<text name="emote_label">
-		Expression
-	</text>
-	<combo_box label="" name="emote_combo" tool_tip="Contrôle l&apos;expression du visage au cours de l&apos;animation." left_delta="116" width="124">
-		<combo_box.item name="[None]" label="None]" />
-		<combo_box.item name="Aaaaah" label="Aaaaah" />
-		<combo_box.item name="Afraid" label="Effrayé" />
-		<combo_box.item name="Angry" label="En colère" />
-		<combo_box.item name="BigSmile" label="Grand sourire" />
-		<combo_box.item name="Bored" label="Ennui" />
-		<combo_box.item name="Cry" label="Pleurer" />
-		<combo_box.item name="Disdain" label="Mépris" />
-		<combo_box.item name="Embarrassed" label="Gêne" />
-		<combo_box.item name="Frown" label="Froncer les sourcils" />
-		<combo_box.item name="Kiss" label="Embrasser" />
-		<combo_box.item name="Laugh" label="Rire" />
-		<combo_box.item name="Plllppt" label="Plllppt" />
-		<combo_box.item name="Repulsed" label="Dégoût" />
-		<combo_box.item name="Sad" label="Triste" />
-		<combo_box.item name="Shrug" label="Hausser les épaules" />
-		<combo_box.item name="Smile" label="Sourire" />
-		<combo_box.item name="Surprise" label="Surprise" />
-		<combo_box.item name="Wink" label="Clin d&apos;Å“il" />
-		<combo_box.item name="Worry" label="Soucis" />
-	</combo_box>
-	<spinner label_width="65" label="Transition &#10;début (s)" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation s&apos;intègre au mouvement."/>
-	<spinner label_width="65" left="160" width="125" label="Transition &#10;fin (s)" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation disparaît du mouvement."/>
-	<button label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation." bottom_delta="-48"/>
-	<button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
-	<slider label="" name="playback_slider"/>
-	<text name="bad_animation_text">
-		Impossible de lire le fichier d&apos;animation.
-
-Nous recommandons les fichiers BVH extraits de
-Poser 4.
-	</text>
-	<button label="Annuler" name="cancel_btn"/>
-	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
-	<string name="failed_to_initialize">
-		Echec de l&apos;initialisation du mouvement
-	</string>
-	<string name="anim_too_long">
-		Le fichier d&apos;animation fait [LENGTH] secondes.
-
-La longueur maximale est de [MAX_LENGTH] secondes.
-	</string>
-	<string name="failed_file_read">
-		Impossible de lire le fichier d&apos;animation.
-
-[STATUS]
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		Echec de l&apos;initialisation du mouvement
+	</floater.string>
+	<floater.string name="anim_too_long">
+		Le fichier d&apos;animation fait [LENGTH] secondes.
+
+La longueur maximale est de [MAX_LENGTH] secondes.
+	</floater.string>
+	<floater.string name="failed_file_read">
+		Impossible de lire le fichier d&apos;animation.
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		Ok
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		Fichier incomplet.
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		Impossible de lire la définition des contraintes.
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		Impossible d&apos;ouvrir le fichier BVH.
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		En-tête HIERARCHY non valide.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		Impossible de trouver ROOT ou JOINT.
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		Impossible de trouver le nom JOINT.
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		Impossible de trouver OFFSET.
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		Impossible se trouver les CHANNELS.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		Impossible d&apos;obtenir l&apos;ordre de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		Impossible d&apos;obtenir l&apos;axe de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		Impossible de trouver MOTION.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		Impossible d&apos;obtenir le nombre de cadres.
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		Impossible d&apos;obtenir le temps du cadre.
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		Impossible de trouver les valeurs de la position.
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		Impossible de trouver les valeurs de rotation.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Impossible d&apos;ouvrir le fichier de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Impossible de lire l&apos;en-tête de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Impossible de lire la valeur de traduction relative.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Impossible de lire la traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Impossible de lire la matrice de traduction.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Impossible de trouver le nom mergechild.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Impossible de trouver le nom mergeparent.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		Impossible de définir la valeur de la priorité.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		Impossible de définir la valeur de la boucle
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Impossible de trouver les valeurs easeln.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		Impossible de trouver les valeurs easeOut.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Impossible d&apos;obtenir la valeur hand morph.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		Impossible de lire le nom emote.
+	</floater.string>
+	<text name="name_label">
+		Nom :
+	</text>
+	<text name="description_label">
+		Description :
+	</text>
+	<spinner label="Priorité" name="priority" tool_tip="Contrôle quelles animations peuvent êtres écrasées par cette animation."/>
+	<check_box label="Boucle" left="6" name="loop_check" tool_tip="Joue cette animation en boucle."/>
+	<spinner label="Début (%)" label_width="55" left="76" name="loop_in_point" tool_tip="Définit le moment de l&apos;animation où la boucle repart." width="105"/>
+	<spinner label="Fin (%)" left="195" name="loop_out_point" tool_tip="Définit le moment de l&apos;animation où la boucle finit."/>
+	<text name="hand_label" width="110">
+		Mouvement de main
+	</text>
+	<combo_box label="" left_delta="116" name="hand_pose_combo" tool_tip="Contrôle le mouvement des mains au cours de l&apos;animation" width="124">
+		<combo_box.item label="Doigts écartés" name="Spread"/>
+		<combo_box.item label="Détendues" name="Relaxed"/>
+		<combo_box.item label="Pointer (les deux)" name="PointBoth"/>
+		<combo_box.item label="Poing" name="Fist"/>
+		<combo_box.item label="Détendue (gauche)" name="RelaxedLeft"/>
+		<combo_box.item label="Pointer (gauche)" name="PointLeft"/>
+		<combo_box.item label="Poing (gauche)" name="FistLeft"/>
+		<combo_box.item label="Détendue (droite)" name="RelaxedRight"/>
+		<combo_box.item label="Pointer (droite)" name="PointRight"/>
+		<combo_box.item label="Poing (droite)" name="FistRight"/>
+		<combo_box.item label="Saluer (droite)" name="SaluteRight"/>
+		<combo_box.item label="Taper" name="Typing"/>
+		<combo_box.item label="Paix (main droite)" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		Expression
+	</text>
+	<combo_box label="" left_delta="116" name="emote_combo" tool_tip="Contrôle l&apos;expression du visage au cours de l&apos;animation." width="124">
+		<combo_box.item label="None]" name="[None]"/>
+		<combo_box.item label="Aaaaah" name="Aaaaah"/>
+		<combo_box.item label="Effrayé" name="Afraid"/>
+		<combo_box.item label="En colère" name="Angry"/>
+		<combo_box.item label="Grand sourire" name="BigSmile"/>
+		<combo_box.item label="Ennui" name="Bored"/>
+		<combo_box.item label="Pleurer" name="Cry"/>
+		<combo_box.item label="Mépris" name="Disdain"/>
+		<combo_box.item label="Gêne" name="Embarrassed"/>
+		<combo_box.item label="Froncer les sourcils" name="Frown"/>
+		<combo_box.item label="Embrasser" name="Kiss"/>
+		<combo_box.item label="Rire" name="Laugh"/>
+		<combo_box.item label="Plllppt" name="Plllppt"/>
+		<combo_box.item label="Dégoût" name="Repulsed"/>
+		<combo_box.item label="Triste" name="Sad"/>
+		<combo_box.item label="Hausser les épaules" name="Shrug"/>
+		<combo_box.item label="Sourire" name="Smile"/>
+		<combo_box.item label="Surprise" name="Surprise"/>
+		<combo_box.item label="Clin d&apos;Å“il" name="Wink"/>
+		<combo_box.item label="Soucis" name="Worry"/>
+	</combo_box>
+	<text name="preview_label" width="110">
+		Prévisualiser pendant
+	</text>
+	<combo_box label="" left_delta="116" name="preview_base_anim" tool_tip="Utilisez cette option pour tester votre animation pendant que votre avatar fait des choses banales." width="124">
+		<combo_box.item label="Debout" name="Standing"/>
+		<combo_box.item label="En train de marcher" name="Walking"/>
+		<combo_box.item label="Assis" name="Sitting"/>
+		<combo_box.item label="En train de voler" name="Flying"/>
+	</combo_box>
+	<spinner label="Transition 
+début (s)" label_width="65" name="ease_in_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation s&apos;intègre au mouvement."/>
+	<spinner label="Transition 
+fin (s)" label_width="65" left="160" name="ease_out_time" tool_tip="Durée (en secondes) pendant laquelle l&apos;animation disparaît du mouvement." width="125"/>
+	<button bottom_delta="-48" label="" name="play_btn" tool_tip="Jouer/Arrêter votre animation."/>
+	<button label="" name="stop_btn" tool_tip="Arrêter le playback"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		Impossible de lire le fichier d&apos;animation.
+
+Nous recommandons les fichiers BVH extraits de
+Poser 4.
+	</text>
+	<button label="Annuler" name="cancel_btn"/>
+	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml
index 4bdf9df1beb17101fa21a3fbb0d18de22f8f201a..3ec95a60c58e95d62c0ea9a3102fa5be36f5d332 100644
--- a/indra/newview/skins/default/xui/fr/floater_auction.xml
+++ b/indra/newview/skins/default/xui/fr/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Commencer la vente de terrain Linden">
+<floater name="floater_auction" title="COMMENCER LA VENTE DE TERRAIN LINDEN">
 	<check_box label="Inclure le marquage de sélection jaune" name="fence_check" />
 	<combo_box name="saletype_combo">
 		<combo_box.item name="Auction" label="Enchères" />
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
index 01b4c944f3cfd229d9496ee3379094fef7bd0c9e..5742b0af04b753c4e82f25690b318f412286c0dd 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
@@ -1,42 +1,41 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Choisir le résident">
-	<tab_container name="ResidentChooserTabs">
-		<panel label="Rechercher" name="SearchPanel">
-			<text name="InstructSearchResidentName">
-				Saisissez une partie du nom du résident :
-			</text>
-			<button label="Trouver" label_selected="Trouver" name="Find"/>
-		</panel>
-		<panel label="Cartes de visite" name="CallingCardsPanel">
-			<text name="InstructSelectCallingCard">
-				Sélectionnez une carte de visite :
-			</text>
-		</panel>
-		<panel label="Près de moi" name="NearMePanel">
-			<text name="InstructSelectResident">
-				Choisir un résident
-près de vous :
-			</text>
-			<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" name="Refresh" left_delta="10" width="105"/>
-			<slider label="Distance" name="near_me_range" bottom_delta="-36"/>
-			<text name="meters">
-				mètres
-			</text>
-			<scroll_list bottom_delta="-169" height="159" name="NearMe"  />
-		</panel>
-	</tab_container>
-	<button label="Sélectionner" label_selected="Sélectionner" name="Select"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<string name="not_found">
-		&apos;[TEXT]&apos; introuvable
-	</string>
-	<string name="no_one_near">
-		Il n'y a personne près de vous
-	</string>
-	<string name="no_results">
-		Aucun résultat
-	</string>
-	<string name="searching">
-		Recherche...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="avatarpicker" title="CHOISIR LE RÉSIDENT">
+	<tab_container name="ResidentChooserTabs">
+		<panel label="Rechercher" name="SearchPanel">
+			<text name="InstructSearchResidentName">
+				Saisissez une partie du nom du résident :
+			</text>
+			<button label="OK" label_selected="OK" name="Find"/>
+		</panel>
+		<panel label="Cartes de visite" name="CallingCardsPanel">
+			<text name="InstructSelectCallingCard">
+				Sélectionnez une carte de visite :
+			</text>
+		</panel>
+		<panel label="Près de moi" name="NearMePanel">
+			<text name="InstructSelectResident">
+				Sélectionner une personne près de vous :
+			</text>
+			<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" left_delta="10" name="Refresh" width="105"/>
+			<slider bottom_delta="-36" label="Distance" name="near_me_range"/>
+			<text name="meters">
+				mètres
+			</text>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
+	<string name="not_found">
+		&apos;[TEXT]&apos; introuvable
+	</string>
+	<string name="no_one_near">
+		Il n&apos;y a personne près de vous
+	</string>
+	<string name="no_results">
+		Aucun résultat
+	</string>
+	<string name="searching">
+		Recherche...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
index f4e3a1615c22d2e42b818c6baac2ccd7cc6d9100..569126f3ecb032a517883b5bb8808b8eb0b805c9 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Textures de l&apos;avatar">
+<floater name="avatar_texture_debug" title="TEXTURES DE L&apos;AVATAR">
 	<text name="label">
 		Textures fixées
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
index 0b060983eead7ba0003db1afbb9cdfd1924f2d14..a74768988303f2c32a5b81b2c77aad6894e83d09 100644
--- a/indra/newview/skins/default/xui/fr/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balises">
-	<panel name="beacons_panel">
-		<check_box label="Objets scriptés avec Toucher uniquement" name="touch_only"/>
-		<check_box label="Objets scriptés" name="scripted"/>
-		<check_box label="Objets physiques" name="physical"/>
-		<check_box label="Sources sonores" name="sounds"/>
-		<check_box label="Sources de particules" name="particles"/>
-		<check_box label="Mettre en surbrillance" name="highlights"/>
-		<check_box label="Montrer les balises" name="beacons"/>
-		<text name="beacon_width_label">
-			Largeur de la balise :
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="BALISES">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			Afficher :
+		</text>
+		<check_box label="Balises" name="beacons"/>
+		<check_box label="Surbrillances" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="Largeur de la balise">
+			Largeur :
+		</text>
+		<text name="label_objects">
+			Pour ces objets :
+		</text>
+		<check_box label="Physique" name="physical"/>
+		<check_box label="Scripté" name="scripted"/>
+		<check_box label="Toucher uniquement" name="touch_only"/>
+		<check_box label="Sources sonores" name="sounds"/>
+		<check_box label="Sources des particules" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index 3451c2de4c7e3674f8ede1ea3a5fdb646ccc2a6a..e8e6a59dc4fa4be8215f54c51024ac2d4387bc60 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Options de la grille">
-	<spinner label="Unité (mètres)" name="GridResolution" />
-	<spinner label="Mesures (mètres)" name="GridDrawSize" />
-	<check_box label="Activer la fixation des sous-unités" name="GridSubUnit" />
-	<check_box label="Afficher les sections transversales" name="GridCrossSection" />
-	<slider label="Opacité de la grille" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="OPTIONS DE LA GRILLE">
+	<spinner label="Unités (mètres)" name="GridResolution"/>
+	<spinner label="Mesures (mètres)" name="GridDrawSize"/>
+	<check_box label="Fixation des sous-unités" name="GridSubUnit"/>
+	<check_box label="Afficher les sections transversales" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="Opacité de la grille">
+		Opacité :
+	</text>
+	<slider label="Opacité de la grille" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index b868aa33adc509905ea57ce57e5c6ec0654fb63e..212ee2504a8b8f0bb654fac8b11ce376e9b836fe 100644
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Changement des droits relatifs au contenu">
-	<text name="applyto">
-		Types de contenu
-	</text>
-	<check_box label="Animation" name="check_animation"/>
-	<check_box label="Parties du corps" name="check_bodypart"/>
-	<check_box label="Habits" name="check_clothing"/>
-	<check_box label="Gestes" name="check_gesture"/>
-	<check_box label="Repères" name="check_landmark"/>
-	<check_box label="Notes" name="check_notecard"/>
-	<check_box label="Objets" name="check_object"/>
-	<check_box label="Scripts" name="check_script"/>
-	<check_box label="Sons" name="check_sound"/>
-	<check_box label="Textures" name="check_texture"/>
-	<button label="Tout cocher" label_selected="Tout" name="check_all"/>
-	<button label="Tout décocher" label_selected="Aucun" name="check_none"/>
-	<text name="newperms">
-		Nouveaux droits
-	</text>
-	<check_box label="Partager avec le groupe" name="share_with_group"/>
-	<check_box label="Autoriser tout le monde à copier" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		Le prochain propriétaire pourra :
-	</text>
-	<check_box label="Modifier" name="next_owner_modify"/>
-	<check_box label="Copier" name="next_owner_copy"/>
-	<check_box label="Revendre/Donner" name="next_owner_transfer"/>
-	<button label="Aide" name="help"/>
-	<button label="Appliquer" name="apply"/>
-	<button label="Fermer" name="close"/>
-	<string name="nothing_to_modify_text">
-		La sélection contient des contenus non modifiables.
-	</string>
-	<string name="status_text">
-		Permissions paramétrées sur [NAME]
-	</string>
-	<string name="start_text">
-		Demande de changement des droits lancée...
-	</string>
-	<string name="done_text">
-		Demande de changement des droits finie.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="Modifier les droits relatifs au contenu">
+	<floater.string name="nothing_to_modify_text">
+		La sélection contient des contenus non modifiables.
+	</floater.string>
+	<floater.string name="status_text">
+		Permissions paramétrées sur [NAME]
+	</floater.string>
+	<floater.string name="start_text">
+		Demande de changement des droits lancée...
+	</floater.string>
+	<floater.string name="done_text">
+		Demande de changement des droits finie.
+	</floater.string>
+	<check_box label="Animation" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="Animation"/>
+	<check_box label="Parties du corps" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="Parties du corps"/>
+	<check_box label="Habits" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="Habits"/>
+	<check_box label="Gestes" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="Gestes"/>
+	<check_box label="Notes" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="Notes"/>
+	<check_box label="Objets" name="check_object"/>
+	<icon name="icon_object" tool_tip="Objets"/>
+	<check_box label="Scripts" name="check_script"/>
+	<icon name="icon_script" tool_tip="Scripts"/>
+	<check_box label="Sons" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="Sons"/>
+	<check_box label="Textures" name="check_texture"/>
+	<button label="√ Tout" label_selected="Tout" name="check_all"/>
+	<button label="Effacer" label_selected="Aucun" name="check_none"/>
+	<text name="newperms">
+		Nouvelles permissions relatives au contenu
+	</text>
+	<text name="GroupLabel">
+		Groupe :
+	</text>
+	<check_box label="Partager" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		N&apos;importe qui :
+	</text>
+	<check_box label="Copier" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		Le prochain propriétaire :
+	</text>
+	<check_box label="Modifier" name="next_owner_modify"/>
+	<check_box label="Copier" name="next_owner_copy"/>
+	<check_box initial_value="true" label="Transférer" name="next_owner_transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+	<button label="OK" name="apply"/>
+	<button label="Annuler" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml
index e12c7ed17d646e05a55870120be9f471f7a931d4..e439c30524f3dea3cf1b46c8f27b2fee2684845a 100644
--- a/indra/newview/skins/default/xui/fr/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Collisions, coups et bousculades">
+<floater name="floater_bumps" title="COLLISIONS, COUPS ET BOUSCULADES">
 	<text name="none_detected">
 		Aucun détecté
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
index 916b270500be8c9992f2caabf9efd52a4e00b15c..e8b47f536568b2f303f73fb539ac20996303ca1b 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Acheter ce contenu">
+<floater name="floater_buy_contents" title="ACHETER CE CONTENU">
 	<text name="contains_text">
 		[NAME] contient :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
index 85d67218d3ece3fdbb36a781faf118018401512c..9112d30be270099101dbd20a5903fcfa8bd31bc0 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Acheter des L$">
+<floater name="buy currency" title="ACHETER DES L$">
 	<text left="5" name="info_buying">
 		Achat de L$ :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
index aaf1577114bfb62fd7d71e663e935ef4a8eb0171..2b93098847173771af0f3109d506061defda7495 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Acheter le terrain">
+<floater name="buy land" title="ACHETER LE TERRAIN">
 	<text name="region_name_label">
 		Région :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
index 9e0ce25b9757f5edf8792adc77757ce2faec7027..86b67ad491d5d3390cf322af60aab1e183e41b09 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Acheter une copie de l&apos;objet">
-	<text name="contents_text">
-		et ses contenus :
-	</text>
-	<text name="buy_text">
-		Acheter pour [AMOUNT] L$ à [NAME] ?
-	</text>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
-	<string name="title_buy_text">
-		Acheter
-	</string>
-	<string name="title_buy_copy_text">
-		Acheter une copie
-	</string>
-	<string name="no_copy_text">
-		(pas de copie)
-	</string>
-	<string name="no_modify_text">
-		(pas de modification)
-	</string>
-	<string name="no_transfer_text">
-		(pas de transfert)
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
+	<text name="contents_text">
+		Contient :
+	</text>
+	<text name="buy_text">
+		Acheter pour [AMOUNT] L$ à [NAME] ?
+	</text>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+	<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
+	<string name="title_buy_text">
+		Acheter
+	</string>
+	<string name="title_buy_copy_text">
+		Acheter une copie
+	</string>
+	<string name="no_copy_text">
+		(pas de copie)
+	</string>
+	<string name="no_modify_text">
+		(pas de modification)
+	</string>
+	<string name="no_transfer_text">
+		(pas de transfert)
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 8ea640853f23e8c3b43697ddacd7c000ed88885f..2fc01b9f171a1223879b5d95288556e637b1543f 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		Faire tourner la caméra autour du point central
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		Zoomer en direction du point central
-	</floater.string>
-	<floater.string name="move_tooltip">
-		Déplacer la caméra vers le haut et le bas, la gauche et la droite
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
-		<joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Faire tourner la caméra autour du point central
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Zoomer en direction du point central
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Déplacer la caméra vers le haut et le bas, la gauche et la droite
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
+		<joystick_zoom name="zoom" tool_tip="Zoomer en direction du point central"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
+		<button label="" name="pan_btn" tool_tip="Vue panoramique"/>
+		<button label="" name="avatarview_btn" tool_tip="Vue subjective"/>
+		<button label="" name="freecamera_btn" tool_tip="Voir l&apos;objet"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
index ade440f296211d3a6da1f1773f52d00c4c59d087..15cdd4d332bb6d738bfb7a69584933a88e09e3dc 100644
--- a/indra/newview/skins/default/xui/fr/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Groupes">
+<floater name="groups" title="GROUPES">
 	<text name="groupdesc">
 		Choisissez un groupe :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
index 94bcad070e8336769d7c061f1c9b7db74d6c134d..111e4d3e5e143dfb93f860c0b7909e37dc169151 100644
--- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Choix de texture et de couleur">
-	<text name="r_val_text">
-		Rouge :
-	</text>
-	<text name="g_val_text">
-		Vert :
-	</text>
-	<text name="b_val_text">
-		Bleu :
-	</text>
-	<text name="h_val_text">
-		Teinte :
-	</text>
-	<text name="s_val_text">
-		Sat :
-	</text>
-	<text name="l_val_text">
-		Lum :
-	</text>
-	<check_box label="Application auto" left="4" name="apply_immediate" width="108"/>
-	<button label="" label_selected="" left_delta="138" name="color_pipette"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Sélectionner" label_selected="Sélectionner" name="select_btn"/>
-	<text left="8" name="Current color:">
-		Couleur actuelle :
-	</text>
-	<text left="8" name="(Drag below to save.)" width="114">
-		(Faire glisser dessous
-pour enregistrer)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="CHOIX DE TEXTURE ET DE COULEUR">
+	<text name="r_val_text">
+		Rouge :
+	</text>
+	<text name="g_val_text">
+		Vert :
+	</text>
+	<text name="b_val_text">
+		Bleu :
+	</text>
+	<text name="h_val_text">
+		Teinte :
+	</text>
+	<text name="s_val_text">
+		Sat :
+	</text>
+	<text name="l_val_text">
+		Lum :
+	</text>
+	<check_box label="Appliquer maintenant" left="4" name="apply_immediate" width="108"/>
+	<button label="" label_selected="" left_delta="138" name="color_pipette"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+	<button label="OK" label_selected="Sélectionner" name="select_btn"/>
+	<text left="8" name="Current color:">
+		Couleur actuelle :
+	</text>
+	<text left="8" name="(Drag below to save.)" width="114">
+		(Faire glisser dessous
+pour enregistrer)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
index 1250c46933fce4378bcc9c17d3c7048f995f3d95..bf70c5415ee75a193eaaebf33c04c5689f58a687 100644
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ b/indra/newview/skins/default/xui/fr/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Apparence" width="548">
+<floater name="floater customize" title="APPARENCE" width="548">
 	<tab_container name="customize tab container" tab_min_width="150" width="546">
 		<placeholder label="Parties du corps" name="body_parts_placeholder"/>
 		<panel label="Silhouette" left="154" name="Shape" width="389">
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
index 110353989823eed7e557aa0170c31b280277dbf7..0b36b7b8ca7c2fb6d1ae8063ccbf5ed63a57fc25 100644
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Editeur du cycle du jour">
+<floater name="Day Cycle Floater" title="EDITEUR DU CYCLE DU JOUR">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Cycle du jour" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
index 656f1c4fbab24d4a8e196768de5ac1d8d641fc27..5374b4e593436127fb8212df96be1411d9660378 100644
--- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="floater_device_settings"
-     title="Paramètres du matériel utilisé pour le chat vocal" />
+     title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL" />
diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
index 1d14142dd3013eb9130c9bc8e46ea55b941949b8..7d6de114be30567ac4545d4f4372be2279220e5f 100644
--- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Éditeur d&apos;environnement">
+<floater name="Environment Editor Floater" title="ÉDITEUR D&apos;ENVIRONNEMENT">
 	<text bottom="-45" name="EnvTimeText">
 		Heure de la
 journée
diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml
index 11eb11a0d7949aed5bee2f07c7f6788ca35ebcb4..3a32e8adc51f36161a5886903dc52a5aa10973b6 100644
--- a/indra/newview/skins/default/xui/fr/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/fr/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Test de la police">
+<floater name="contents" title="TEST DE LA POLICE">
 	<text name="linea">
 		OverrideTest, Times-BOLD doit être sélectionné ici. (De default/xui/fr)
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
index 4411fee480a08089de4bdceceb228661164173e5..b3026478ff4671c0e1a5164712d08be5a2d7651b 100644
--- a/indra/newview/skins/default/xui/fr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Gestes utilisés">
+<floater name="gestures" title="GESTES UTILISÉS">
 	<text name="help_label">
 		Double-cliquez sur un geste pour jouer les animations
 et les sons.
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
index 461956ff34af582ec51e049eaa3f7a464b3585cd..f670fa9965ea42c84d496f0e846110645026c97f 100644
--- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
@@ -1,99 +1,106 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Outils divins">
-	<tab_container name="GodTools Tabs">
-		<panel label="Grille" name="grid">
-			<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175" />
-			<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
-		</panel>
-		<panel label="Région" name="region">
-			<text name="Sim Name:" width="70">
-				Nom du sim :
-			</text>
-			<line_editor left="85" name="region name" width="198" />
-			<check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d&apos;initiation."/>
-			<check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine &gt; Terrain.)"/>
-			<check_box label="Réinitialiser le domicile &#10;à la téléportation" name="check reset home" tool_tip="Lorsqu&apos;un résident se téléporte à l&apos;extérieur, réinitialise son domicile à la position de sa destination."  height="32"/>
-			<check_box label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."  bottom_delta="-32"/>
-			<check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/>
-			<check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/>
-			<check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/>
-			<check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/>
-			<button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118" />
-			<button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118" />
-			<button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118" />
-			<text name="estate id">
-				ID du domaine :
-			</text>
-			<text name="parent id">
-				ID parent :
-			</text>
-			<line_editor name="parentestate" tool_tip="Il s&apos;agit du domaine parent de cette région"/>
-			<text name="Grid Pos: ">
-				Position sur la grille :
-			</text>
-			<line_editor name="gridposx" tool_tip="Position x de cette région sur la grille" left_delta="120" width="35"/>
-			<line_editor name="gridposy" tool_tip="Position y de cette région sur la grille" left_delta="40" width="35" />
-			<text name="Redirect to Grid: ">
-				Rediriger vers la grille :
-			</text>
-			<line_editor left_delta="120" name="redirectx" width="35" />
-			<line_editor left_delta="40" name="redirecty" width="35" />
-			<spinner left="320" name="billable factor" width="70" />
-			<text name="billable factor text" font="SansSerifSmall" left_delta="-120" width="120">
-				Facteur de facturation :
-			</text>
-			<spinner left="320" name="land cost" width="70" />
-			<text name="land cost text" left_delta="-120">
-				L$ par m² :
-			</text>
-			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/>
-			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
-			<button label="Sélectionner une région" label_selected="Sélectionner une région" name="Select Region" tool_tip="Sélectionnez une région entière à l&apos;aide de l&apos;outil Terrain."  width="140" left="136"/>
-			<button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140" left="136"/>
-		</panel>
-		<panel label="Objets" name="objects">
-			<text name="Sim Name:" width="70">
-				Nom du sim :
-			</text>
-			<text name="region name" left_delta="75">
-				Welsh
-			</text>
-			<check_box label="Désactiver les &#10;scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/>
-			<check_box label="Désactiver les &#10;collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/>
-			<check_box label="Désactiver la &#10;physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/>
-			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."  bottom="-85"/>
-			<button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l&apos;avatar cible pour la suppression de l&apos;objet."/>
-			<text name="target_avatar_name">
-				(aucune cible)
-			</text>
-			<button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/>
-			<button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
-			<button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
-			<button width="300" label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. "/>
-			<button width="300" label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts."/>
-			<button width="300" label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences."/>
-		</panel>
-		<panel label="Requête" name="request">
-			<text name="Destination:">
-				Destination :
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="Sélection" />
-				<combo_box.item name="item2" label="Région de l&apos;avatar" />
-			</combo_box>
-			<text name="Request:">
-				Requête :
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="Objets responsables de collisions : étapes" />
-				<combo_box.item name="item2" label="Nombre de scripts et schéma optionnel" />
-				<combo_box.item name="item3" label="Schéma des objets" />
-				<combo_box.item name="item4" label="rezzer &lt;asset_id&gt;" />
-			</combo_box>
-			<text name="Parameter:">
-				Paramètre :
-			</text>
-			<button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="OUTILS DIVINS">
+	<tab_container name="GodTools Tabs">
+		<panel label="Grille" name="grid">
+			<button label="Éjecter tous" label_selected="Éjecter tous" name="Kick all users" width="175"/>
+			<button label="Vider le cache cartographique de la région" label_selected="Vider le cache cartographique de la région" name="Flush This Region&apos;s Map Visibility Caches" width="285"/>
+		</panel>
+		<panel label="Région" name="region">
+			<text name="Sim Name:" width="70">
+				Nom du sim :
+			</text>
+			<line_editor left="85" name="region name" width="198"/>
+			<check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d&apos;initiation."/>
+			<check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine &gt; Terrain.)"/>
+			<check_box height="32" label="Réinitialiser le domicile 
+à la téléportation" name="check reset home" tool_tip="Lorsqu&apos;un résident se téléporte à l&apos;extérieur, réinitialise son domicile à la position de sa destination."/>
+			<check_box bottom_delta="-32" label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."/>
+			<check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/>
+			<check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/>
+			<check_box label="Interdire le terraformage" name="block terraform" tool_tip="Cochez pour empêcher les personnes de terraformer leur terrain"/>
+			<check_box label="Bac à sable" name="is sandbox" tool_tip="Basculer cette région en bac à sable."/>
+			<button label="Figer le terrain" label_selected="Figer le terrain" name="Bake Terrain" tool_tip="Enregistrer le terrain actuel comme terrain par défaut." width="118"/>
+			<button label="Rétablir le terrain" label_selected="Rétablir le terrain" name="Revert Terrain" tool_tip="Remplacer le terrain actuel avec le terrain par défaut." width="118"/>
+			<button label="Échanger le terrain" label_selected="Échanger le terrain" name="Swap Terrain" tool_tip="Échangez le terrain actuel avec le terrain par défaut." width="118"/>
+			<text name="estate id">
+				ID du domaine :
+			</text>
+			<text name="parent id">
+				ID parent :
+			</text>
+			<line_editor name="parentestate" tool_tip="Il s&apos;agit du domaine parent de cette région"/>
+			<text name="Grid Pos: ">
+				Position sur la grille :
+			</text>
+			<line_editor left_delta="120" name="gridposx" tool_tip="Position x de cette région sur la grille" width="35"/>
+			<line_editor left_delta="40" name="gridposy" tool_tip="Position y de cette région sur la grille" width="35"/>
+			<text name="Redirect to Grid: ">
+				Rediriger vers la grille :
+			</text>
+			<line_editor left_delta="120" name="redirectx" width="35"/>
+			<line_editor left_delta="40" name="redirecty" width="35"/>
+			<text font="SansSerifSmall" left_delta="-120" name="billable factor text" width="120">
+				Facteur de facturation :
+			</text>
+			<spinner left="320" name="billable factor" width="70"/>
+			<text left_delta="-120" name="land cost text">
+				L$ par m² :
+			</text>
+			<spinner left="320" name="land cost" width="70"/>
+			<button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/>
+			<button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+			<button label="Sélectionner une région" label_selected="Sélectionner une région" left="136" name="Select Region" tool_tip="Sélectionnez une région entière à l&apos;aide de l&apos;outil Terrain." width="140"/>
+			<button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" left="136" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140"/>
+		</panel>
+		<panel label="Objets" name="objects">
+			<panel.string name="no_target">
+				(aucune cible)
+			</panel.string>
+			<text name="Sim Name:" width="70">
+				Nom du sim :
+			</text>
+			<text left_delta="75" name="region name">
+				Welsh
+			</text>
+			<check_box label="Désactiver les 
+scripts" name="disable scripts" tool_tip="Cochez pour désactiver tous les scripts dans cette région"/>
+			<check_box label="Désactiver les 
+collisions" name="disable collisions" tool_tip="Cochez pour désactiver les collisions entre non-avatars dans cette région"/>
+			<check_box label="Désactiver la 
+physique" name="disable physics" tool_tip="Cochez pour désactiver tous les effets liés à la physique dans cette région"/>
+			<button bottom="-85" label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/>
+			<button label="Définir la cible" label_selected="Définir la cible" name="Set Target" tool_tip="Définir l&apos;avatar cible pour la suppression de l&apos;objet."/>
+			<text name="target_avatar_name">
+				(aucune cible)
+			</text>
+			<button label="Supprimer tous les objets scriptés de la cible sur les terrains des autres" label_selected="Supprimer tous les objets scriptés de la cible sur les terrains des autres" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Supprimer tous les objets scriptés appartenant à la cible sur les terrains ne lui appartenant pas. Les objets non copiables seront renvoyés."/>
+			<button label="Supprimer les objets scriptés de la cible sur *tous* les terrains" label_selected="Supprimer les objets scriptés de la cible sur *tous* les terrains" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Supprimer les objets scriptés appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+			<button label="Supprimer *tous* les objets de la cible" label_selected="Supprimer *tous* les objets de la cible" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Supprimer tous les objets appartenant à la cible dans cette région. Les objets non copiables seront renvoyés."/>
+			<button label="Afficher les collisions les plus consommatrices" label_selected="Afficher les collisions les plus consommatrices" name="Get Top Colliders" tool_tip="Dresse une liste des objets avec les callbacks les plus fréquents. " width="300"/>
+			<button label="Afficher les objets scriptés les plus consommateurs" label_selected="Afficher les objets scriptés les plus consommateurs" name="Get Top Scripts" tool_tip="Dresse une liste des objets qui passent le plus de temps à exécuter des scripts." width="300"/>
+			<button label="Résumé des scripts" label_selected="Résumé des scripts" name="Scripts digest" tool_tip="Dresse une liste des scripts et de leurs occurrences." width="300"/>
+		</panel>
+		<panel label="Requête" name="request">
+			<text name="Destination:">
+				Destination :
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="Sélection" name="item1"/>
+				<combo_box.item label="Région de l&apos;avatar" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				Requête :
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="Objets responsables de collisions : étapes" name="item1"/>
+				<combo_box.item label="Nombre de scripts et schéma optionnel" name="item2"/>
+				<combo_box.item label="Schéma des objets" name="item3"/>
+				<combo_box.item label="rezzer &lt;asset_id&gt;" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				Paramètre :
+			</text>
+			<button label="Effectuer la requête" label_selected="Effectuer la requête" name="Make Request" width="140"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
index 11d7fc28e947d644422e71abc5c0667b50d1e4b8..018c0d81cf2fee5b3b39aca7416f2a2fc2d52157 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Configuration du matériel">
-	<text name="Filtering:">
-		Filtres :
-	</text>
-	<check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/>
-	<text name="Antialiasing:">
-		Anti-aliasing :
-	</text>
-	<combo_box label="Anti-aliasing" name="fsaa" width="84">
-		<combo_box.item name="FSAADisabled" label="Désactivé" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="Gamma :" name="gamma"/>
-	<text left="217" name="(brightness, lower is brighter)">
-		(0 = défaut, valeur faible = plus lumineux)
-	</text>
-	<text name="Enable VBO:">
-		Activer le VBO :
-	</text>
-	<check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu&apos;ils sont activés."/>
-	<slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/>
-	<spinner label="Indice du brouillard :" name="fog"/>
-	<button label="OK" label_selected="OK" name="OK"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="CONFIGURATION DU MATÉRIEL">
+	<text name="Filtering:">
+		Filtres :
+	</text>
+	<check_box label="Filtre anisotrope (plus lent si activé)" name="ani"/>
+	<text name="Antialiasing:">
+		Anti-aliasing :
+	</text>
+	<combo_box label="Anti-aliasing" name="fsaa" width="84">
+		<combo_box.item label="Désactivé" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="Gamma :" name="gamma"/>
+	<text left="217" name="(brightness, lower is brighter)">
+		(0 = défaut, valeur faible = plus lumineux)
+	</text>
+	<text name="Enable VBO:">
+		Activer le VBO :
+	</text>
+	<check_box label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Sur un matériel moderne, cette option permet une meilleure performance. Par contre, sur un matériel plus ancien, les VBO sont souvent mal implémentés et peuvent causer des crashs lorsqu&apos;ils sont activés."/>
+	<slider label="Mémoire vidéo (Mo) :" name="GrapicsCardTextureMemory" tool_tip="Total de la mémoire alloué aux textures. Mémoire de la carte vidéo par défaut. En réduisant cette valeur, vous pouvez accroître la performance mais les textures risquent de devenir floues."/>
+	<spinner label="Indice du brouillard :" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml
index 55c8b57ae2fa4a442760c5c419990002e347ee04..13ca0e8770681b71eda546f03d5f65a4ab6eef9c 100644
--- a/indra/newview/skins/default/xui/fr/floater_hud.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Didacticiel" />
+<floater name="floater_hud" title="DIDACTICIEL" />
diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
index f12c1fee448736f04c70de54f3b395c65e803502..57b60a28bf5debb7104a4a7e4bdfc98e15f9ccda 100644
--- a/indra/newview/skins/default/xui/fr/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		Nom :
-	</text>
-	<text name="description_label">
-		Description :
-	</text>
-	<text name="preview_label">
-		Prévisualiser comme :
-	</text>
-	<combo_box label="Habits" name="clothing_type_combo" left="126" >
-		<combo_box.item name="Image" label="Image" />
-		<combo_box.item name="Hair" label="Cheveux" />
-		<combo_box.item name="FemaleHead" label="Tête de femme" />
-		<combo_box.item name="FemaleUpperBody" label="Corps de femme (haut)" />
-		<combo_box.item name="FemaleLowerBody" label="Corps de femme (bas)" />
-		<combo_box.item name="MaleHead" label="Tête d&apos;homme" />
-		<combo_box.item name="MaleUpperBody" label="Corps d&apos;homme (haut)" />
-		<combo_box.item name="MaleLowerBody" label="Corps d&apos;homme (bas)" />
-		<combo_box.item name="Skirt" label="Jupe" />
-		<combo_box.item name="SculptedPrim" label="Sculptie" />
-	</combo_box>
-	<text name="bad_image_text">
-		Impossible de lire l&apos;image.
-
-Sauvegardez en Targa 24 bit (.tga).
-	</text>
-	<check_box label="Utiliser une compression sans perte" name="lossless_check"/>
-	<button label="Annuler" name="cancel_btn"/>
-	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		Nom :
+	</text>
+	<text name="description_label">
+		Description :
+	</text>
+	<text name="preview_label">
+		Prévisualiser comme :
+	</text>
+	<combo_box label="Habits" left="126" name="clothing_type_combo">
+		<combo_box.item label="Image" name="Image"/>
+		<combo_box.item label="Cheveux" name="Hair"/>
+		<combo_box.item label="Tête de femme" name="FemaleHead"/>
+		<combo_box.item label="Corps de femme (haut)" name="FemaleUpperBody"/>
+		<combo_box.item label="Corps de femme (bas)" name="FemaleLowerBody"/>
+		<combo_box.item label="Tête d&apos;homme" name="MaleHead"/>
+		<combo_box.item label="Corps d&apos;homme (haut)" name="MaleUpperBody"/>
+		<combo_box.item label="Corps d&apos;homme (bas)" name="MaleLowerBody"/>
+		<combo_box.item label="Jupe" name="Skirt"/>
+		<combo_box.item label="Sculptie" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		Impossible de lire l&apos;image.
+
+Sauvegardez en Targa 24 bit (.tga).
+	</text>
+	<check_box label="Utiliser une compression sans perte" name="lossless_check"/>
+	<button label="Annuler" name="cancel_btn"/>
+	<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml
index f140c66de0bad0e5fadef4f653d0927b4af5c4f8..944a157f1724cb64c476d6d0a45ddef78baf7292 100644
--- a/indra/newview/skins/default/xui/fr/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Inspecter les objets">
+<floater name="inspect" title="INSPECTER LES OBJETS">
 	<scroll_list name="object_list"
 	     tool_tip="Sélectionner un objet de la liste pour le mettre en surbrillance dans le Monde.">
 		<column label="Nom" name="object_name" />
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml
index 7173025d18e18667c1132b795ad9dd31f4bb38c5..a83a95fa755e66caf0f1dc5557e8ebdd6718998c 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventaire">
+<floater name="Inventory" title="INVENTAIRE">
 	<search_editor label="Saisissez votre recherche ici" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Tous les objets" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
index ec83d5bcaa20843f6961c1b3ad02c29cb83efc70..2e982305bf2a7df556066b1920e25345dfa40045 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propriétés de l&apos;objet de l&apos;inventaire">
-	<text name="LabelItemNameTitle">
-		Nom :
-	</text>
-	<text name="LabelItemDescTitle">
-		Description :
-	</text>
-	<text name="LabelCreatorTitle">
-		Créateur :
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnCreator"/>
-	<text name="LabelOwnerTitle">
-		Propriétaire :
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="Profil..." label_selected="" name="BtnOwner"/>
-	<text name="LabelAcquiredTitle">
-		Acquis :
-	</text>
-	<text name="LabelAcquiredDate">
-		Wed May 24 12:50:46 2006
-	</text>
-	<text name="OwnerLabel">
-		Vous pouvez :
-	</text>
-	<check_box label="Modifier" name="CheckOwnerModify"/>
-	<check_box label="Copier" name="CheckOwnerCopy"/>
-	<check_box label="Revendre/Donner" name="CheckOwnerTransfer"/>
-	<text name="BaseMaskDebug">
-		B :
-	</text>
-	<text name="OwnerMaskDebug">
-		O :
-	</text>
-	<text name="GroupMaskDebug">
-		G :
-	</text>
-	<text name="EveryoneMaskDebug">
-		E :
-	</text>
-	<text name="NextMaskDebug">
-		N :
-	</text>
-	<check_box label="Partager avec le groupe" name="CheckShareWithGroup"/>
-	<check_box label="Autoriser tout le monde à copier" name="CheckEveryoneCopy"/>
-	<text name="NextOwnerLabel" width="192">
-		Le prochain propriétaire pourra :
-	</text>
-	<check_box label="Modifier" name="CheckNextOwnerModify"/>
-	<check_box label="Copier" name="CheckNextOwnerCopy"/>
-	<check_box label="Revendre/Donner" name="CheckNextOwnerTransfer"/>
-	<text name="SaleLabel">
-		Marquer l&apos;objet :
-	</text>
-	<check_box label="À vendre" name="CheckPurchase"/>
-	<radio_group name="RadioSaleType">
-		<radio_item name="radio" label="Original" />
-		<radio_item name="radio2" label="Copie" />
-	</radio_group>
-	<text name="TextPrice">
-		Prix :  L$
-	</text>
-	<string name="unknown">
-		(inconnu)
-	</string>
-	<string name="public">
-		(public)
-	</string>
-	<string name="you_can">
-		Vous pouvez :
-	</string>
-	<string name="owner_can">
-		Le propriétaire peut :
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="PROPRIÉTÉS DE L&apos;OBJET DE L&apos;INVENTAIRE">
+	<floater.string name="unknown">
+		(inconnu)
+	</floater.string>
+	<floater.string name="public">
+		(public)
+	</floater.string>
+	<floater.string name="you_can">
+		Vous pouvez :
+	</floater.string>
+	<floater.string name="owner_can">
+		Le propriétaire peut :
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		Nom :
+	</text>
+	<text name="LabelItemDescTitle">
+		Description :
+	</text>
+	<text name="LabelCreatorTitle">
+		Créateur :
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		Propriétaire :
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="Profil..." label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		Acquis :
+	</text>
+	<text name="LabelAcquiredDate">
+		Wed May 24 12:50:46 2006
+	</text>
+	<text name="OwnerLabel">
+		Vous :
+	</text>
+	<check_box label="Éditer" name="CheckOwnerModify"/>
+	<check_box label="Copier" name="CheckOwnerCopy"/>
+	<check_box label="Revendre" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		N&apos;importe qui :
+	</text>
+	<check_box label="Copier" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		Groupe :
+	</text>
+	<check_box label="Partager" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="192">
+		Le prochain propriétaire :
+	</text>
+	<check_box label="Éditer" name="CheckNextOwnerModify"/>
+	<check_box label="Copier" name="CheckNextOwnerCopy"/>
+	<check_box label="Revendre" name="CheckNextOwnerTransfer"/>
+	<check_box label="À vendre" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="Copier" name="Copy"/>
+		<combo_box.item label="Original" name="Original"/>
+	</combo_box>
+	<spinner label="Prix : L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
index 634bb6e2e986e46b48226f30c90897b943d627f0..8fb8d3c6f4389283d55121a52bd7cccad313d6b4 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="Animations" name="check_animation"/>
 	<check_box label="Cartes de visite" name="check_calling_card"/>
 	<check_box label="Habits" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml
index 75800847d72b708ccbd8c366a3e52741e9a85fe9..546c95de4ca27ccbfae5cc8d988f63f1d7a1afc1 100644
--- a/indra/newview/skins/default/xui/fr/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuration du joystick">
+<floater name="Joystick" title="CONFIGURATION DU JOYSTICK">
 	<check_box name="enable_joystick" label="Activer :"/>
 	<spinner label="Mapping axe des X " name="JoystickAxis1"/>
 	<spinner label="Mapping axe des Y" name="JoystickAxis2"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
index 54069c9c49c9223ffbd907110b718c8ee4bc5f4d..593ad903b9060651d48ca1e8a7c2c32f10a19af6 100644
--- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Mesure du lag">
+<floater name="floater_lagmeter" title="MESURE DU LAG">
 	<button name="client_lagmeter" tool_tip="Statut du lag client"/>
 	<text name="client">
 		Client :
diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
index 9c4f4ee966b56ee7c36f2995a0f43763efbff507..87fe2a8352efa01fcec99ab5c826cac7eaf79054 100644
--- a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Mes terrains">
-	<scroll_list name="parcel list">
-		<column label="Nom de la parcelle" name="name"/>
-		<column label="Région" name="location"/>
-		<column label="Type" name="type"/>
-		<column label="Surface" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/>
-	<button label="Voir sur la carte" label_selected="Voir sur la carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/>
-	<text name="contrib_label">
-		Vos contributions :
-	</text>
-	<scroll_list name="grant list">
-		<column label="Groupe" name="group"/>
-		<column label="Surface" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		Surface de terrain autorisée avec votre compte :
-	</text>
-	<text name="allowed_text">
-		[AREA] m²
-	</text>
-	<text name="current_label">
-		Surface occupée actuellement :
-	</text>
-	<text name="current_text">
-		[AREA] m²
-	</text>
-	<text name="available_label">
-		Disponible à l&apos;achat :
-	</text>
-	<text name="available_text">
-		[AREA] m²
-	</text>
-	<string name="area_string">
-		[AREA] m²
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="MES TERRAINS">
+	<scroll_list name="parcel list">
+		<column label="Parcelle" name="name"/>
+		<column label="Région" name="location"/>
+		<column label="Type" name="type"/>
+		<column label="Surface" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Téléporter" label_selected="Téléporter" name="Teleport" tool_tip="Téléportez-vous au milieu de ce terrain."/>
+	<button label="Carte" label_selected="Carte" name="Show on Map" tool_tip="Affichez ce terrain sur la carte du monde."/>
+	<text name="contrib_label">
+		Vos contributions :
+	</text>
+	<scroll_list name="grant list">
+		<column label="Groupe" name="group"/>
+		<column label="Surface" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		Surface de terrain autorisée avec votre compte :
+	</text>
+	<text name="allowed_text">
+		[AREA] m²
+	</text>
+	<text name="current_label">
+		Surface occupée actuellement :
+	</text>
+	<text name="current_text">
+		[AREA] m²
+	</text>
+	<text name="available_label">
+		Disponible à l&apos;achat :
+	</text>
+	<text name="available_text">
+		[AREA] m²
+	</text>
+	<string name="area_string">
+		[AREA] m²
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
index e2e2a9af9a0655a9cb9bddac511bf208788755e1..4879327acee992e811d641578f16b4322481fc51 100644
--- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Script : Nouveau script">
-	<button label="Réinitialiser" label_selected="Réinitialiser" name="Reset" width="100" left="390"/>
-	<check_box label="Exécution en cours" name="running" left="4"/>
-	<check_box label="Mono" name="mono" left="130"/>
-	<string name="not_allowed">
-		Vous n&apos;êtes pas autorisé à afficher ce script.
-	</string>
-	<string name="script_running">
-		Exécution en cours
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="SCRIPT : NOUVEAU SCRIPT">
+	<floater.string name="not_allowed">
+		Ce scipt ne peut pas être copié, visualisé ou modifié.  Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les permissions requises.
+	</floater.string>
+	<floater.string name="script_running">
+		Exécution en cours
+	</floater.string>
+	<floater.string name="Title">
+		Script : [NAME]
+	</floater.string>
+	<button label="Réinitialiser" label_selected="Réinitialiser" left="390" name="Reset" width="100"/>
+	<check_box initial_value="true" label="Exécution en cours" left="4" name="running"/>
+	<check_box initial_value="true" label="Mono" left="130" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
index 5dc0fa76a3547924803c7ad57b2c88ce810c58ee..2e3d88264e94882deaecbbde6a9754a299b060cb 100644
--- a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Wiki LSL">
+<floater name="script ed float" title="WIKI LSL">
 	<check_box label="Suivre le curseur" name="lock_check" />
 	<combo_box label="Verrouiller" name="history_combo" left_delta="120" width="70"/>
 	<button label="Précédente" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml
index ec4bd4ef4adfd896d6adcc5e8b29df6a85ea5ceb..de5b707ee4928eddb2583c917b0a16ffff52a007 100644
--- a/indra/newview/skins/default/xui/fr/floater_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
-	</floater.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="E" name="floater_map_east" text="E">
-		E
-	</text>
-	<text label="O" name="floater_map_west" text="O">
-		O
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SE" name="floater_map_southeast" text="SE">
-		SE
-	</text>
-	<text label="NE" name="floater_map_northeast" text="NE">
-		NE
-	</text>
-	<text label="SO" name="floater_map_southwest" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northwest" text="NO">
-		NO
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		N
+	</floater.string>
+	<floater.string name="mini_map_east">
+		E
+	</floater.string>
+	<floater.string name="mini_map_west">
+		O
+	</floater.string>
+	<floater.string name="mini_map_south">
+		S
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		SE
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		NE
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		SO
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		NO
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION](Double-cliquez pour ouvrir la carte)
+	</floater.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="E" name="floater_map_east" text="E">
+		E
+	</text>
+	<text label="O" name="floater_map_west" text="O">
+		O
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SE" name="floater_map_southeast" text="SE">
+		SE
+	</text>
+	<text label="NE" name="floater_map_northeast" text="NE">
+		NE
+	</text>
+	<text label="SO" name="floater_map_southwest" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northwest" text="NO">
+		NO
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
index e75b45c43a2138d0936266b77c26b1adc9b4d385..377b80f847da1279e28db5333e29dc9a1978b153 100644
--- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
@@ -1,20 +1,31 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Navigateur">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="Précédente" name="back" width="75"/>
-			<button label="Suivante" left_delta="75" name="forward" width="70"/>
-			<button label="Rafraîchir" left_delta="75" name="reload"/>
-			<combo_box left_delta="75" name="address" width="510"/>
-			<button label="OK" left_delta="515" name="go"/>
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="Envoyer l&apos;URL sur la parcelle" name="assign"/>
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/>
-			<check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/>
-			<button label="Fermer" name="close"/>
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="NAVIGATEUR">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Précédente" name="back" width="75"/>
+			<button label="Suivante" left_delta="75" name="forward" width="70"/>
+			<button label="Rafraîchir" left_delta="75" name="reload"/>
+			<combo_box left_delta="75" name="address" width="510"/>
+			<button label="OK" left_delta="515" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="en arrière" name="rewind"/>
+			<button label="stop" name="stop"/>
+			<button label="en avant" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Envoyer l&apos;URL sur la parcelle" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/>
+			<check_box label="Toujours ouvrir dans mon navigateur web" left_delta="201" name="open_always"/>
+			<button label="Fermer" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
index 8ee3a23b95f43a1476bd39bce5988aaa49a7ab75..aadf16ab8ae9077d0225586e7849b5c6e9ee5387 100644
--- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Simulation fuite mémoire">
-	<spinner label="Vitesse de la fuite (octets) :" name="leak_speed" />
-	<spinner label="Max mémoire perdue (Mo) :" name="max_leak" />
-	<text name="total_leaked_label">
-		Mémoire perdue actuelle : [SIZE] Ko
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="Commencer" name="start_btn" width="85"/>
-	<button label="Stop" name="stop_btn" left="100"/>
-	<button label="Libérer" name="release_btn"  left="177"/>
-	<button label="Fermer" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="Simuler une fuite de mémoire">
+	<spinner label="Vitesse de la fuite (octets) :" name="leak_speed"/>
+	<spinner label="Max mémoire perdue (Mo) :" name="max_leak"/>
+	<text name="total_leaked_label">
+		Mémoire perdue actuelle : [SIZE] Ko
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="Commencer" name="start_btn" width="85"/>
+	<button label="Stop" left="100" name="stop_btn"/>
+	<button label="Libérer" left="177" name="release_btn"/>
+	<button label="Fermer" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
index e59f09cba1cb9f852b195760fe20d58ca4f9e1c2..7e7dc53c6c8ee2d1f72c8eb9bb702454c8a07a30 100644
--- a/indra/newview/skins/default/xui/fr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml
@@ -1,14 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche"/>
-	<button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite"/>
-	<button label="" label_selected="" name="move up btn" tool_tip="Sauter ou voler vers le haut"/>
-	<button label="" label_selected="" name="move down btn" tool_tip="S&apos;accroupir ou voler vers le bas"/>
-	<button label="Voler" label_selected="Voler" name="fly btn" tool_tip="Démarrer/arrêter le vol"/>
-	<joystick_slide name="slide left btn" tool_tip="Se déplacer vers la gauche"/>
-	<joystick_slide name="slide right btn" tool_tip="Se déplacer vers la droite"/>
-	<joystick_turn name="forward btn" tool_tip="Se déplacer vers l&apos;avant"/>
-	<joystick_turn name="backward btn" tool_tip="Se déplacer vers l&apos;arrière"/>
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		Vous déplacer vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="walk_back_tooltip">
+		Marcher en arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<string name="run_forward_tooltip">
+		Courir vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="run_back_tooltip">
+		Courir en arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<string name="fly_forward_tooltip">
+		Voler vers l&apos;avant (appuyer sur la flèche vers le haut ou W)
+	</string>
+	<string name="fly_back_tooltip">
+		Voler vers l&apos;arrière (appuyer sur la flèche vers le bas ou S)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche (appuyer sur la flèche de gauche ou sur A)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite (appuyer sur la flèche de droite ou sur D)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="Vous envoler, appuyer sur E"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="Atterrir, appuyer sur C"/>
+		<joystick_turn name="forward btn" tool_tip="Vous déplacer vers l&apos;avant (appuyer sur la flèche vers le haut ou W)"/>
+		<joystick_turn name="backward btn" tool_tip="Marcher en arrière (appuyer sur la flèche vers le bas ou S)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="Mode marche"/>
+		<button label="" name="mode_run_btn" tool_tip="Mode courir"/>
+		<button label="" name="mode_fly_btn" tool_tip="Mode voler"/>
+		<button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
index 23d351f32de4ab8b66ddc4a64eecc0c4cdc0d9e6..aae5770d51a1f55127512e8a173c5eef789add3d 100644
--- a/indra/newview/skins/default/xui/fr/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignorer les objets par nom">
+<floater name="mute by name" title="IGNORER LES OBJETS PAR NOM">
 	<text name="message">
 		Cette fonction ne marche que pour les chats et les IM,
 pas les sons. Saisissez le nom exact de l&apos;objet.
diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
index 911647d8be5fd36c26451c01a1b4a2dab3c921a8..841a42a0ea14f7b08b460631265d2c44f9a467e9 100644
--- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Contacts">
+<floater name="floater_my_friends" title="CONTACTS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amis" name="friends_panel" />
 		<panel label="Groupes" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml
index 7ca2dc3a64229ae9e54684e3726e25c7b06fcbf3..62727da00757be8e94e7f32d5d172935144044cb 100644
--- a/indra/newview/skins/default/xui/fr/floater_notification.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notification.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notification" title="Console de notifications">
+<floater name="notification" title="CONSOLE DE NOTIFICATIONS">
 	<text_editor name="payload">
 		Chargement..
 	</text_editor>
diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
index 7262fe8fe2d55064f61f07530b26ce9ee21dd0a1..fd3782bac2c5a2d111de32b52924434286ab5871 100644
--- a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="notifications_console" title="Console de notifications">
+<floater name="notifications_console" title="CONSOLE DE NOTIFICATIONS">
 	<combo_box label="Sélectionner le type de notification" name="notification_types" width="412"/>
 	<button label="Ajouter" name="add_notification" left="417" width="78"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml
index 3761200d488cb77cb41885450324fc15a4163f34..5ffa2f236d60bb10f3d601840ea38b2f15cdb168 100644
--- a/indra/newview/skins/default/xui/fr/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Contenu des objets">
+<floater name="objectcontents" title="CONTENU DES OBJETS">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml
index b66ea79e7b6237c8de8d6f2c860ed5466553bbb3..5432cb27d0abe41c675ecb3b52f9affce607b20e 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay.xml
@@ -1,22 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Give Money" title="">
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
-	<button label="Payer" label_selected="Payer" name="pay btn"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
-	<text name="payee_label" left="5">
-		Payer :
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text" width="100" halign="left">
-		Paiement rapide :
-	</text>
-	<text left="4" name="amount text">
-		Montant :
-	</text>
-	<line_editor left="60" name="amount" width="55"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text left="5" name="payee_label">
+		Payer :
+	</text>
+	<icon name="icon_person" tool_tip="Résident"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+	<text left="4" name="amount text">
+		Ou choisissez un montant :
+	</text>
+	<line_editor left="60" name="amount" width="55"/>
+	<button label="Payer" label_selected="Payer" name="pay btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
index 077e6965b61d766c3362ab8ac299dad071b5ef7d..04511f5ba02a2a8bb0b38ce46ded7e6473a54d9f 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
@@ -1,31 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Give Money" title="">
-	<text name="payee_group" width="95">
-		Payer le groupe :
-	</text>
-	<text name="payee_resident" width="100" halign="left" >
-		Payer le résident :
-	</text>
-	<text name="payee_name" left="105">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label" left="25">
-		Via un objet :
-	</text>
-	<text name="object_name_text" left="105">
-		...
-	</text>
-	<text name="fastpay text" width="95">
-		Paiement rapide :
-	</text>
-	<text name="amount text" left="5" halign="left">
-		Montant :
-	</text>
-	<button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" />
-	<button label="5 L$" label_selected="5 L$" name="fastpay 5" left="190"/>
-	<button label="10 L$" label_selected="10 L$" name="fastpay 10" left="105" />
-	<button label="20 L$" label_selected="20 L$" name="fastpay 20" left="190"/>
-	<button label="Payer" label_selected="Payer" name="pay btn"/>
-	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
-	<line_editor left="65" name="amount" width="50" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group" width="95">
+		Payer le groupe :
+	</string>
+	<string halign="left" name="payee_resident" width="100">
+		Payer le résident :
+	</string>
+	<icon name="icon_person" tool_tip="Résident"/>
+	<text left="105" name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<text left="25" name="object_name_label">
+		Via un objet :
+	</text>
+	<icon name="icon_object" tool_tip="Objets"/>
+	<text left="105" name="object_name_text">
+		...
+	</text>
+	<button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/>
+	<button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/>
+	<button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/>
+	<button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/>
+	<text halign="left" left="5" name="amount text">
+		Ou choisissez un montant :
+	</text>
+	<line_editor left="65" name="amount" width="50"/>
+	<button label="Payer" label_selected="Payer" name="pay btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
index 9ea970d89dccd2cf308ce1aeef0ba0538cbd2bcb..4b885f3afbe1cdfb6a41fc4092be2893c4bbee06 100644
--- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Droits par défaut">
+<floater name="perm prefs" title="DROITS PAR DÉFAUT">
 	<panel label="Droits" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Partager avec le groupe" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml
index 52afb340a6e543ddc6be759e3191593d30b1ddde..a22c7512e513b2bfa2331ea8b1b1fc22b9090fc1 100644
--- a/indra/newview/skins/default/xui/fr/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/fr/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Paramètres post-traitement">
+<floater name="Post-Process Floater" title="PARAMÈTRES POST-TRAITEMENT">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtre couleur" name="wmiColorFilterPanel">
 			<check_box label="Activer" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml
index ab21d7423a53ead4bf1939866a781006102f476f..9c998c1838b16e43324edc1f9af28538685cf88c 100644
--- a/indra/newview/skins/default/xui/fr/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Postcard" title="Envoyer la photo par e-mail">
+<floater name="Postcard" title="ENVOYER LA PHOTO PAR E-MAIL">
 	<text name="to_label" width="135">
 		E-mail du destinataire :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml
index 9dab4d642ccc3e7426e13a97821d71975813f8d1..ccd29a01dcabcd4cbb19c82e4268cfcdbd5076e4 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Préférences" min_width="330" width="626">
+<floater name="Preferences" title="PRÉFÉRENCES" min_width="330" width="626">
 	<button label="À propos" label_selected="À propos" name="About..." />
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Annuler" label_selected="Annuler" name="Cancel" />
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
index 813e61162174bda2243258ef5838154feaa79892..b7d3eb0a799a0207b109139832960bac1ce46bbc 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		Description :
-	</text>
-	<button label="Jouer dans le Monde" label_selected="Stop" name="Anim play btn"
-	     tool_tip="Jouer cette animation et partagez-la avec d&apos;autres." width="131" left="20"/>
-	<button label="Jouer localement" label_selected="Stop" name="Anim audition btn"
-	     tool_tip="Jouer cette animation et soyez le seul à la voir." width="125" left="162"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		Animation : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Jouer dans le Monde" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Jouer cette animation et partagez-la avec d&apos;autres." width="131"/>
+	<button label="Jouer localement" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Jouer cette animation et soyez le seul à la voir." width="125"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
index 1b6f26150d366223db78f910649b5d8b4bcb0651..a50a4057f8d6a8c77882602ebf22bd77c500b752 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Informations sur la petite annonce" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="INFORMATIONS SUR LA PETITE ANNONCE">
+	<floater.string name="Title">
+		Petite annonce : [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
index e7fc2aa8dda11f1ebcf166f9fbc9b9b17c2442c2..b901751eecf271f145440e6be747b06801fccdb7 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Informations sur l&apos;événement" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="INFORMATIONS SUR L&apos;ÉVÉNEMENT">
+	<floater.string name="Title">
+		Événement : [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6a4514460b1a4c817ad1e4e158269815c607a51
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6a4514460b1a4c817ad1e4e158269815c607a51
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="Raccourci du geste"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
index a23b906df6ec34a78076ae5519bd0b96ee2918a1..1039760623e15d50e6f94660524ec0d7cdf53213 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Remarque :">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save" />
-	<text name="desc txt">
-		Description :
-	</text>
-	<text_editor name="Notecard Editor">
-		Chargement...
-	</text_editor>
-	<string name="no_object">
-		Impossible de trouver l&apos;objet contenant cette note.
-	</string>
-	<string name="not_allowed">
-		Vous n&apos;êtes pas autorisé à afficher cette note.
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="REMARQUE :">
+	<floater.string name="no_object">
+		Impossible de trouver l&apos;objet contenant cette note.
+	</floater.string>
+	<floater.string name="not_allowed">
+		Vous n&apos;avez pas le droit de voir cette note.
+	</floater.string>
+	<floater.string name="Title">
+		Note : [NAME]
+	</floater.string>
+	<floater.string label="Enregistrer" label_selected="Enregistrer" name="Save">
+		Enregistrer
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<text_editor name="Notecard Editor">
+		Chargement...
+	</text_editor>
+	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
index 19ae28c463056636d7bb4babd19dc1dbcb507bc0..d1729ac8dfe20d3a90e1c755436dff97d4df09b2 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		Description :
-	</text>
-	<button label="Jouer dans le Monde" label_selected="Jouer dans le Monde"
-	     name="Sound play btn"
-	     tool_tip="Jouer ce son et partagez-le avec d&apos;autres." width="131" left_delta="-142"/>
-	<button label="Jouer localement" label_selected="Jouer localement"
-	     name="Sound audition btn"
-	     tool_tip="Jouer ce son et soyez le seul à l&apos;entendre." width="125" left="162"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		Son : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Jouer dans le Monde" label_selected="Jouer dans le Monde" left_delta="-142" name="Sound play btn" tool_tip="Jouer ce son et partagez-le avec d&apos;autres." width="131"/>
+	<button label="Jouer localement" label_selected="Jouer localement" left="162" name="Sound audition btn" tool_tip="Jouer ce son et soyez le seul à l&apos;entendre." width="125"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
index e5fd5fc78f8e1da863e9a20581af6bcb7f9af9cc..beebebfd4da7df89bc75a9f59b07a009e9badf02 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		Description :
-	</text>
-	<text name="dimensions">
-		Dimensions : [WIDTH] x [HEIGHT]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		Texture : [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		Copier dans l&apos;inventaire
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+	<button label="Enregistrer" name="Keep"/>
+	<button label="Supprimer" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml
index d69f212b866f03e11ad586b838ba4c62bed9d802..3ec1ebf7e6e439c4673e3b7fa1cc0c511bfde502 100644
--- a/indra/newview/skins/default/xui/fr/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Région et domaine"/>
+<floater name="regioninfo" title="RÉGION ET DOMAINE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
index 687b3068e6381f62dcdf3d44e1164f1842048603..6335e41babb55d2374f7304d8b60be147fdb8ccc 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -1,144 +1,104 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Signaler une infraction">
-	<texture_picker label="" name="screenshot"/>
-	<check_box label="Inclure une capture d&apos;écran" name="screen_check"/>
-	<text name="reporter_title" width="60">
-		Déposant :
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		Région :
-	</text>
-	<text name="sim_field">
-		Nom de la région
-	</text>
-	<text name="pos_title">
-		Position :
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text name="select_object_label">
-		Cliquez sur le bouton puis l&apos;objet :
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d&apos;objet vous permet d&apos;identifier un objet comme sujet du rapport."/>
-	<text name="object_name_label">
-		Nom :
-	</text>
-	<text left_delta="70" name="object_name" width="105">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label" width="66">
-		Propriétaire :
-	</text>
-	<text left_delta="70" name="owner_name" width="105">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
-		<combo_box.item name="Select_category" label="Sélectionnez une catégorie"
-		/>
-		<combo_box.item name="Age__Age_play" label="Âge &gt; « Age play »"
-		/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Âge &gt; Résident adulte sur Second Life pour adolescents"
-		/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Âge &gt; Resident mineur en dehors de Teen Second Life"
-		/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assaut &gt; Bac à sable utilisé pour des combats/zone non sécurisée"
-		/>
-		<combo_box.item name="Assault__Safe_area" label="Assaut &gt; Zone sécurisée"
-		/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="Assaut &gt; Bac à sable pour tests d&apos;armes à feu"
-		/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Commerce &gt; Incapacité à fournir un produit ou service"
-		/>
-		<combo_box.item name="Disclosure__Real_world_information" label="Divulgation &gt; Informations sur la vie réelle"
-		/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="Divulgation &gt; Écoute d&apos;un chat à distance"
-		/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Divulgation &gt; Informations sur Second Life/chat/IM"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Trouble de la paix &gt; Utilisation inadéquate des ressources de la région"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Trouble de la paix &gt; Nombre d&apos;objets scriptés excessif"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="Trouble de la paix &gt; Abandon d&apos;objets"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Trouble de la paix &gt; Spam à répétition"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Trouble de la paix &gt; Spam à caractère commercial"
-		/>
-		<combo_box.item name="Fraud__L$" label="Fraude &gt; L$"
-		/>
-		<combo_box.item name="Fraud__Land" label="Fraude &gt; Terrain"
-		/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Fraude &gt; Vente pyramidale ou lettre-chaîne"
-		/>
-		<combo_box.item name="Fraud__US$" label="Fraude &gt; US$"
-		/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="Harcèlement &gt; Spam visuel"
-		/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Harcèlement &gt; Diffamation envers des individus ou des groupes"
-		/>
-		<combo_box.item name="Harassment__Impeding_movement" label="Harcèlement &gt; Immobilisation"
-		/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="Harcèlement &gt;  Harcèlement sexuel"
-		/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Harcèlement &gt; Incitation à enfreindre les Conditions d&apos;utilisation"
-		/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="Harcèlement &gt; Abus verbal"
-		/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indécence &gt; Contenu ou comportement offensifs"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indécence &gt; Nom d&apos;avatar inapproprié"
-		/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indécence &gt; Contenu ou conduite inappropriés dans une région PG"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indécence &gt; Contenu ou conduite inappropriés dans une région Mature"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violation de droits de propriété intellectuelle &gt; Suppression de contenu"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des droits"
-		/>
-		<combo_box.item name="Intolerance" label="Intolérance"
-		/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="Terrain &gt; Utilisation abusive des ressources du bac à sable"
-		/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="Terrain &gt; Empiètement &gt; Objets/textures"
-		/>
-		<combo_box.item name="Land__Encroachment__Particles" label="Terrain &gt; Empiètement &gt; Particules"
-		/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="Terrain &gt; Empiètement &gt; Arbres/plantes"
-		/>
-		<combo_box.item name="Wagering_gambling" label="Paris/jeux d&apos;argent"
-		/>
-		<combo_box.item name="Other" label="Autre"
-		/>
-	</combo_box>
-	<text name="abuser_name_title">
-		Nom du contrevenant :
-	</text>
-	<button label="Choisir le résident" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/>
-	<check_box label="Ne connaît pas le nom du contrevenant" name="omit_abuser_name" tool_tip="Cochez cette case si vous ne connaissez pas le nom du contrevenant"/>
-	<text name="abuser_name_title2">
-		Indiquez où l&apos;infraction a eu lieu :
-	</text>
-	<text name="sum_title">
-		Récapitulatif :
-	</text>
-	<text name="dscr_title">
-		Détails :
-	</text>
-	<text name="bug_aviso">
-		Indiquez la date, le lieu, la nature de l&apos;infraction, ainsi que
-tout chat ou IM relatif à l&apos;infraction, en étant aussi précis
-que possible. Pensez à indiquer un objet si possible.
-	</text>
-	<text bottom_delta="-16" name="incomplete_title">
-		Remarque : les rapports incomplets ne feront pas l&apos;objet d&apos;une
-enquête.
-	</text>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
-	<button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="SIGNALER UNE INFRACTION">
+	<floater.string name="Screenshot">
+		Capture d&apos;écran
+	</floater.string>
+	<check_box label="Utiliser cette capture d&apos;écran" name="screen_check"/>
+	<text name="reporter_title" width="60">
+		Déposant :
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		Région :
+	</text>
+	<text name="sim_field">
+		Nom de la région
+	</text>
+	<text name="pos_title">
+		Position :
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text name="select_object_label">
+		Cliquez sur le bouton puis l&apos;objet responsable :
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d&apos;objet vous permet d&apos;identifier un objet comme sujet du rapport."/>
+	<text name="object_name_label">
+		Objet :
+	</text>
+	<text left_delta="70" name="object_name" width="105">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label" width="66">
+		Propriétaire :
+	</text>
+	<text left_delta="70" name="owner_name" width="105">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
+		<combo_box.item label="Sélectionnez une catégorie" name="Select_category"/>
+		<combo_box.item label="Âge &gt; « Age play »" name="Age__Age_play"/>
+		<combo_box.item label="Âge &gt; Résident adulte sur Second Life pour adolescents" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="Âge &gt; Resident mineur en dehors de Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="Assaut &gt; Bac à sable utilisé pour des combats/zone non sécurisée" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="Assaut &gt; Zone sécurisée" name="Assault__Safe_area"/>
+		<combo_box.item label="Assaut &gt; Bac à sable pour tests d&apos;armes à feu" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="Commerce &gt; Incapacité à fournir un produit ou service" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="Divulgation &gt; Informations sur la vie réelle" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="Divulgation &gt; Écoute d&apos;un chat à distance" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="Divulgation &gt; Informations sur Second Life/chat/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="Trouble de la paix &gt; Utilisation inadéquate des ressources de la région" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="Trouble de la paix &gt; Nombre d&apos;objets scriptés excessif" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="Trouble de la paix &gt; Abandon d&apos;objets" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="Trouble de la paix &gt; Spam à répétition" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="Trouble de la paix &gt; Spam à caractère commercial" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="Fraude &gt; L$" name="Fraud__L$"/>
+		<combo_box.item label="Fraude &gt; Terrain" name="Fraud__Land"/>
+		<combo_box.item label="Fraude &gt; Vente pyramidale ou lettre-chaîne" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="Fraude &gt; US$" name="Fraud__US$"/>
+		<combo_box.item label="Harcèlement &gt; Spam visuel" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="Harcèlement &gt; Diffamation envers des individus ou des groupes" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="Harcèlement &gt; Immobilisation" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="Harcèlement &gt;  Harcèlement sexuel" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="Harcèlement &gt; Incitation à enfreindre les Conditions d&apos;utilisation" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="Harcèlement &gt; Abus verbal" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="Indécence &gt; Contenu ou comportement offensifs" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="Indécence &gt; Nom d&apos;avatar inapproprié" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région PG" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="Indécence &gt; Contenu ou conduite inappropriés dans une région Mature" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="Violation de droits de propriété intellectuelle &gt; Suppression de contenu" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des droits" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="Intolérance" name="Intolerance"/>
+		<combo_box.item label="Terrain &gt; Utilisation abusive des ressources du bac à sable" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Objets/textures" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Particules" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="Terrain &gt; Empiètement &gt; Arbres/plantes" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="Paris/jeux d&apos;argent" name="Wagering_gambling"/>
+		<combo_box.item label="Autre" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		Nom du contrevenant :
+	</text>
+	<button label="Choisir" label_selected="" name="select_abuser" tool_tip="Sélectionnez le nom du résident dans une liste"/>
+	<text name="abuser_name_title2">
+		Indiquez où l&apos;infraction a eu lieu :
+	</text>
+	<text name="sum_title">
+		Récapitulatif :
+	</text>
+	<text name="dscr_title">
+		Détails :
+	</text>
+	<text name="bug_aviso">
+		Soyez aussi spécifique que possible
+	</text>
+	<text bottom_delta="-16" name="incomplete_title">
+		Remarque : les rapports incomplets ne feront pas l&apos;objet d&apos;une
+enquête.
+	</text>
+	<button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
index 3664222fd2de92a7a7e8d4188e41f0e5b833bd89..e257aac6c428940acc3a4cf97f1c5b8924819a55 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Erreurs/alertes de scripts">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[All scripts]" />
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc805e879b8f9d1abe82601c3a784f0f8cf19a0f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
index b767081625ab9d9225aace083ee3c77c9eb52278..dbd3558c1901c3f785e6b87745f2c225b71c6475 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script : Script de rotation">
-	<text name="desc txt">
-		Description :
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="SCRIPT : SCRIPT DE ROTATION">
+	<floater.string name="Title">
+		Script : [NAME]
+	</floater.string>
+	<text name="desc txt">
+		Description :
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
index 55487f75db0b10438d3b88cf2ceb869b67731242..dbbe2539dc7e336b9b6a76b4254aa76cfed2f4c2 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Réinitialiser progression">
-	<button label="Fermer" label_selected="Fermer" name="close" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="RÉINITIALISER PROGRESSION">
+	<floater.string name="Starting">
+		Début du [START] sur [COUNT] objets.
+	</floater.string>
+	<floater.string name="Done">
+		Fini.
+	</floater.string>
+	<floater.string name="Resetting">
+		Réinitialisation
+	</floater.string>
+	<floater.string name="Running">
+		Exécution en cours
+	</floater.string>
+	<floater.string name="NotRunning">
+		Arrêt
+	</floater.string>
+	<button label="Fermer" label_selected="Fermer" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml
index 6f912026c4642c2dec1272355e66eaeb549a522d..49b0ffe542cd63fff78720925f7fd4eef4c139a4 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Recherche de scripts" width="320">
+<floater name="script search" title="RECHERCHE DE SCRIPTS" width="320">
 	<check_box label="Non sensible à la casse" name="case_text"  left="75"/>
 	<button label="Rechercher" label_selected="Rechercher" name="search_btn" width="96"/>
 	<button label="Remplacer" label_selected="Remplacer" name="replace_btn" left="111" width="96"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
index 643a9435db485433d76583dc25afa976c3e6af85..2ded68309c578903e9308ae2242d7335639d1580 100644
--- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
@@ -1,66 +1,66 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vendre terrain">
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		Parcelle :
-	</text>
-	<text name="info_parcel">
-		PARCEL NAME
-	</text>
-	<text name="info_size_label">
-		Taille :
-	</text>
-	<text name="info_size">
-		[AREA] m²
-	</text>
-	<text name="info_action" bottom_delta="-60">
-		Pour vendre cette
-parcelle :
-	</text>
-	<icon bottom_delta="-86" name="step_price" />
-	<text name="price_label">
-		Votre prix de vente :
-	</text>
-	<text name="price_text">
-		Fixez un prix convenable pour ce terrain.
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m">
-		([PER_METER] L$ par mètre carré)
-	</text>
-	<text name="sell_to_label">
-		Vos acheteurs :
-	</text>
-	<text name="sell_to_text">
-		Vendez votre terrain à n&apos;importe qui ou uniquement à un acheteur
-spécifique.
-	</text>
-	<combo_box name="sell_to" bottom_delta="-32">
-		<combo_box.item name="--selectone--" label="Sélectionnez --" />
-		<combo_box.item name="Anyone" label="N&apos;importe qui" />
-		<combo_box.item name="Specificuser:" label="Acheteur spécifique :" />
-	</combo_box>
-	<button label="Sélectionner..." name="sell_to_select_agent" width="100"/>
-	<text name="sell_objects_label">
-		Vendez-vous des objets avec ce terrain ?
-	</text>
-	<text name="sell_objects_text">
-		Les objets transférables se trouvant sur la parcelle changeront
-de propriétaire.
-	</text>
-	<radio_group name="sell_objects" right="430" bottom_delta="-54">
-		<radio_item name="no" label="Non, rester le propriétaire des objets" />
-		<radio_item name="yes" label="Oui, vendre les objets avec le terrain" />
-	</radio_group>
-	<button label="Afficher les objets" name="show_objects" right="420" width="120"/>
-	<text name="nag_message_label" bottom_delta="-30">
-		Rappel : toute vente est définitive.
-	</text>
-	<button label="Mettre le terrain en vente" name="sell_btn" width="165"/>
-	<button label="Annuler" name="cancel_btn"/>
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="sell land" title="VENDRE TERRAIN">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				Parcelle :
+			</text>
+			<text name="info_parcel">
+				PARCEL NAME
+			</text>
+			<text name="info_size_label">
+				Taille :
+			</text>
+			<text name="info_size">
+				[AREA] m²
+			</text>
+			<text bottom_delta="-60" name="info_action">
+				Pour vendre cette
+parcelle :
+			</text>
+			<icon bottom_delta="-86" name="step_price"/>
+			<text name="price_label">
+				Votre prix de vente :
+			</text>
+			<text name="price_text">
+				Fixez un prix convenable.
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text name="price_per_m">
+				([PER_METER] L$ par mètre carré)
+			</text>
+			<text name="sell_to_label">
+				Vos acheteurs :
+			</text>
+			<text name="sell_to_text">
+				Vendez votre terrain à n&apos;importe qui ou uniquement à un acheteur
+spécifique.
+			</text>
+			<combo_box bottom_delta="-32" name="sell_to">
+				<combo_box.item label="Sélectionnez --" name="--selectone--"/>
+				<combo_box.item label="N&apos;importe qui" name="Anyone"/>
+				<combo_box.item label="Personne spécifique :" name="Specificuser:"/>
+			</combo_box>
+			<button label="Sélectionner..." name="sell_to_select_agent" width="100"/>
+			<text name="sell_objects_label">
+				Vendez-vous des objets avec ce terrain ?
+			</text>
+			<text name="sell_objects_text">
+				Les objets transférables se trouvant sur la parcelle changeront
+de propriétaire.
+			</text>
+			<radio_group bottom_delta="-54" name="sell_objects" right="430">
+				<radio_item label="Non, rester le propriétaire des objets" name="no"/>
+				<radio_item label="Oui, vendre les objets avec le terrain" name="yes"/>
+			</radio_group>
+			<button label="Afficher les objets" name="show_objects" right="420" width="120"/>
+			<text bottom_delta="-30" name="nag_message_label">
+				Rappel : toute vente est définitive.
+			</text>
+			<button label="Mettre le terrain en vente" name="sell_btn" width="165"/>
+			<button label="Annuler" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
index e67b8e2f797b435d7da1c03aa7e2110e773cad62..3550d8c86f6cfee1873bb97eb865a9da7cf887dc 100644
--- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="Paramétrages du mode Debug">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="TRUE" />
-		<combo_box.item name="FALSE" label="FALSE" />
-	</combo_box>
-	<color_swatch label="Couleur" name="color_swatch" width="43" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="Paramètres par défaut" name="default_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="PARAMÉTRAGES DU MODE DEBUG">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="TRUE" name="TRUE"/>
+		<combo_box.item label="FALSE" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="Couleur" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="Paramètres par défaut" name="default_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 49c6ff04a6c51c3c048b4fbaeaccc4caa9ee2c0f..a28e64f7aff0c912f1cb554ca4c7d471d7fe2ed0 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Prévisualiser la photo" width="247">
+<floater name="Snapshot" title="PRÉVISUALISER LA PHOTO" width="247">
 	<text name="type_label">
 		Destination de la photo
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
index 1ab3a4a7147e65746a5ee7968e6ba7894747d9de..9e2b30b3f628d840ef11b081f5b1b246ce911da4 100644
--- a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nom :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml
index 0768c3ace4998b55d0148896d309b2c47a88f9ea..a2e3c199ab79e8d779ef5e740e659dc81ddd90be 100644
--- a/indra/newview/skins/default/xui/fr/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/fr/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistiques"/>
+<floater name="stats floater" title="STATISTIQUES"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d5e3213ca2d01a5152b0cabbd178408abd14d78
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="Statistiques">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="Basic" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="Bandwidth" name="bandwidth"/>
+				<stat_bar label="Packet Loss" name="packet_loss"/>
+				<stat_bar label="Ping Sim" name="ping"/>
+			</stat_view>
+			<stat_view label="Advanced" name="advanced">
+				<stat_view label="Render" name="render">
+					<stat_bar label="KTris Drawn" name="ktrisframe"/>
+					<stat_bar label="KTris Drawn" name="ktrissec"/>
+					<stat_bar label="Total Objects" name="objs"/>
+					<stat_bar label="New Objects" name="newobjs"/>
+				</stat_view>
+				<stat_view label="Texture" name="texture">
+					<stat_bar label="Count" name="numimagesstat"/>
+					<stat_bar label="Raw Count" name="numrawimagesstat"/>
+					<stat_bar label="GL Mem" name="gltexmemstat"/>
+					<stat_bar label="Formatted Mem" name="formattedmemstat"/>
+					<stat_bar label="Raw Mem" name="rawmemstat"/>
+					<stat_bar label="Bound Mem" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="Network" name="network">
+					<stat_bar label="Packets In" name="packetsinstat"/>
+					<stat_bar label="Packets Out" name="packetsoutstat"/>
+					<stat_bar label="Objects" name="objectkbitstat"/>
+					<stat_bar label="Texture" name="texturekbitstat"/>
+					<stat_bar label="Asset" name="assetkbitstat"/>
+					<stat_bar label="Layers" name="layerskbitstat"/>
+					<stat_bar label="Actual In" name="actualinkbitstat"/>
+					<stat_bar label="Actual Out" name="actualoutkbitstat"/>
+					<stat_bar label="VFS Pending Ops" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="Simulator" name="sim">
+				<stat_bar label="Time Dilation" name="simtimedilation"/>
+				<stat_bar label="Sim FPS" name="simfps"/>
+				<stat_bar label="Physics FPS" name="simphysicsfps"/>
+				<stat_view label="Physics Details" name="physicsdetail">
+					<stat_bar label="Pinned Objects" name="physicspinnedtasks"/>
+					<stat_bar label="Low LOD Objects" name="physicslodtasks"/>
+					<stat_bar label="Memory Allocated" name="physicsmemoryallocated"/>
+					<stat_bar label="Agent Updates/Sec" name="simagentups"/>
+					<stat_bar label="Main Agents" name="simmainagents"/>
+					<stat_bar label="Child Agents" name="simchildagents"/>
+					<stat_bar label="Objets" name="simobjects"/>
+					<stat_bar label="Active Objects" name="simactiveobjects"/>
+					<stat_bar label="Active Scripts" name="simactivescripts"/>
+					<stat_bar label="Script Events" name="simscripteps"/>
+					<stat_bar label="Packets In" name="siminpps"/>
+					<stat_bar label="Packets Out" name="simoutpps"/>
+					<stat_bar label="Pending Downloads" name="simpendingdownloads"/>
+					<stat_bar label="Pending Uploads" name="simpendinguploads"/>
+					<stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="Time (ms)" name="simperf">
+					<stat_bar label="Total Frame Time" name="simframemsec"/>
+					<stat_bar label="Net Time" name="simnetmsec"/>
+					<stat_bar label="Physics Time" name="simsimphysicsmsec"/>
+					<stat_bar label="Simulation Time" name="simsimothermsec"/>
+					<stat_bar label="Agent Time" name="simagentmsec"/>
+					<stat_bar label="Images Time" name="simimagesmsec"/>
+					<stat_bar label="Script Time" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml
index e6201785bded6fe4f86db5d53d9f55a5805a246f..c89eea517e666efba55ad0a7e8b1c4f6b4bc7943 100644
--- a/indra/newview/skins/default/xui/fr/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Téléhub" min_height="310" height="310" >
+<floater name="telehub" title="TÉLÉHUB" min_height="310" height="310" >
 	<text name="status_text_connected">
 		Téléhub connecté à l&apos;objet [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
index fa8b65d8a5af6d0c178afc75bcbf7582c12ba4d2..ff84025a44123ca93633fd07730e7a02662b98ed 100644
--- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Texture">
+<floater name="texture picker" title="TEXTURE">
 	<string name="choose_picture">
 		Cliquez pour sélectionner une image
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index e8db326e1561641a9d5030078af9ab74c47f7e4a..5ded9a1de4e2509266d6021c98c5f445dd848cbd 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,513 +1,479 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construire">
-	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
-	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
-	<button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
-	<button label="" label_selected="" name="button create" tool_tip="Créer"/>
-	<button label="" label_selected="" name="button land" tool_tip="Terrain"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="Zoom" name="radio zoom"/>
-		<radio_item label="Orbite (Ctrl)" name="radio orbit"/>
-		<radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="Déplacer" name="radio move"/>
-		<radio_item label="Orbite (Ctrl)" name="radio lift"/>
-		<radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="Positionner" name="radio position"/>
-		<radio_item label="Pivoter (Ctrl)" name="radio rotate"/>
-		<radio_item label="Étirer (Ctrl-Maj)" name="radio stretch"/>
-		<radio_item label="Sélectionner une face" name="radio select face"/>
-	</radio_group>
-	<check_box label="Modifier les parties liées" name="checkbox edit linked parts"/>
-	<text name="text ruler mode">
-		Axe :
-	</text>
-	<combo_box name="combobox grid mode">
-		<combo_box.item name="World" label="Monde"/>
-		<combo_box.item name="Local" label="Local"/>
-		<combo_box.item name="Reference" label="Référence"/>
-	</combo_box>
-	<check_box label="Étirer les deux côtés" name="checkbox uniform"/>
-	<check_box label="Étirer les textures" name="checkbox stretch textures"/>
-	<check_box label="Utiliser la grille" name="checkbox snap to grid"/>
-	<button label="Options..." label_selected="Options..." name="Options..."/>
-	<text name="text status">
-		Glissez pour déplacer, Maj-glissez pour copier.
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="Cône"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="Tube"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/>
-	<check_box label="Maintenir l&apos;outil sélectionné" name="checkbox sticky"/>
-	<check_box label="Copier la sélection" name="checkbox copy selection"/>
-	<check_box label="Centrer" name="checkbox copy centers"/>
-	<check_box label="Pivoter" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="Sélectionner le terrain" name="radio select land"/>
-		<radio_item label="Aplatir" name="radio flatten"/>
-		<radio_item label="Élever" name="radio raise"/>
-		<radio_item label="Abaisser" name="radio lower"/>
-		<radio_item label="Lisser" name="radio smooth"/>
-		<radio_item label="Bosseler" name="radio noise"/>
-		<radio_item label="Annuler modification" name="radio revert"/>
-	</radio_group>
-	<button label="Appliquer" label_selected="Appliquer" name="button apply to selection" tool_tip="Modifier le terrain sélectionné" left="176"/>
-	<text name="Bulldozer:">
-		Bulldozer :
-	</text>
-	<text name="Dozer Size:">
-		Taille
-	</text>
-	<text name="Strength:">
-		Force
-	</text>
-	<text name="obj_count">
-		Objets sélectionnés : [COUNT]
-	</text>
-	<text name="prim_count">
-		Prims : [COUNT]
-	</text>
-	<tab_container name="Object Info Tabs">
-		<panel label="Général" name="General">
-			<text name="Name:">
-				Nom :
-			</text>
-			<text name="Description:">
-				Description :
-			</text>
-			<text name="Creator:">
-				Créateur :
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button creator profile"/>
-			<text name="Owner:">
-				Propriétaire :
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="Profil..." label_selected="Profil..." name="button owner profile"/>
-			<text name="Group:">
-				Groupe :
-			</text>
-			<text name="Group Name Proxy">
-				Les Lindens
-			</text>
-			<button label="Définir..." label_selected="Définir..." name="button set group"/>
-			<text name="Permissions:">
-				Droits :
-			</text>
-
-			<check_box label="Partager avec le groupe" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
-			<string name="text deed continued">
-				Transférer...
-			</string>
-			<string name="text deed">
-				Transférer
-			</string>
-			<button label="Céder..." label_selected="Céder..." name="button deed" tool_tip="Les objets partagés par un groupe peuvent être cédés par un officier."/>
-			<check_box label="Autoriser tout le monde à déplacer" name="checkbox allow everyone move"/>
-			<check_box label="Autoriser tout le monde à copier" name="checkbox allow everyone copy"/>
-			<check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l&apos;objet dans les résultats de recherche"/>
-			<check_box label="À vendre" name="checkbox for sale"/>
-			<text name="Cost">
-				Prix : L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="Copie" name="Copy"/>
-				<combo_box.item label="Contenus" name="Contents"/>
-				<combo_box.item label="Original" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				Action du clic-gauche :
-			</text>
-			<combo_box name="clickaction" width="178">
-				<combo_box.item name="Touch/grab(default)" label="Toucher/attraper (défaut)"/>
-				<combo_box.item name="Sitonobject" label="S&apos;asseoir sur l&apos;objet"/>
-				<combo_box.item name="Buyobject" label="Acheter l&apos;objet"/>
-				<combo_box.item name="Payobject" label="Payer l&apos;objet"/>
-				<combo_box.item name="Open" label="Ouvrir"/>
-				<combo_box.item name="Play" label="Jouer le média de la parcelle"/>
-				<combo_box.item name="Opemmedia" label="Ouvrir le média de la parcelle"/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				Vous pouvez modifier cet objet
-			</text>
-			<text name="B:">
-				B :
-			</text>
-			<text name="O:">
-				O :
-			</text>
-			<text name="G:">
-				G :
-			</text>
-			<text name="E:">
-				E :
-			</text>
-			<text name="N:">
-				N :
-			</text>
-			<text name="F:">
-				F :
-			</text>
-			<text name="Next owner can:">
-				Le prochain propriétaire pourra :
-			</text>
-			<check_box label="Modifier" name="checkbox next owner can modify"/>
-			<check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				Vous pouvez modifier cet objet
-			</string>
-			<string name="text modify info 2">
-				Vous pouvez modifier ces objets
-			</string>
-			<string name="text modify info 3">
-				Vous ne pouvez pas modifier cet objet
-			</string>
-			<string name="text modify info 4">
-				Vous ne pouvez pas modifier ces objets
-			</string>
-			<string name="text modify warning">
-				Sélectionnez l&apos;objet en entier
-			</string>
-			<string name="Cost Default">
-				Prix : L$
-			</string>
-			<string name="Cost Total">
-				Prix total : L$
-			</string>
-			<string name="Cost Per Unit">
-				Prix par : L$
-			</string>
-			<string name="Cost Mixed">
-				Prix mixte
-			</string>
-			<string name="Sale Mixed">
-				Vente mixte
-			</string>
-		</panel>
-		<panel label="Objet" name="Object">
-			<text name="select_single">
-				Sélectionnez un prim pour modifier les paramètres.
-			</text>
-			<text name="edit_object">
-				Modifier les paramètres de l&apos;objet :
-			</text>
-			<check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l&apos;objet d&apos;être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
-			<check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l&apos;objet d&apos;être poussé et affecté par la gravité"/>
-			<check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L&apos;objet est supprimé 1 mn après sa création."/>
-			<check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l&apos;objet de ne pas entrer en collision avec d&apos;autres objets ou avatars."/>
-			<text name="label position">
-				Position (mètres)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				Taille (mètres)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				Rotation (degrés)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				Matériau
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="Pierre"/>
-				<combo_box.item name="Metal" label="Métal"/>
-				<combo_box.item name="Glass" label="Verre"/>
-				<combo_box.item name="Wood" label="Bois"/>
-				<combo_box.item name="Flesh" label="Chair"/>
-				<combo_box.item name="Plastic" label="Plastique"/>
-				<combo_box.item name="Rubber" label="Caoutchouc"/>
-			</combo_box>
-			<text name="label basetype">
-				Type de construction
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="Boîte"/>
-				<combo_box.item name="Cylinder" label="Cylindre"/>
-				<combo_box.item name="Prism" label="Prisme"/>
-				<combo_box.item name="Sphere" label="Sphère"/>
-				<combo_box.item name="Torus" label="Tore"/>
-				<combo_box.item name="Tube" label="Tube"/>
-				<combo_box.item name="Ring" label="Anneau"/>
-				<combo_box.item name="Sculpted" label="Sculptie"/>
-			</combo_box>
-			<text name="text cut">
-				Début et fin de découpe du tracé
-			</text>
-			<spinner label="D" name="cut begin"/>
-			<spinner label="F" name="cut end"/>
-			<text name="text hollow">
-				Creux
-			</text>
-			<text name="text skew">
-				Biais
-			</text>
-			<text name="Hollow Shape">
-				Forme du creux
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="Défaut"/>
-				<combo_box.item name="Circle" label="Cercle"/>
-				<combo_box.item name="Square" label="Carré"/>
-				<combo_box.item name="Triangle" label="Triangle"/>
-			</combo_box>
-			<text name="text twist">
-				Début et fin de vrille
-			</text>
-			<spinner label="D" name="Twist Begin"/>
-			<spinner label="F" name="Twist End"/>
-			<text name="scale_taper">
-				Biseautage
-			</text>
-			<text name="scale_hole">
-				Taille du trou
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				Inclinaison
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				Début et fin de découpe du profilé
-			</text>
-			<text name="advanced_dimple">
-				Début et fin du creux
-			</text>
-			<text name="advanced_slice">
-				Début et fin de la tranche
-			</text>
-			<spinner label="D" name="Path Limit Begin"/>
-			<spinner label="F" name="Path Limit End"/>
-			<text name="text taper2">
-				Biseautage
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				Rayon
-			</text>
-			<text name="text revolutions">
-				Révolutions
-			</text>
-			<texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
-			<check_box label="Mirroir" name="sculpt mirror control" tool_tip="Retourne le sculptie le long de l&apos;axe des X."/>
-			<check_box label="A l&apos;envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d&apos;un sculptie et le fait apparaître à l&apos;envers."/>
-			<text name="label sculpt type">
-				Type de raccord
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(aucun)"/>
-				<combo_box.item name="Sphere" label="Sphère"/>
-				<combo_box.item name="Torus" label="Tore"/>
-				<combo_box.item name="Plane" label="Plan"/>
-				<combo_box.item name="Cylinder" label="Cylindre"/>
-			</combo_box>
-		</panel>
-		<panel label="Attributs" name="Features">
-			<text name="select_single">
-				Sélectionnez un prim pour modifier les attributs.
-			</text>
-			<text name="edit_object">
-				Modifier les attributs de l&apos;objet :
-			</text>
-			<check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l&apos;objet de la souplesse sur l&apos;axe des Z (côté client uniquement)."/>
-			<spinner label="Souplesse" name="FlexNumSections"/>
-			<spinner label="Gravité" name="FlexGravity"/>
-			<spinner label="Élasticité" name="FlexFriction"/>
-			<spinner label="Vent" name="FlexWind"/>
-			<spinner label="Tension" name="FlexTension"/>
-			<spinner label="Force X" name="FlexForceX"/>
-			<spinner label="Force Y" name="FlexForceY"/>
-			<spinner label="Force Z" name="FlexForceZ"/>
-			<check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d&apos;émettre de la lumière"/>
-			<text name="label color">
-				Couleur
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
-			<spinner label="Intensité" name="Light Intensity"/>
-			<spinner label="Portée" name="Light Radius"/>
-			<spinner label="Atténuation" name="Light Falloff"/>
-		</panel>
-		<panel label="Texture" name="Texture">
-			<texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/>
-			<color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
-			<text name="color trans" width="88">
-				Transparence
-			</text>
-			<text name="glow label">
-				Rayonnement
-			</text>
-			<check_box label="Lumineux" name="checkbox fullbright"/>
-			<text name="tex gen">
-				Application
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="Défaut"/>
-				<combo_box.item name="Planar" label="Planar"/>
-			</combo_box>
-			<text name="label shininess">
-				Brillance
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="Aucune"/>
-				<combo_box.item name="Low" label="Faible"/>
-				<combo_box.item name="Medium" label="Moyenne"/>
-				<combo_box.item name="High" label="Élevée"/>
-			</combo_box>
-			<text name="label bumpiness">
-				Relief
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="Aucun"/>
-				<combo_box.item name="Brightness" label="Luminosité"/>
-				<combo_box.item name="Darkness" label="Obscurité"/>
-				<combo_box.item name="woodgrain" label="Aggloméré"/>
-				<combo_box.item name="bark" label="Écorce"/>
-				<combo_box.item name="bricks" label="Briques"/>
-				<combo_box.item name="checker" label="Damier"/>
-				<combo_box.item name="concrete" label="Béton"/>
-				<combo_box.item name="crustytile" label="Carrelage"/>
-				<combo_box.item name="cutstone" label="Pierre de taille"/>
-				<combo_box.item name="discs" label="Disques"/>
-				<combo_box.item name="gravel" label="Gravier"/>
-				<combo_box.item name="petridish" label="Boîte de Petri"/>
-				<combo_box.item name="siding" label="Lattes"/>
-				<combo_box.item name="stonetile" label="Carreaux"/>
-				<combo_box.item name="stucco" label="Stuc"/>
-				<combo_box.item name="suction" label="Ventouses"/>
-				<combo_box.item name="weave" label="Tissage"/>
-			</combo_box>
-			<text name="tex scale">
-				Répétitions par face
-			</text>
-			<spinner label="Horizontal (U)" name="TexScaleU"/>
-			<check_box label="Inverser" name="checkbox flip s"/>
-			<spinner label="Vertical (V)" name="TexScaleV"/>
-			<check_box label="Inverser" name="checkbox flip t"/>
-			<text name="tex rotate">
-				Rotation (degrés)
-			</text>
-			<spinner left="122" name="TexRot" width="58"/>
-			<string name="string repeats per meter">
-				Répétitions au mètre
-			</string>
-			<string name="string repeats per face">
-				Répétitions par face
-			</string>
-			<text name="rpt" width="160">
-				Répétitions au mètre
-			</text>
-			<spinner left="122" name="rptctrl" width="58"/>
-			<button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
-			<text name="tex offset">
-				Décalage
-			</text>
-			<spinner label="Horizontal (U)" name="TexOffsetU"/>
-			<spinner label="Vertical (V)" name="TexOffsetV"/>
-			<text name="textbox autofix">
-				Ajuster la texture du média
-(chargement préalable)
-			</text>
-			<button label="Ajuster" label_selected="Ajuster" left="150" name="button align"/>
-		</panel>
-		<panel label="Contenu" name="Contents">
-			<button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
-			<button label="Droits" name="button permissions"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			Informations sur la parcelle
-		</text>
-		<text name="label_area_price">
-			Prix : [PRICE] L$ pour [AREA] m².
-		</text>
-		<text name="label_area">
-			Surface : [AREA] m²
-		</text>
-		<button label="À propos du terrain..." label_selected="À propos du terrain..." name="button about land" width="142"/>
-		<check_box label="Afficher les propriétaires" name="checkbox show owners" tool_tip="Colorie les parcelles en fonction de leur propriétaire : &#10;&#10;Vert = votre terrain &#10;Turquoise = le terrain de votre groupe &#10;Rouge = appartenant à d&apos;autres &#10;Jaune = en vente &#10;Mauve = aux enchères &#10;Gris = public"/>
-		<button label="?" label_selected="?" name="button show owners help" left_delta="154"/>
-		<text name="label_parcel_modify">
-			Modifier la parcelle
-		</text>
-		<button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/>
-		<button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/>
-		<text name="label_parcel_trans">
-			Transactions
-		</text>
-		<button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/>
-		<button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/>
-	</panel>
-	<floater.string name="status_rotate">
-		Pour faire tourner l&apos;objet, faîtes glisser les bandes de couleur.
-	</floater.string>
-	<floater.string name="status_scale">
-		Pour étirer le côté sélectionné, cliquez et faites glisser.
-	</floater.string>
-	<floater.string name="status_move">
-		Glissez pour déplacer, Maj-glissez pour copier.
-	</floater.string>
-	<floater.string name="status_modifyland">
-		Cliquez et maintenez pour modifier le terrain.
-	</floater.string>
-	<floater.string name="status_camera">
-		Cliquez et faites glisser pour changer l&apos;affichage.
-	</floater.string>
-	<floater.string name="status_grab">
-		Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
-	</floater.string>
-	<floater.string name="status_place">
-		Cliquez dans le monde pour construire.
-	</floater.string>
-	<floater.string name="status_selectland">
-		Cliquez et faites glisser pour sélectionner le terrain.
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		Écran
-	</floater.string>
-	<floater.string name="grid_local_text">
-		Local
-	</floater.string>
-	<floater.string name="grid_world_text">
-		Monde
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		Référence
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		Pièce-jointe
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="Outils de construction" title="">
+	<floater.string name="status_rotate">
+		Pour faire tourner l&apos;objet, faîtes glisser les bandes de couleur.
+	</floater.string>
+	<floater.string name="status_scale">
+		Pour étirer le côté sélectionné, cliquez et faites glisser.
+	</floater.string>
+	<floater.string name="status_move">
+		Glissez pour déplacer, Maj-glissez pour copier.
+	</floater.string>
+	<floater.string name="status_modifyland">
+		Cliquez et maintenez pour modifier le terrain.
+	</floater.string>
+	<floater.string name="status_camera">
+		Cliquez et faîtes glisser pour bouger la caméra
+	</floater.string>
+	<floater.string name="status_grab">
+		Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
+	</floater.string>
+	<floater.string name="status_place">
+		Cliquez dans le monde pour construire.
+	</floater.string>
+	<floater.string name="status_selectland">
+		Cliquez et faites glisser pour sélectionner le terrain.
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		Écran
+	</floater.string>
+	<floater.string name="grid_local_text">
+		Local
+	</floater.string>
+	<floater.string name="grid_world_text">
+		Monde
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		Référence
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		Pièce-jointe
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
+	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
+	<button label="" label_selected="" name="button edit" tool_tip="Modifier"/>
+	<button label="" label_selected="" name="button create" tool_tip="Créer"/>
+	<button label="" label_selected="" name="button land" tool_tip="Terrain"/>
+	<text name="text status">
+		Glissez pour déplacer, Maj-glissez pour copier.
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="Zoom" name="radio zoom"/>
+		<radio_item label="Orbite (Ctrl)" name="radio orbit"/>
+		<radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="Déplacer" name="radio move"/>
+		<radio_item label="Orbite (Ctrl)" name="radio lift"/>
+		<radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="Bouger" name="radio position"/>
+		<radio_item label="Pivoter (Ctrl)" name="radio rotate"/>
+		<radio_item label="Étirer (Ctrl-Maj)" name="radio stretch"/>
+		<radio_item label="Sélectionner une face" name="radio select face"/>
+	</radio_group>
+	<check_box label="Modification liée" name="checkbox edit linked parts"/>
+	<check_box label="Étirer les deux côtés" name="checkbox uniform"/>
+	<check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="Fixer sur la grille" name="checkbox snap to grid"/>
+	<combo_box name="combobox grid mode">
+		<combo_box.item label="Axe du monde" name="World"/>
+		<combo_box.item label="Axe local" name="Local"/>
+		<combo_box.item label="Axe de référence" name="Reference"/>
+	</combo_box>
+	<button label="Options..." label_selected="Options..." name="Options..." tool_tip="Définir les options de la grille"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tétraèdre"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="Cylindre"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Demi-cylindre"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="Cône"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="Demi-cône"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="Sphère"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="Demi-sphère"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="Tore"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="Tube"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="Anneau"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="Arbre"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="Herbe"/>
+	<check_box label="Maintenir l&apos;outil sélectionné" name="checkbox sticky"/>
+	<check_box label="Copier la sélection" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="Centrer" name="checkbox copy centers"/>
+	<check_box label="Pivoter" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="Sélectionner le terrain" name="radio select land"/>
+		<radio_item label="Aplatir" name="radio flatten"/>
+		<radio_item label="Élever" name="radio raise"/>
+		<radio_item label="Abaisser" name="radio lower"/>
+		<radio_item label="Lisser" name="radio smooth"/>
+		<radio_item label="Bosseler" name="radio noise"/>
+		<radio_item label="Annuler modification" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		Bulldozer :
+	</text>
+	<text name="Dozer Size:">
+		Taille
+	</text>
+	<text name="Strength:">
+		Force
+	</text>
+	<button label="Appliquer" label_selected="Appliquer" left="176" name="button apply to selection" tool_tip="Modifier le terrain sélectionné"/>
+	<text name="obj_count">
+		Objets : [COUNT]
+	</text>
+	<text name="prim_count">
+		Prims : [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs">
+		<panel label="Général" name="General">
+			<panel.string name="text deed continued">
+				Céder
+			</panel.string>
+			<panel.string name="text deed">
+				Transférer
+			</panel.string>
+			<panel.string name="text modify info 1">
+				Vous pouvez modifier cet objet
+			</panel.string>
+			<panel.string name="text modify info 2">
+				Vous pouvez modifier ces objets
+			</panel.string>
+			<panel.string name="text modify info 3">
+				Vous ne pouvez pas modifier cet objet
+			</panel.string>
+			<panel.string name="text modify info 4">
+				Vous ne pouvez pas modifier ces objets
+			</panel.string>
+			<panel.string name="text modify warning">
+				Sélectionnez l&apos;objet en entier
+			</panel.string>
+			<panel.string name="Cost Default">
+				Prix : L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				Prix total : L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				Prix par : L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				Prix mixte
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				Vente mixte
+			</panel.string>
+			<text name="Name:">
+				Nom :
+			</text>
+			<text name="Description:">
+				Description :
+			</text>
+			<text name="Creator:">
+				Créateur :
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				Propriétaire :
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				Groupe :
+			</text>
+			<button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les permissions de cet objet"/>
+			<name_box initial_value="Chargement…" name="Group Name Proxy"/>
+			<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les permissions au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
+			<check_box label="Partager" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
+			<text name="label click action">
+				Cliquer pour :
+			</text>
+			<combo_box name="clickaction" width="178">
+				<combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/>
+				<combo_box.item label="S&apos;asseoir sur l&apos;objet" name="Sitonobject"/>
+				<combo_box.item label="Acheter l&apos;objet" name="Buyobject"/>
+				<combo_box.item label="Payer l&apos;objet" name="Payobject"/>
+				<combo_box.item label="Ouvrir" name="Open"/>
+			</combo_box>
+			<check_box label="À vendre :" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="Copie" name="Copy"/>
+				<combo_box.item label="Contenus" name="Contents"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Prix : L$" name="Edit Cost"/>
+			<check_box label="Afficher dans la recherche" name="search_check" tool_tip="Afficher l&apos;objet dans les résultats de recherche"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					Vous pouvez modifier cet objet
+				</text>
+				<text name="Anyone can:">
+					N&apos;importe qui :
+				</text>
+				<check_box label="Copier" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					Le prochain propriétaire :
+				</text>
+				<check_box label="Modifier" name="checkbox next owner can modify"/>
+				<check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/>
+				<check_box label="Transférer" name="checkbox next owner can transfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/>
+				<text name="B:">
+					B :
+				</text>
+				<text name="O:">
+					O :
+				</text>
+				<text name="G:">
+					G :
+				</text>
+				<text name="E:">
+					E :
+				</text>
+				<text name="N:">
+					N :
+				</text>
+				<text name="F:">
+					F :
+				</text>
+			</panel>
+		</panel>
+		<panel label="Objet" name="Object">
+			<check_box label="Verrouillé" name="checkbox locked" tool_tip="Empêche l&apos;objet d&apos;être déplacé ou supprimé. Utile pendant la construction pour éviter les modifications involontaires."/>
+			<check_box label="Physique" name="Physical Checkbox Ctrl" tool_tip="Permet à l&apos;objet d&apos;être poussé et affecté par la gravité"/>
+			<check_box label="Temporaire" name="Temporary Checkbox Ctrl" tool_tip="L&apos;objet est supprimé 1 mn après sa création."/>
+			<check_box label="Fantôme" name="Phantom Checkbox Ctrl" tool_tip="Permet à l&apos;objet de ne pas entrer en collision avec d&apos;autres objets ou avatars."/>
+			<text name="label position">
+				Position (mètres)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				Taille (mètres)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				Rotation (degrés)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="Boîte" name="Box"/>
+				<combo_box.item label="Cylindre" name="Cylinder"/>
+				<combo_box.item label="Prisme" name="Prism"/>
+				<combo_box.item label="Sphère" name="Sphere"/>
+				<combo_box.item label="Tore" name="Torus"/>
+				<combo_box.item label="Tube" name="Tube"/>
+				<combo_box.item label="Anneau" name="Ring"/>
+				<combo_box.item label="Sculptie" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="Pierre" name="Stone"/>
+				<combo_box.item label="Métal" name="Metal"/>
+				<combo_box.item label="Verre" name="Glass"/>
+				<combo_box.item label="Bois" name="Wood"/>
+				<combo_box.item label="Chair" name="Flesh"/>
+				<combo_box.item label="Plastique" name="Plastic"/>
+				<combo_box.item label="Caoutchouc" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				Découpe du tracé (début/fin)
+			</text>
+			<spinner label="D" name="cut begin"/>
+			<spinner label="F" name="cut end"/>
+			<text name="text hollow">
+				Creux
+			</text>
+			<text name="text skew">
+				Biais
+			</text>
+			<text name="Hollow Shape">
+				Forme du creux
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="Défaut" name="Default"/>
+				<combo_box.item label="Cercle" name="Circle"/>
+				<combo_box.item label="Carré" name="Square"/>
+				<combo_box.item label="Triangle" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				Vrille (début/fin)
+			</text>
+			<spinner label="D" name="Twist Begin"/>
+			<spinner label="F" name="Twist End"/>
+			<text name="scale_taper">
+				Biseautage
+			</text>
+			<text name="scale_hole">
+				Taille du trou
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				Inclinaison
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				Découpe du profilé (début/fin)
+			</text>
+			<text name="advanced_dimple">
+				Creux (début/fin)
+			</text>
+			<text name="advanced_slice">
+				Tranche (début/fin)
+			</text>
+			<spinner label="D" name="Path Limit Begin"/>
+			<spinner label="F" name="Path Limit End"/>
+			<text name="text taper2">
+				Biseautage
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				Rayon
+			</text>
+			<text name="text revolutions">
+				Révolutions
+			</text>
+			<texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/>
+			<check_box label="Mirroir" name="sculpt mirror control" tool_tip="Retourne le sculptie le long de l&apos;axe des X."/>
+			<check_box label="A l&apos;envers" name="sculpt invert control" tool_tip="Inverse les valeurs normales d&apos;un sculptie et le fait apparaître à l&apos;envers."/>
+			<text name="label sculpt type">
+				Type de raccord
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(aucun)" name="None"/>
+				<combo_box.item label="Sphère" name="Sphere"/>
+				<combo_box.item label="Tore" name="Torus"/>
+				<combo_box.item label="Plan" name="Plane"/>
+				<combo_box.item label="Cylindre" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="Attributs" name="Features">
+			<text name="select_single">
+				Sélectionnez un prim pour modifier les attributs.
+			</text>
+			<text name="edit_object">
+				Modifier les attributs de l&apos;objet :
+			</text>
+			<check_box label="Flexibilité" name="Flexible1D Checkbox Ctrl" tool_tip="Donne à l&apos;objet de la souplesse sur l&apos;axe des Z (côté client uniquement)."/>
+			<spinner label="Souplesse" name="FlexNumSections"/>
+			<spinner label="Gravité" name="FlexGravity"/>
+			<spinner label="Élasticité" name="FlexFriction"/>
+			<spinner label="Vent" name="FlexWind"/>
+			<spinner label="Tension" name="FlexTension"/>
+			<spinner label="Force X" name="FlexForceX"/>
+			<spinner label="Force Y" name="FlexForceY"/>
+			<spinner label="Force Z" name="FlexForceZ"/>
+			<check_box label="Lumière" name="Light Checkbox Ctrl" tool_tip="Permet aux objets d&apos;émettre de la lumière"/>
+			<color_swatch label="" name="colorswatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
+			<spinner label="Intensité" name="Light Intensity"/>
+			<spinner label="Portée" name="Light Radius"/>
+			<spinner label="Atténuation" name="Light Falloff"/>
+		</panel>
+		<panel label="Texture" name="Texture">
+			<panel.string name="string repeats per meter">
+				Répétitions au mètre
+			</panel.string>
+			<panel.string name="string repeats per face">
+				Répétitions par face
+			</panel.string>
+			<texture_picker label="Texture" name="texture control" tool_tip="Cliquez pour sélectionner une image"/>
+			<color_swatch label="Couleur" name="colorswatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
+			<text name="color trans" width="88">
+				Transparence
+			</text>
+			<text name="glow label">
+				Rayonnement
+			</text>
+			<check_box label="Lumineux" name="checkbox fullbright"/>
+			<text name="tex gen">
+				Application
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="Défaut" name="Default"/>
+				<combo_box.item label="Planar" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				Brillance
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="Aucune" name="None"/>
+				<combo_box.item label="Faible" name="Low"/>
+				<combo_box.item label="Moyenne" name="Medium"/>
+				<combo_box.item label="Élevée" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				Relief
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="Aucun" name="None"/>
+				<combo_box.item label="Luminosité" name="Brightness"/>
+				<combo_box.item label="Obscurité" name="Darkness"/>
+				<combo_box.item label="Aggloméré" name="woodgrain"/>
+				<combo_box.item label="Écorce" name="bark"/>
+				<combo_box.item label="Briques" name="bricks"/>
+				<combo_box.item label="Damier" name="checker"/>
+				<combo_box.item label="Béton" name="concrete"/>
+				<combo_box.item label="Carrelage" name="crustytile"/>
+				<combo_box.item label="Pierre de taille" name="cutstone"/>
+				<combo_box.item label="Disques" name="discs"/>
+				<combo_box.item label="Gravier" name="gravel"/>
+				<combo_box.item label="Boîte de Petri" name="petridish"/>
+				<combo_box.item label="Lattes" name="siding"/>
+				<combo_box.item label="Carreaux" name="stonetile"/>
+				<combo_box.item label="Stuc" name="stucco"/>
+				<combo_box.item label="Ventouses" name="suction"/>
+				<combo_box.item label="Tissage" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				Répétitions par face
+			</text>
+			<spinner label="Horizontal (U)" name="TexScaleU"/>
+			<check_box label="Inverser" name="checkbox flip s"/>
+			<spinner label="Vertical (V)" name="TexScaleV"/>
+			<check_box label="Inverser" name="checkbox flip t"/>
+			<spinner label="RotationËš" left="122" name="TexRot" width="58"/>
+			<spinner label="Repeats / Meter" left="122" name="rptctrl" width="58"/>
+			<button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/>
+			<text name="tex offset">
+				Décalage de la texture
+			</text>
+			<spinner label="Horizontal (U)" name="TexOffsetU"/>
+			<spinner label="Vertical (V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="Contenu" name="Contents">
+			<button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
+			<button label="Droits" name="button permissions"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			Informations sur la parcelle
+		</text>
+		<text name="label_area_price">
+			Prix : [PRICE] L$ pour [AREA] m².
+		</text>
+		<text name="label_area">
+			Surface : [AREA] m²
+		</text>
+		<button label="À propos du terrain..." label_selected="À propos du terrain..." name="button about land" width="142"/>
+		<check_box label="Afficher les propriétaires" name="checkbox show owners" tool_tip="Colorie les parcelles en fonction de leur propriétaire : 
+
+Vert = votre terrain 
+Turquoise = le terrain de votre groupe 
+Rouge = appartenant à d&apos;autres 
+Jaune = en vente 
+Mauve = aux enchères 
+Gris = public"/>
+		<text name="label_parcel_modify">
+			Modifier la parcelle
+		</text>
+		<button label="Diviser" label_selected="Diviser" name="button subdivide land" width="142"/>
+		<button label="Fusionner" label_selected="Fusionner" name="button join land" width="142"/>
+		<text name="label_parcel_trans">
+			Transactions
+		</text>
+		<button label="Acheter le terrain" label_selected="Acheter le terrain" name="button buy land" width="142"/>
+		<button label="Abandonner le terrain" label_selected="Abandonner le terrain" name="button abandon land" width="142"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
index 69a3d0cd18ad2d469baeef7d833c732ed9ae5957..479559367f8c7886f278f940d2ac91086b4c59a4 100644
--- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="en cours de chargement...">
+<floater name="top_objects" title="EN COURS DE CHARGEMENT...">
 	<text name="title_text">
 		Chargement...
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
index 9b77c2450d9033941304578513272e552c2107f8..3de5fee0ced45d00e8ec73e7e952ef137560deae 100644
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ b/indra/newview/skins/default/xui/fr/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Éditeur d&apos;eau avancé">
+<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCé">
 	<text name="KeyFramePresetsText">
 		Préréglages eau :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
index d1a62dc6bc90f10dd83aea667f734b093855a355..4ff55d87b680b7e3015545371e325367571ccc5d 100644
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Éditeur de ciel avancé" width="706">
+<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706">
 	<text name="KeyFramePresetsText">
 		Préréglages ciel :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml
index ec2db5f163fe18372f6b2bd85eb2a95d8a37b8ba..1f76202dee48cc5e8d3c035e4b24c1c8c1bdb0a4 100644
--- a/indra/newview/skins/default/xui/fr/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Carte du monde">
+<floater name="worldmap" title="CARTE DU MONDE">
 	<tab_container name="maptab" width="955">
 		<panel label="Objets" name="objects_mapview" width="953"/>
 		<panel label="Terrain" name="terrain_mapview" width="953"/>
diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..993f2bd5e432aebc098f0fe742ee3a4a9d9b5dab
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE], [PAYMENTINFO]
+Profil : [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
+	<button label="Devenir amis" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba2559a9a114648aa52f55ddf52331d0e306d6a6
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Voir le profil..." name="Show Profile"/>
+	<menu_item_call label="Envoyer IM..." name="Send IM"/>
+	<menu_item_call label="Devenir amis..." name="Add Friend"/>
+	<menu_item_call label="Supprimer cet ami..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_favorites.xml b/indra/newview/skins/default/xui/fr/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..663df9449ace5880794298f63fd26bad4097443d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Téléporter" name="Teleport To Landmark"/>
+	<menu_item_call label="Voir/Modifier le repère" name="Landmark Open"/>
+	<menu_item_call label="Copier la SLurl" name="Copy slurl"/>
+	<menu_item_call label="Voir sur la carte" name="Show On Map"/>
+	<menu_item_call label="Copier" name="Landmark Copy"/>
+	<menu_item_call label="Coller" name="Landmark Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4ad89751f5f02999ac02e7167a74ae5bea720fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Rejoignez des groupes..." name="item_join"/>
+	<menu_item_call label="Nouveau groupe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index ce347afe899984c96f560399d64a6bebc55c8f4f..c3c931ad5c3f29dbfe56f4ac8f14ccfcaf6b2a62 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="Acheter" name="Task Buy"/>
-	<menu_item_call label="Ouvrir" name="Task Open"/>
-	<menu_item_call label="Jouer" name="Task Play"/>
-	<menu_item_call label="Propriétés" name="Task Properties"/>
-	<menu_item_call label="Renommer" name="Task Rename"/>
-	<menu_item_call label="Supprimer" name="Task Remove"/>
-	<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
-	<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
-	<menu_item_call label="Nouveau dossier" name="New Folder"/>
-	<menu_item_call label="Nouveau script" name="New Script"/>
-	<menu_item_call label="Nouvelle note" name="New Note"/>
-	<menu_item_call label="Nouveau geste" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
-		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
-		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
-		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
-		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
-		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
-		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
-		<menu_item_call label="Nouveau tricot" name="New Undershirt"/>
-		<menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
-		<menu_item_call label="Nouvelle peau" name="New Skin"/>
-		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
-		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="Téléporter" name="Landmark Open"/>
-	<menu_item_call label="Ouvrir" name="Animation Open"/>
-	<menu_item_call label="Ouvrir" name="Sound Open"/>
-	<menu_item_call label="Purger l&apos;objet" name="Purge Item"/>
-	<menu_item_call label="Restaurer l&apos;objet" name="Restore Item"/>
-	<menu_item_call label="Ouvrir" name="Open"/>
-	<menu_item_call label="Propriétés" name="Properties"/>
-	<menu_item_call label="Renommer" name="Rename"/>
-	<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
-	<menu_item_call label="Copier" name="Copy"/>
-	<menu_item_call label="Coller" name="Paste"/>
-	<menu_item_call label="Supprimer" name="Delete"/>
-	<menu_item_call label="Enlever les objets" name="Take Off Items"/>
-	<menu_item_call label="Ajouter à l&apos;ensemble" name="Add To Outfit"/>
-	<menu_item_call label="Remplacer l&apos;ensemble" name="Replace Outfit"/>
-	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
-	<menu_item_call label="Jouer" name="Sound Play"/>
-	<menu_item_call label="Au sujet du repère" name="Teleport To Landmark"/>
-	<menu_item_call label="Jouer dans le Monde" name="Animation Play"/>
-	<menu_item_call label="Jouer localement" name="Animation Audition"/>
-	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
-	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
-	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
-	<menu_item_call label="Activer" name="Activate"/>
-	<menu_item_call label="Désactiver" name="Deactivate"/>
-	<menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
-	<menu_item_call label="Remettre dans le dernier emplacement" name="Restore to Last Position"/>
-	<menu_item_call label="Porter" name="Object Wear"/>
-	<menu label="Attacher à" name="Attach To"/>
-	<menu label="Attacher au HUD " name="Attach To HUD"/>
-	<menu_item_call label="Éditer" name="Wearable Edit"/>
-	<menu_item_call label="Porter" name="Wearable Wear"/>
-	<menu_item_call label="Enlever" name="Take Off"/>
-	<menu_item_call label="--aucune option--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Acheter" name="Task Buy"/>
+	<menu_item_call label="Ouvrir" name="Task Open"/>
+	<menu_item_call label="Jouer" name="Task Play"/>
+	<menu_item_call label="Propriétés" name="Task Properties"/>
+	<menu_item_call label="Renommer" name="Task Rename"/>
+	<menu_item_call label="Supprimer" name="Task Remove"/>
+	<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
+	<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
+	<menu_item_call label="Nouveau dossier" name="New Folder"/>
+	<menu_item_call label="Nouveau script" name="New Script"/>
+	<menu_item_call label="Nouvelle note" name="New Note"/>
+	<menu_item_call label="Nouveau geste" name="New Gesture"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau tricot" name="New Undershirt"/>
+		<menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu label="Changer de type" name="Change Type">
+		<menu_item_call label="Défaut" name="Default"/>
+		<menu_item_call label="Gants" name="Gloves"/>
+		<menu_item_call label="Veste" name="Jacket"/>
+		<menu_item_call label="Pantalon" name="Pants"/>
+		<menu_item_call label="Silhouette" name="Shape"/>
+		<menu_item_call label="Chaussures" name="Shoes"/>
+		<menu_item_call label="Chemise" name="Shirt"/>
+		<menu_item_call label="Jupe" name="Skirt"/>
+		<menu_item_call label="Sous-vêtements (femme)" name="Underpants"/>
+		<menu_item_call label="Sous-vêtements (homme)" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Téléporter" name="Landmark Open"/>
+	<menu_item_call label="Ouvrir" name="Animation Open"/>
+	<menu_item_call label="Ouvrir" name="Sound Open"/>
+	<menu_item_call label="Purger l&apos;objet" name="Purge Item"/>
+	<menu_item_call label="Restaurer l&apos;objet" name="Restore Item"/>
+	<menu_item_call label="Ouvrir" name="Open"/>
+	<menu_item_call label="Propriétés" name="Properties"/>
+	<menu_item_call label="Renommer" name="Rename"/>
+	<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Enlever les objets" name="Take Off Items"/>
+	<menu_item_call label="Ajouter à l&apos;ensemble" name="Add To Outfit"/>
+	<menu_item_call label="Remplacer l&apos;ensemble" name="Replace Outfit"/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
+	<menu_item_call label="Jouer" name="Sound Play"/>
+	<menu_item_call label="Jouer dans le Monde" name="Animation Play"/>
+	<menu_item_call label="Jouer localement" name="Animation Audition"/>
+	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
+	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
+	<menu_item_call label="Activer" name="Activate"/>
+	<menu_item_call label="Désactiver" name="Deactivate"/>
+	<menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
+	<menu_item_call label="Porter" name="Object Wear"/>
+	<menu label="Attacher à" name="Attach To"/>
+	<menu label="Attacher au HUD " name="Attach To HUD"/>
+	<menu_item_call label="Éditer" name="Wearable Edit"/>
+	<menu_item_call label="Porter" name="Wearable Wear"/>
+	<menu_item_call label="Enlever" name="Take Off"/>
+	<menu_item_call label="--aucune option--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_landmark.xml b/indra/newview/skins/default/xui/fr/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d887fb0f399e234310940952bcbc086a4feb06a4
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="Copier la SLurl" name="copy"/>
+	<menu_item_call label="Supprimer" name="delete"/>
+	<menu_item_call label="Créer un Favori" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
index 36107885f4ca47f433576d371b46a2fb2b81392d..5ab5f56ec59b5d1b46deae975bdc8a51c0dc07cb 100644
--- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
-	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
-	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
-	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
-	<menu_item_call label="Profil..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
+	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
+	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
+	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
+	<menu_item_call label="Carte du monde" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_navbar.xml b/indra/newview/skins/default/xui/fr/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce48f8e61710f571f5298cc2f66988e8bb4ffd76
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Voir les coordonnées" name="Show Coordinates"/>
+	<menu_item_call label="Repère" name="Landmark"/>
+	<menu_item_call label="Couper" name="Cut"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Tout sélectionner" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6fcb85705402c9239da6f1381184157693517ce1
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Infos" name="pick_info"/>
+	<menu_item_call label="Éditer" name="pick_edit"/>
+	<menu_item_call label="Téléporter" name="pick_teleport"/>
+	<menu_item_call label="Carte" name="pick_map"/>
+	<menu_item_call label="Supprimer" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..85d8d3398265f1787785b1653d9e61d369a3105f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Enregistrer comme repère" name="landmark"/>
+	<menu_item_call label="Créer un Favori" name="pick"/>
+	<menu_item_call label="Acheter un pass" name="pass"/>
+	<menu_item_call label="Éditer" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml
index ebd042a38a5d22575a9d6a6fd34bfb7e0b642d24..055be714cf3963ce2976bce009fe5c1121fb9f4e 100644
--- a/indra/newview/skins/default/xui/fr/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/fr/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="À propos de l&apos;URL" name="about_url" />
-	<menu_item_call label="Téléporter vers l&apos;URL" name="teleport_to_url" />
-	<menu_item_call label="Voir sur la carte" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="À propos de l&apos;URL" name="about_url"/>
+	<menu_item_call label="Téléporter vers l&apos;URL" name="teleport_to_url"/>
+	<menu_item_call label="Carte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..76a573cfd5770a709a877ab4e616e827aa5f5146
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du résident" name="show_agent"/>
+	<menu_item_call label="Copier le nom dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4615ad0939b81d6a01efeb05bbc0c2a90da921cf
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du groupe" name="show_group"/>
+	<menu_item_call label="Copier le groupe dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..27bcb91f7e9038643368bbfc0d60634c47d18be8
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ouvrir la page Web" name="url_open"/>
+	<menu_item_call label="Ouvrir dans un navigateur interne" name="url_open_internal"/>
+	<menu_item_call label="Ouvrir dans un navigateur externe" name="url_open_external"/>
+	<menu_item_call label="Copier l&apos;URL dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..50bd5b4f747dc1fa8c1f1b305c2945b9c27f0c57
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur l&apos;objet" name="show_object"/>
+	<menu_item_call label="Me téléporter à l&apos;endroit de l&apos;objet" name="teleport_to_object"/>
+	<menu_item_call label="Copier le nom de l&apos;objet dans le presse-papier" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f30203a434e9381b728bfc6cee9a554c9be9b0f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur la parcelle" name="show_parcel"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..143da035330cff0415f7c9d6d7040f572b439f59
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur ce lieu" name="show_place"/>
+	<menu_item_call label="Me téléporter à cet endroit" name="teleport_to_location"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a32ce65ec155a21b33b6a2ac5c6f1d9cdb165175
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Me téléporter à cet endroit." name="teleport"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papier" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index a38cf858e0cbec16cd25e2652a16e8beee82b872..8832550add5d3418b47d86313702fa519ef4857a 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1,2974 +1,2547 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		Ne plus afficher
-	</global>
-	<global name="alwayschoose">
-		Toujours choisir cette option
-	</global>
-	<global name="implicitclosebutton">
-		Fermer
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="Message d&apos;alerte inconnu" name="MissingAlert">
-		Votre version de [APP_NAME] ne peut afficher ce message d&apos;erreur.
-
-Détails de l&apos;erreur : L&apos;alerte, appelée &apos;[_NAME]&apos; est introuvable dans notifications.xml.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		Erreur floater : impossible de trouver les contrôles suivants :
-
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		Aucun didacticiel n&apos;est disponible actuellement.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="BadInstallation">
-		Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version depuis secondlife.com.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		Erreur réseau : impossible d&apos;établir une connexion. 
-&apos;[DIAGNOSTIC]&apos;
-Veuillez vérifier votre connexion.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		Le modèle de message [PATH] est introuvable.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		Enregistrer les changements dans la partie du corps/les habits actuels ?
-		<usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="WriteAnimationFail">
-		Une erreur est survenue lors de l&apos;écriture des données d&apos;animation. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		Impossible d&apos;afficher les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		Enregistrer tous les changements dans les habits/parties du corps ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
-Souhaitez-vous accorder des droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
-Souhaitez-vous accorder des droits d&apos;édition aux résidents selectionnés ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		Souhaitez-vous retirer les droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		Souhaitez-vous retirer les droits d&apos;édition aux résidents selectionnés ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		Impossible de créer le groupe.
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		Pour envoyer une notice au groupe, vous devez indiquer un sujet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		Vous êtes sur le point d&apos;ajouter des membres du groupe dans le rôle de [ROLE_NAME].
-Les membres ne peuvent pas être destitués de ce rôle.
-Ils doivent donner eux-mêmes leur démission.
-Êtes-vous certain de vouloir continuer ?
-		<usetemplate ignoretext="Lorsque vous donnez à des membres du groupe le rôle de « propriétaire »" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
- *Avertissement*
- Tout membre disposant de ce pouvoir peut s&apos;affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
-
- *Avertissement*
- Tout membre dans un rôle avec ce pouvoir peut s&apos;attribuer à lui-même, ainsi qu&apos;à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		Sélectionner l&apos;option Afficher dans la recherche
-En cochant cette case, votre parcelle apparaîtra :
-- dans les résultats de recherche ;
-- dans les objets publics ;
-- dans la recherche web.
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		La musique et le média ne peuvent être utilisés que sur cette parcelle. Les options Son et Voix peuvent être limités à la parcelle ou seront entendus par les résidents en dehors de la parcelle, en fonction de leur catégorie d&apos;accès. Souhaitez-vous en savoir plus sur le paramétrage de ces options ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/M%C3%A9dias_sur_la_parcelle_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		Les résultats de recherche sont organisés en fonction de l&apos;onglet dans lequel vous vous trouvez, votre catégorie d&apos;accès, la catégorie choisie, ainsi que d&apos;autres facteurs. Pour plus de détails, veuillez consulter les pages d&apos;aide.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/FAQ_sur_la_recherche_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		Cette parcelle ne peut pas apparaître dans la recherche car elle est dans une région où cela n&apos;est pas autorisé.
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		Si vous sélectionnez Afficher dans la recherche :
-- votre profil apparaîtra dans les résultats de recherche ;
-- un lien vers votre profil apparaîtra dans les pages de groupe publiques.
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		Vous pouvez proposer à un autre résident de devenir votre partenaire ou dissoudre un partenariat existant à partir du site de [SECOND_LIFE].
-
-Aller sur le site de [SECOND_LIFE] pour avoir plus d&apos;informations sur les partenariats ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		Il est possible que vos droits par défaut ne fonctionnent pas dans les anciennes régions.
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		Si ce résident a défini une URL de profil web, vous pouvez :
- * Cliquer sur Charger pour afficher la page dans cet onglet ;
- * Cliquer sur Charger &gt; Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ;
- * Cliquer sur Charger &gt; URL du domicile, pour retourner au profil web du résident.
-
-Lorsque vous êtes dans votre propre profil, vous pouvez définir n&apos;importe quelle URL comme profil web. Pour cela, saisissez l&apos;URL et cliquez sur OK.
-Les autres résidents peuvent visiter l&apos;URL que vous avez définie en regardant votre profil.
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		Rejoindre ce groupe coûte [COST] L$.
-Voulez-vous continuer ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		Rejoindre ce groupe coûte [COST] L$.
-Vous n&apos;avez pas suffisamment de L$ pour rejoindre ce groupe.
-	</notification>
-	<notification name="LandBuyPass">
-		Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		Pour rendre l&apos;annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
-Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		Attention : en cliquant sur Vendre à n&apos;importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région.
-
-Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l&apos;inventaire du propriétaire précédent ?
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l&apos;inventaire de leur propriétaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
-
-Objets : [N]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		Impossible de désactiver les scripts.
-Les dégâts sont autorisés dans toute la région.
-Pour que les armes fonctionnent, les scripts doivent être autorisés.
-	</notification>
-	<notification name="MustBeInParcel">
-		Pour définir le point d&apos;atterrissage, vous devez vous trouver à l&apos;intérieur de la parcelle.
-	</notification>
-	<notification name="PromptRecipientEmail">
-		Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
-	</notification>
-	<notification name="PromptSelfEmail">
-		Veuillez saisir votre adresse e-mail.
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		Envoyer la photo avec le sujet ou le message par défaut ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		Erreur dans le traitement des données de la photo
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		Erreur d&apos;encodage de la photo.
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		Une erreur est survenue lors du chargement de la capture d&apos;écran destinée au rapport, suite au problème suivant : [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d&apos;utilisation.
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		Impossible de mettre cet ensemble.
-Ce dossier ne contient pas d&apos;habits, de parties du corps ni de pièces jointes.
-	</notification>
-	<notification name="CannotWearTrash">
-		Vous ne pouvez pas porter d&apos;habits ni de parties du corps se trouvant dans la corbeille.
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		Oups! Vous avez oublié de fournir certaines informations.
-Vous devez saisir le nom et le prénom de votre avatar.
-
-Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
-		<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
-	</notification>
-	<notification name="AddClassified">
-		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche pendant une semaine.
-Rédigez votre annonce, puis cliquez sur Publier pour l&apos;ajouter à la liste des annonces.
-Au moment de cliquer sur Publier, vous serez invité à payer des frais.
-Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
-		<usetemplate ignoretext="Lors de l&apos;ajout d&apos;une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		Supprimer l&apos;annonce [NAME] ?
-Une fois payés, les frais ne sont pas remboursables.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		Enregistrer les changements dans l&apos;annonce [NAME] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		Supprimer le favori [PICK] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		Aller à la page web de [SECOND_LIFE] réservée aux événements ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		Veuillez sélectionner une proposition.
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		Veuillez sélectionner un historique.
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		Le cache sera vidé après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="CacheWillBeMoved">
-		Le cache sera déplacé après le redémarrage de [APP_NAME].
-Remarque : cela videra le cache.
-	</notification>
-	<notification name="ChangeConnectionPort">
-		Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="ChangeSkin">
-		Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
-	</notification>
-	<notification name="GoToAuctionPage">
-		Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		Enregistrer les changements ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		L&apos;enregistrement du geste a échoué.
-Il y a trop d&apos;étapes dans ce geste.
-Essayez d&apos;en supprimer quelques-unes.
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		L&apos;enregistrement du geste a échoué. Veuillez réessayer dans une minute.
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		Le geste n&apos;a pas pu être enregistré car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		Une erreur est survenue lors de l&apos;enregistrement du geste, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre geste ultérieurement.
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		La note n&apos;a pas pu être enregistrée car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement de la note, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre note ultérieurement.
-	</notification>
-	<notification name="ScriptCannotUndo">
-		Impossible d&apos;annuler tous les changements dans votre version du script.
-Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
-(**Attention** Cette opération est irréversible.)
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement du script, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		Impossible d&apos;enregistrer le script car l&apos;objet qui le contient est introuvable.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		Une erreur est survenue lors de l&apos;enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		Impossible de lancer ou d&apos;arrêter le script car l&apos;objet qui le contient est introuvable.
-L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
-	</notification>
-	<notification name="CannotDownloadFile">
-		Impossible de télécharger le fichier
-	</notification>
-	<notification name="CannotWriteFile">
-		Impossible d&apos;écrire le fichier [[FILE]]
-	</notification>
-	<notification name="UnsupportedHardware">
-		Avertissement : vous n&apos;avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d&apos;être moindre. Malheureusement, nous n&apos;offrons aucune assistance pour les problèmes de configuration système.
-
-MINSPECS
-Voulez-vous visiter [_URL] pour plus d&apos;informations ?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Lors de la détection de matériel non pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="UnknownGPU">
-		Votre système contient une carte graphique que nous ne connaissons pas actuellement.
-Cela est souvent le cas avec le nouveau materiel qui n&apos;a pas encore été testé.
-Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
-(Menu Édition &gt; Préférences &gt; Graphiques).
-		<form name="form">
-			<ignore name="ignore" text="Lors de la détection d&apos;une carte graphique inconnue"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] a planté lors de l&apos;initialisation des drivers graphiques.
-La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
-Certaines fonctionnalités graphiques seront donc désactivées.
-Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
-La qualité des graphiques peut être augmentée à la section Préférences &gt; Graphiques
-	</notification>
-	<notification name="RegionNoTerraforming">
-		Le terraformage est interdit dans la région [REGION].
-	</notification>
-	<notification name="CannotCopyWarning">
-		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		Impossible de donner l&apos;objet de l&apos;inventaire.
-	</notification>
-	<notification name="TransactionCancelled">
-		Transaction annulée.
-	</notification>
-	<notification name="TooManyItems">
-		Impossible de donner plus de 42 objets au cours d&apos;un seul transfert d&apos;inventaire.
-	</notification>
-	<notification name="NoItems">
-		Vous n&apos;êtes pas autorisé à transférer les objets sélectionnés.
-	</notification>
-	<notification name="CannotCopyCountItems">
-		Vous n&apos;êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
-Souhaitez-vous vraiment donner ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
-	</notification>
-	<notification name="FreezeAvatar">
-		Geler cet avatar ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		Geler [AVATAR_NAME] ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		Expulser [AVATAR_NAME] de votre terrain ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		Expulser cet avatar de votre terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		Expulser [AVATAR_NAME] de votre terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		Erreur d&apos;acquisition : trop d&apos;objets sélectionnés.
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		Erreur d&apos;acquisition : les objets sont répartis dans plus d&apos;une région.
-Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-Aller sur [_URL] pour obtenir des informations sur l&apos;achat de L$ ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		Impossible de lier ces [COUNT] objets.
-Vous pouvez lier un maximum de [MAX] objets.
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		Vous ne pouvez lier que des ensembles d&apos;objets complets et vous devez choisir un minimum de deux objets.
-	</notification>
-	<notification name="CannotLinkModify">
-		Impossible de lier car vous n&apos;avez pas le droit de modifier tous les objets.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets et qu&apos;aucun d&apos;eux n&apos;est verrouillé.
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		Impossible de lier car les objets n&apos;ont pas tous le même propriétaire.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
-	</notification>
-	<notification name="NoFileExtension">
-		Pas d&apos;extension pour le fichier suivant : &apos;[FILE]&apos;
-
-Assurez-vous que le fichier a l&apos;extension correcte.
-	</notification>
-	<notification name="InvalidFileExtension">
-		Extension de fichier [EXTENSION] invalide
-[VALIDS] attendu
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		Impossible de lire le fichier son chargé :
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		Il semble que le fichier ne soit pas un fichier RIFF WAVE :
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		Il semble que le fichier ne soit pas un fichier audio PCM WAVE :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		Impossible de trouver les données dans l&apos;en-tête WAV :
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		Le fichier audio est trop long (10 secondes maximum) :
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		Problème avec le fichier [FILE] :
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		Impossible d&apos;ouvrir le fichier son compressé temporaire : [FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		Échec d&apos;encodage Vorbis inconnu sur : [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		Impossible d&apos;encoder le fichier : [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		Fichier ressource corrompu : [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		Version de fichier ressource Linden inconnu : [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		Impossible de créer le fichier de sortie : [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		Actuellement, nous ne prenons pas en charge le chargement de lots de fichiers d&apos;animation.
-	</notification>
-	<notification name="CannotUploadReason">
-		Impossible de charger [FILE] suite au problème suivant : [REASON]
-Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l&apos;autorise pas.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		Impossible d&apos;effectuer les recompilations.
-Sélectionnez un objet avec un script.
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		Impossible d&apos;effectuer les recompilations.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		Impossible d&apos;effectuer la réinitialisation.
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		Impossible d&apos;effectuer la réinitialisation.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		Impossible de définir les scripts sur « exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		Impossible de définir les scripts sur « non-exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-	</notification>
-	<notification name="NoFrontmostFloater">
-		Aucun floater frontmost à sauvegarder.
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		Votre requête a été modifiée et les mots trops courts ont été supprimés.
-
-Recherche effectuée : [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		Vos termes de recherche étaient trop courts et aucune recherche n&apos;a été effectuée.
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		Impossible de téléporter.
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-	</notification>
-	<notification name="invalid_region_handoff">
-		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-	</notification>
-	<notification name="blocked_tport">
-		Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-	</notification>
-	<notification name="nolandmark_tport">
-		Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
-	</notification>
-	<notification name="timeout_tport">
-		Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
-Veuillez réessayer dans un moment.
-	</notification>
-	<notification name="noaccess_tport">
-		Désolé, vous n&apos;avez pas accès à cette destination.
-	</notification>
-	<notification name="missing_attach_tport">
-		Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
-	</notification>
-	<notification name="too_many_uploads_tport">
-		Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-	</notification>
-	<notification name="expired_tport">
-		Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="expired_region_handoff">
-		Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="no_host">
-		Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="no_inventory_host">
-		L&apos;inventaire est temporairement indisponible.
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		Impossible de définir le propriétaire foncier :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		Problème :
-Aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		Problème :
-Aucune région sélectionnée.
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		Impossible d&apos;abandonner le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		Impossible d&apos;abandonner le terrain :
-la région est introuvable.
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		Impossible d&apos;acheter le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		Impossible d&apos;acheter le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n&apos;estime le montant de cette transaction.
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		Cession du terrain impossible :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		Cession du terrain impossible :
-aucun groupe sélectionné.
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		Cession du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		Cession du terrain impossible :
-plusieurs parcelles sélectionnées.
-
-Essayez de ne sélectionner qu&apos;une seule parcelle.
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		Cette parcelle propose des flux média.
-Pour jouer des flux média, il faut avoir une connexion internet rapide.
-
-Jouer les flux média lorsqu&apos;ils sont disponibles ?
-(Vous pourrez modifier cette option ultérieurement sous Préférences &gt; Audio et vidéo.)
-		<usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		Cession du terrain impossible :
-rapport de propriété sur le point d&apos;être envoyé par le serveur.
-
-Merci de réessayer.
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		Cession du terrain impossible :
-la cession de terrain est interdite dans la région [REGION].
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		Impossible d&apos;abandonner le terrain :
-mise à jour des informations sur la parcelle sur le point d&apos;être envoyée par le serveur.
-
-Veuillez réessayer dans quelques secondes.
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		Impossible d&apos;abandonner le terrain :
-vous n&apos;êtes pas le propriétaire des parcelles sélectionnées.
-
-Veuillez sélectionner une seule parcelle.
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		Impossible d&apos;abandonner le terrain :
-vous n&apos;avez pas le droit de libérer cette parcelle.
-Les parcelles qui vous appartiennent sont en vert.
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		Impossible d&apos;abandonner le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		Impossible d&apos;abandonner le terrain :
-le transfert de terrain est interdit dans la région [REGION].
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		Impossible d&apos;abandonner le terrain :
-vous devez sélectionner une parcelle entière pour la libérer.
-
-Sélectionnez toute la parcelle ou divisez-la d&apos;abord.
-	</notification>
-	<notification name="ReleaseLandWarning">
-		Vous vous apprêtez à libérer [AREA] m² de terrain.
-Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
-
-Libérer ce terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		Division du terrain impossible :
-
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		Division du terrain impossible :
-
-Toute la parcelle est sélectionnée.
-Sélectionnez une partie de la parcelle uniquement.
-	</notification>
-	<notification name="LandDivideWarning">
-		Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
-
-Diviser le terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		Division du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		Impossible de fusionner le terrain :
-la région dans laquelle il est situé est introuvable.
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		Impossible de fusionner le terrain :
-aucune parcelle sélectionnée.
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		Impossible de fusionner le terrain :
-vous avez sélectionné une seule parcelle.
-
-Sélectionnez le terrain sur les deux parcelles.
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		Impossible de fusionner le terrain :
-vous devez sélectionner au moins deux parcelles.
-
-Sélectionnez le terrain sur les deux parcelles.
-	</notification>
-	<notification name="JoinLandWarning">
-		En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
-Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
-
-Fusionner le terrain ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		Afficher les propriétaires :
-La couleur des parcelles indique le type de propriété.
-
-Vert = votre terrain
-Turquoise = le terrain de votre groupe
-Rouge = appartenant à d&apos;autres
-Jaune = en vente
-Mauve = aux enchères
-Gris = public
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		Cette note doit être sauvegardée avant que l&apos;objet ne puisse être copié ou visualisé. Enregistrer la note ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		Copier cet objet dans votre inventaire ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		Échec du changement de résolution (à [RESX], de [RESY])
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		Erreur : herbes non identifiées : [SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		Erreur : arbres non identifiés : [SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d&apos;abord libérer de la mémoire sur votre ordinateur.
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
-Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		Vous avez été déconnecté(e) de [SECOND_LIFE] :
-            [MESSAGE]
-Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME].
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		Impossible d&apos;acheter du terrain pour le groupe :
-Vous n&apos;avez pas le droit d&apos;acheter de terrain pour votre groupe.
-	</notification>
-	<notification label="Devenir amis" name="AddFriend">
-		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Devenir amis" name="AddFriendWithMessage">
-		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-		<form name="form">
-			<input name="message">
-				Voulez-vous être mon ami(e) ?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		Voulez-vous supprimer plusieurs résidents de votre liste d&apos;amis ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		Vous devez choisir un nom pour votre petite annonce.
-	</notification>
-	<notification name="MinClassifiedPrice">
-		Le coût de l&apos;annonce doit être de [MIN_PRICE] L$ minimum.
-
-Veuillez saisir un montant plus élevé.
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		Au moins un des objets que vous avez sélectionnés est verrouillé.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		Au moins un des objets que vous avez sélectionnés n&apos;est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		Au moins un des objets est verrouillé.
-Au moins un des objets n&apos;est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		Au moins un des objets est verrouillé.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		Au moins un des objets n&apos;est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		Au moins un des objets est verrouillé.
-Au moins un des objets n&apos;est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-		<usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		Au moins un des objets est verrouillé.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		Au moins un des objets est verrouillé.
-Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-Par contre, vous pouvez prendre les objets sélectionnés.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		Impossible d&apos;acheter le terrain car la sélection couvre plusieurs régions.
-
-Veuillez sélectionner une zone plus petite et réessayer.
-	</notification>
-	<notification name="DeedLandToGroup">
-		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
-Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		Les paramètres d&apos;affichage sont au niveau le plus sûr, comme vous l&apos;aviez indiqué.
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		Vos paramètres d&apos;affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		L&apos;emplacement [TYPE] n&apos;est pas disponible actuellement. [HELP]
-Vous avez été déplacé dans une région voisine.
-	</notification>
-	<notification name="ClothingLoading">
-		Vos habits sont toujours en train d&apos;être téléchargés.
-Vous pouvez utiliser [SECOND_LIFE] sans problème, les autres résidents vous voient normalement.
-		<form name="form">
-			<ignore name="ignore" text="Lorsque les habits prennent longtemps à télécharger"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		L&apos;installation de [APP_NAME] est terminée.
-
-S&apos;il s&apos;agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
-Retourner sur www.secondlife.com pour créer un nouveau compte ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		Vous avez des problèmes à vous connecter. Il peut s&apos;agir d&apos;un problème avec votre connexion internet ou les serveurs de [SECOND_LIFE].
-
-Nous vous conseillons de vérifier votre connexion Internet et de réessayer dans quelques minutes, de cliquer sur Aide, ou bien de cliquer sur Téléporter pour être téléporté vers votre domicile.
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="Aide"/>
-			<button name="Teleport" text="Téléporter"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		Votre personnage va apparaître dans un moment.
-
-Pour marcher, utilisez les flèches de direction.
-Appuyez sur F1 pour obtenir de l&apos;aide ou en savoir plus sur [SECOND_LIFE].
-Choisissez un avatar homme ou femme.
-Vous pourrez revenir sur votre décision plus tard.
-		<usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] [PRICE] L$ Vous n&apos;avez pas suffisamment de L$ pour faire cela.
-	</notification>
-	<notification name="GrantedModifyRights">
-		Vous avez reçu le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="RevokedModifyRights">
-		Vous n&apos;avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		Cela videra le cache cartographique de cette région.
-Cela n&apos;est vraiment utile que pour faire du débugage.
-(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		Impossible d&apos;acheter plus d&apos;un objet à  la fois.  Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		Impossible de copier les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		Téléporter tous les résidents de cette région chez eux ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-	</notification>
-	<notification name="InvalidTerrainSize">
-		Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-	</notification>
-	<notification name="RawUploadStarted">
-		Le chargement a commencé. Cela va prendre une à deux minutes,
-suivant votre vitesse de connexion.
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		Echec lors de la tentative d&apos;ajout de [NUM_ADDED] agents :
-Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		Impossible d&apos;ajouter le propriétaire du domaine à la liste des résidents bannis.
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		Impossible de changer d&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n&apos;est pas autorisée.
-	</notification>
-	<notification name="CantSetBuyObject">
-		Cet objet n&apos;est pas à vendre.
-Veuillez choisir un objet à vendre et réessayer.
-	</notification>
-	<notification name="FinishedRawDownload">
-		Chargement du fichier de terrain raw effectué vers :
-[DOWNLOAD_PATH].
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadWindows">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMac">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
-
-Télécharger vers le dossier Applications ?
-		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		Si vous cédez cet objet, le groupe :
-* recevra les L$ versés pour l&apos;objet ;
-		<usetemplate ignoretext="Lors de la cession d&apos;objets au groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		Ouvrir votre navigateur web système pour afficher ce contenu ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture de votre navigateur système pour afficher une page web" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		Aller sur www.secondlife.com pour gérer votre compte ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour gérer votre compte" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur les problèmes de sécurité." name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		Consultez le Wiki sur l&apos;Assurance Qualité de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur l&apos;Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		Pour apprendre à utiliser JIRA, consultez le Wiki de [SECOND_LIFE].
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter la page Wiki sur le JIRA" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		Consulter le Guide guide pour l&apos;écriture de scripts pour obtenir de l&apos;aide ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour voir le Guide pour l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		Consulter le Wiki LSL pour de l&apos;aide sur les scripts ?
-		<usetemplate ignoretext="Lors de l&apos;ouverture du navigateur web pour consulter le Guide sur l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
-
-*Avertissement* Les objets non transférables seront supprimés !
-		<usetemplate ignoretext="Lors du renvoi d&apos;objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		Vous êtes actuellement membre du groupe [GROUP].
-Quitter le groupe ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
-	</notification>
-	<notification name="MuteLinden">
-		Désolé, vous ne pouvez pas ignorer un Linden.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente.  Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
-	</notification>
-	<notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed">
-		Vous ignorez déjà ce résident.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		Si vous supprimez des contenus, vous risquez d&apos;endommager l&apos;objet. Souhaitez-vous supprimer cet objet ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		Impossible d&apos;offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		Mode occupé activé.
-Les chats et les messages instantanés ne s&apos;afficheront pas. Vous répondrez aux messages instantanés en utilisant la réponse automatique que vous avez créée. Toutes les propositions de téléportation seront refusées. Tous objets envoyés iront dans la corbeille.
-		<usetemplate ignoretext="Lors de l&apos;utilisation du mode Occupé" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		Vous appartenez déjà à un nombre élevé de groupes et nous ne pouvez pas en rejoindre un nouveau. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
-Pour quitter un groupe, sélectionnez l&apos;option Groupe dans le menu Éditer.
-[NAME] vous invite à rejoindre un groupe.
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/>
-	</notification>
-	<notification name="KickUser">
-		Éjecter cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Un administrateur vous a déconnecté.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		Éjecter tous les résidents actuellement en ligne avec quel message ?
-		<form name="form">
-			<input name="message">
-				Un administrateur vous a déconnecté.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		Geler cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		Dégeler cet utilisateur avec quel message ?
-		<form name="form">
-			<input name="message">
-				Vous n&apos;êtes plus gelé.
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		Proposez une téléportation avec le message suivant ?
-		<form name="form">
-			<input name="message">
-				On se rejoint à [REGION] ?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		Demander au résident de venir vous rejoindre ?
-		<form name="form">
-			<input name="message">
-				On se rejoint à [REGION] ?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		Êtes-vous certain de vouloir être téléporté ?
-		<usetemplate ignoretext="Lors de la téléportation depuis un repère de l&apos;inventaire" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
-	</notification>
-	<notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate">
-		Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
-		Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
-
-Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-
-Continuer ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Modifier l&apos;accès à un domaine Linden" name="ChangeLindenAccess">
-		Vous vous apprêtez à modifier la liste d&apos;accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
-
-Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l&apos;intérieur/extérieur de la grille.
-Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedAgentAdd">
-		Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedAgentRemove">
-		Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedGroupAdd">
-		Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateAllowedGroupRemove">
-		Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateBannedAgentAdd">
-		Refuser l&apos;accès à ce domaine uniquement ou à [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateBannedAgentRemove">
-		Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateManagerAdd">
-		Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Choisir le domaine" name="EstateManagerRemove">
-		Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
-	</notification>
-	<notification label="Confirmer" name="EstateKickUser">
-		Éjecter [EVIL_USER] de ce domaine ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		Êtes-vous certain de vouloir modifier le règlement du domaine ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsque l&apos;accès à une région est bloqué à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-	<form name="form">
-      <button
-       name="OK"
-       text="Modifier les Préférences"/>
-      <button
-       default="true"
-       name="Cancel"
-       text="Fermer"/>
-       <ignore name="ignore" text="Lorsque l&apos;accès à une région est bloqué à cause des préférences concernant la catégorie d&apos;accès"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être réclamée à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous autorise pas à réclamer cette région.
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être réclamée à cause des préférences concernant la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-		</url>
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être achetée à cause de la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		Votre catégorie d&apos;accès ne vous autorise pas à acheter cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
-		<usetemplate ignoretext="Lorsqu&apos;une région ne peut pas être achetée à cause des préférences concernant la catégorie d&apos;accès" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		&quot;Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer.&quot;
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		Problème lors de l&apos;importation du règlement du domaine.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		Problèmes lors de l&apos;ajout d&apos;un nouveau gérant de domaine. Il est possible qu&apos;au moins un des domaines ait une liste de gérants complète.
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		Problème lors de l&apos;ajout à la liste de ce domaine. Il est possible qu&apos;au moins un des domaines ait une liste complète.
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		Impossible de charger les données de la note actuellement.
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		Permissions pour afficher la note insuffisantes.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		Les références de la note ne se trouvent pas dans la base de données.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
-
-Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		Cette petite annonce contient-elle du contenu Mature ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="SetGroupMature">
-		Ce groupe contient-il du contenu Mature ?
-		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification label="Confirmer le redémarrage" name="ConfirmRestart">
-		Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification label="Envoyer un message à la région" name="MessageRegion">
-		Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Interdire le terraformage" name="HelpRegionBlockTerraform">
-		Si vous cochez cette case, les propriétaires ne pourront plus terraformer leur terrain, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Interdire le vol" name="HelpRegionBlockFly">
-		Si vous cochez cette case, les résidents ne pourront plus voler dans cette région, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Modifications groupées des droits relatifs au contenu" name="HelpBulkPermission">
-		L&apos;outil Modifications groupées des droits vous permet de modifier rapidement et simultanément les droits dans les contenus des objets séléctionnés. Notez toutefois que vous paramétrez uniquement les droits des objets dans les Contenus des objets sélectionnés, et non les droits sur les objets eux-mêmes.  
-
-Notez aussi que les droits ne s&apos;appliquent pas aux contenus imbriqués dans les objets contenus. Votre requête ne porte que sur les objets de premier niveau.
-
-Vous pouvez sélectionner quels types d&apos;objets modifier à la section Types de contenu. Les photos sont incluses quand vous sélectionnez Textures.
-
-* Cet outil ne vous permettra de changer que les droits des objets que vous êtes autorisés à modifier.
-* Vous ne pouvez pas accorder de droits que vous n&apos;avez pas au prochain propriétaire.
-* Les droits accordés au prochain propriétaire de sont que des requêtes. Si un objet ne peut recevoir tous les nouveaux droits, aucun de ses droits ne changera.
-
-Lorsque vous êtes prêt à modifier tous les droits, cliquez sur Appliquer et attendez de voir s&apos;afficher les résultats.
-
-Si vous fermez la fenêtre des modifications groupées alors que les droits sont en train d&apos;être modifiés, vous suspendez l&apos;opération.
-	</notification>
-	<notification label="Autoriser les dégâts" name="HelpRegionAllowDamage">
-		Si vous cochez cette case, les résidents peuvent subir des dégâts dans toute la région quel que soit le paramétrage individuel des parcelles. Si la case n&apos;est pas cochée, les propriétaires sont libres d&apos;activer ou non cette option sur leur parcelle.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Nombre maximum d&apos;avatars" name="HelpRegionAgentLimit">
-		Définit le nombre maximum d&apos;avatars autorisés dans cette région.
-La performance peut varier en fonction du nombre d&apos;avatars présents.
-
-Valeur par défaut : 40
-	</notification>
-	<notification label="Bonus objet" name="HelpRegionObjectBonus">
-		Le bonus objet est le multiplicateur de prims autorisées sur une parcelle donnée. L&apos;échelle autorisée est comprise entre 1 et 10. Lorsque ce chiffre est de 1, chaque parcelle de 512 m² peut contenir 117 prims. S&apos;il est de 2, chaque parcelle peut contenir 234 prims, ou deux fois plus, et ainsi de suite. Le nombre maximum de prims autorisées dans une région est de 15 000, quel que soit le bonus objet. Attention : si vous définissez un bonus objet et décidez ensuite de le diminuer, cela peut entraîner la suppression ou le renvoi d&apos;objets.
-
-Valeur par défaut : 1.0
-	</notification>
-	<notification label="Accès" name="HelpRegionMaturity">
-		Définit la catégorie d&apos;accès de la région, telle qu&apos;affichée dans la barre de menu en haut du client et dans les infobulles de la carte lorsque vous passez votre curseur au-dessus de cette région. Ce paramètre affecte aussi l&apos;accès à cette région et les résultats de recherche. Les autres résidents ne peuvent pénétrer que dans les régions ou n&apos;afficher que les résultats de recherche ayant la même catégorie d&apos;accès que celle indiquée dans leurs Préférences.
-
-Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
-	</notification>
-	<notification label="Interdire les bousculades" name="HelpRegionRestrictPushObject">
-		Cette case permet de restreindre les bousculades dans toute une région.
-Lorsqu&apos;elle est cochée, les résidents ne peuvent être bousculés que par d&apos;autres résidents ou par le propriétaire de la parcelle.
-(Bousculer fait référence à la fonction LSL llPushObjet().)
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Fusionner/Diviser des parcelles" name="HelpParcelChanges">
-		Cette case permet de choisir si les parcelles n&apos;appartenant pas au gérant du domaine peuvent ou pas être fusionnées ou divisées.
-Si cette case n&apos;est pas cochée :
- * Seuls les propriétaires ou gérants de domaine peuvent fusionner ou diviser des parcelles.
- * Ils ne peuvent fusionner ou diviser que les parcelles du propriétaire,
-   ou celles d&apos;un groupe dans lequel ils ont les pouvoirs nécessaires.
-   Si cette case est cochée :
- * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles.
- * Pour les parcelles appartenant à un groupe, les membres avec les pouvoirs nécessaires peuvent fusionner ou diviser les parcelles.
-
-Valeur par défaut : activée
-	</notification>
-	<notification label="Ne pas afficher dans la recherche" name="HelpRegionSearch">
-		Si vous cochez cette option, les propriétaires ne pourront pas faire apparaître leurs parcelles dans les résultats de recherche.
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
-		La catégorie d&apos;accès de cette région a été mise à jour.
-Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
-	</notification>
-	<notification label="Revente de terrain" name="HelpRegionLandResell">
-		Les propriétaires et gérants de domaine peuvent vendre n&apos;importe quel terrain appartenant au propriétaire du domaine.
-Si cette option n&apos;est pas cochée, les propriétaires ne peuvent pas revendre leur parcelle.
-Si cette option est cochée, les propriétaires sont libres de revendre leur parcelle.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver les scripts" name="HelpRegionDisableScripts">
-		Lorsque la performance d&apos;une région est faible, cela peut venir d&apos;un script. Ouvrez la section Statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les objets scriptés les plus consommateurs. Vous verrez le nom et l&apos;emplacement des scripts éventuellement à l&apos;origine du problème.
-
-Si vous cochez la case Désactiver les scripts et que vous appuyez sur Appliquer, tous les scripts de cette région seront temporairement désactivés. Vous devrez peut-être faire cela le temps d&apos;arriver à l&apos;endroit su script en cause. Une fois sur place, assurez-vous que le script est bien à l&apos;origine du problème. Pour cela, vous devrez peut-être contacter le propriétaire du script ou bien supprimer ou renvoyer l&apos;objet.
-Décochez la case Désactiver le script, puis cliquez sur Appliquer pour réactiver tous les scripts dans la région.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver les collisions" name="HelpRegionDisableCollisions">
-		Des objets physiques peuvent fortement réduire les performances d&apos;une région.
-Ouvrez la barre de statistiques (Ctrl+Maj+1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les collisions les plus consommatrices.
-Vous verrez le nom et l&apos;emplacement des objets physiques éventuellement à l&apos;origine du problème.
-
-Si vous décochez la case Désactiver les collisions et que vous cliquez sur Appliquer, toutes les collisions entre objets seront désactivées. Vous pourrez avoir besoin de cette fonction le temps d&apos;arriver à l&apos;emplacement des objets en cause. Une fois sur place, vérifiez que l&apos;&apos;objet est bien responsable du problème (entre-t-il sans cesse en collision avec d&apos;autres objets ?) Pour cela, vous devrez peut-être contacter le propriétaire de l&apos;objet ou bien supprimer ou renvoyer l&apos;objet.
-Décochez la case Désactiver les collisions, puis cliquez sur le bouton Appliquer pour réactiver les collisions dans la région.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Désactiver la physique" name="HelpRegionDisablePhysics">
-		L&apos;option Désactiver la physique est similaire à l&apos;option Désactiver les collisions sauf qu&apos;elle englobe tous les effets liés à la physique. Cela signifie que les objets n&apos;entreront plus en collision et que les avatars ne pourront plus bouger.
-
-Vous ne devriez utiliser cette option que lorsque l&apos;option Désactiver les collisions n&apos;améliore pas sufisamment la performance de la région pour résoudre un problème de physique ou trouver les objets entrant en collision.
-
-Une fois que vous avez fini, n&apos;oubliez pas de réactiver les propriétés physiques sinon les avatars ne pourront pas bouger.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Afficher les collisions les plus consommatrices" name="HelpRegionTopColliders">
-		Montre une liste des objets générant le plus de collisions avec d&apos;autres objets. Ces objets peuvent ralentir les performances de votre région. Sélectionnez Affichage &gt; Statistiques et regardez sous Simulator &gt; Time &gt; Sim Time (Physics) pour voir si le temps du moteur physique est au dessus de 20 ms.
-	</notification>
-	<notification label="Afficher les objets scriptés les plus consommateurs" name="HelpRegionTopScripts">
-		Dresse une liste des objets dont les scripts consomment le plus de ressources. Ces objets peuvent ralentir la performance de votre région.
-Sélectionnez Affichage &gt; Statistiques et regardez sous Simulator &gt; Time &gt; Script Time pour voir si le temps des scripts est au dessus de 25 ms.
-	</notification>
-	<notification label="Redémarrer la région" name="HelpRegionRestart">
-		Redémarre le serveur en charge de la région après deux minutes d&apos;avertissement. Tous les résidents dans cette région seront déconnectés. Les données de la région seront sauvegardées et réapparaîtront au bout de 90 secondes.
-
-Le redémarrage de la région ne permet pas de résoudre la plupart des problèmes de performance. Les redémarrages ne doivent avoir lieu qu&apos;en dernier recours.
-	</notification>
-	<notification label="Niveau de l&apos;eau" name="HelpRegionWaterHeight">
-		Il s&apos;agit de la hauteur de l&apos;eau en mètres.
-Si ce paramètre est différent de 20 et que vous avez de l&apos;eau adjacente au bord du monde ou de l&apos;eau « vide », il y aura un espace vide visible.
-
-
-Valeur par défaut : 20
-	</notification>
-	<notification label="Surélévation du terrain" name="HelpRegionTerrainRaise">
-		Il s&apos;agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent surélever leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : 4
-	</notification>
-	<notification label="Abaisser le terrain" name="HelpRegionTerrainLower">
-		Il s&apos;agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent abaisser leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : -4
-	</notification>
-	<notification label="Charger le terrain au format RAW" name="HelpRegionUploadRaw">
-		Ce bouton permet de charger un fichier .RAW dans la région où vous vous trouvez.
-Ce fichier doit avoir les bonnes dimensions (RGB, 256 x 256) et 13 canaux. Le meilleur moyen de créer un fichier terrain est de télécharger le fichier RAW existant. Un bon moyen est de modifier le canal rouge (hauteur terrain) et de le charger.
-
-Le chargement peut prendre jusqu&apos;à 45 secondes. Veuillez noter que le chargement d&apos;un fichier terrain ne déplacera pas les objets qui se trouvent sur le terrain, mais seulement le terrain et les droits associés aux parcelles. Certains objets risquent d&apos;aller sous la terre.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d&apos;une région, consultez l&apos;Aide F1.
-	</notification>
-	<notification label="Télécharger le terrain au format RAW" name="HelpRegionDownloadRaw">
-		Ce bouton permet de télécharger un fichier contenant les données relatives à la hauteur du terrain, dimensions de la parcelle, les mises en vente ainsi que certains droits relatifs à la parcelle pour cette région. Lorsque vous ouvrez le fichier avec un programme tel que Photoshop, vous devez indiquer les dimensions du document qui sont les suivantes : RGB, 256 x 256 avec 13 canaux. Le fichier terrain ne peut pas être ouvert différemment.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d&apos;une région, consultez l&apos;Aide F1.
-	</notification>
-	<notification label="Utiliser le soleil du domaine" name="HelpRegionUseEstateSun">
-		Si vous cochez cette case, la position du soleil dans cette région sera la même que dans le reste du domaine.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Soleil fixe" name="HelpRegionFixedSun">
-		Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Figer le terrain" name="HelpRegionBakeTerrain">
-		Ce bouton permet d&apos;enregistrer la forme actuelle du terrain comme nouvelle forme par défaut pour la région. Une fois figé, le terrain peut reprendre la forme enregistrée à partir de l&apos;option Rétablir le terrain à la section Modifer le terrain. Le terrain figé est aussi le point de référence pour les limites de surélévation et d&apos;abaissement.
-	</notification>
-	<notification label="Gérants du domaine" name="HelpEstateEstateManager">
-		Un gérant de domaine est un résident chargé du contrôle de la région et des paramètres du domaine. Un gérant de domaine peut modifier tous les paramètres, mais ne peut pas charger, télécharger ni figer de terrain. Un des pouvoirs principaux du gérant est de bannir ou d&apos;autoriser un résident sur votre domaine.
-
-Seuls les propriétaires de domaine peuvent ajouter ou supprimer des gérants de domaine. Lorsque vous choisissez un gérant de domaine, prenez un résident en qui vous avez confiance car vous serez en quelque sorte responsable de ses actions.
-	</notification>
-	<notification label="Utiliser le temps universel" name="HelpEstateUseGlobalTime">
-		Cette case permet au soleil de votre domaine de suivre la position du soleil sur les domaines Linden du continent.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Soleil fixe" name="HelpEstateFixedSun">
-		Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-	</notification>
-	<notification label="Accès public" name="HelpEstateExternallyVisible">
-		Cette option vous permet de choisir quels résidents d&apos;autres domaines peuvent pénétrer sur votre domaine sans devoir être ajoutés à la liste d&apos;accès.
-
-Valeur par défaut : activé
-	</notification>
-	<notification label="Autoriser la téléportation directe" name="HelpEstateAllowDirectTeleport">
-		Lorsqu&apos;elle est cochée, cette option permet aux résidents d&apos;être téléportés à n&apos;importe quel endroit sur votre domaine.  Lorsque cette option n&apos;est pas cochée, les résidents sont téléportés au téléhub le plus proche.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Autoriser l&apos;accès" name="HelpEstateAllowResident">
-		L&apos;accès à ce domaine sera réservé aux résidents figurant dans cette liste et aux groupes ci-dessous.
-Cette option n&apos;est disponible que lorsque la case Accès public est décochée.
-	</notification>
-	<notification label="Autoriser l&apos;accès de groupe" name="HelpEstateAllowGroup">
-		L&apos;accès à ce domaine sera réservé aux groupes figurant dans cette liste et aux résidents ci-dessous.  Cette option n&apos;est disponible que lorsque la case Accès public est décochée.
-	</notification>
-	<notification label="Adresse e-mail où signaler une infraction" name="HelpEstateAbuseEmailAddress">
-		Si vous utilisez une adresse e-mail valide, les rapports d&apos;infraction de ce domaine iront à cette adresse.
-Si vous laissez ce champ vide, les rapports d&apos;infraction seront envoyés à Linden Lab uniquement.
-	</notification>
-	<notification label="Refuser l&apos;accès" name="HelpEstateBanResident">
-		Les résidents figurant sur cette liste ne peuvent pas pénétrer sur votre domaine, quels que soient les autres paramètres.
-	</notification>
-	<notification label="Autoriser les chats vocaux" name="HelpEstateVoiceChat">
-		Les parcelles de ce domaine peuvent avoir leurs propres canaux vocaux, ce qui permet aux résidents de communiquer avec leurs voisins.
-
-Valeur par défaut : désactivé
-	</notification>
-	<notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
-		Cette version de [APP_NAME] n&apos;est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
-	</notification>
-	<notification label="Règlement du domaine" name="HelpEstateCovenant">
-		Définir un règlement pour le domaine vous permet de vendre les parcelles de ce domaine. S&apos;il n&apos;y a pas de règlement, vous ne pouvez pas vendre le terrain. Si vous ne souhaitez pas indiquer de règlement ou donner de conseils aux acheteurs, laissez la section relative au règlement vide.
-
-Un règlement sert à communiquer des règles, des lignes directrices ou informations culturelles, ou simplement à expliquer vos attentes à un acheteur potentiel. Il peut s&apos;agir de régulations concernant la construction, les options de paiement ou tout autre information que vous souhaitez faire passer au résident avant que l&apos;achat n&apos;ait lieu.
-
-L&apos;acheteur est tenu  d&apos;accepter le règlement en cochant une case avant de pouvoir finaliser l&apos;achat. Les règlements, lorsqu&apos;ils existent, apparaissent toujours dans la boîte de dialogue À propos du terrain.
-	</notification>
-	<notification label="Impossible d&apos;acheter des objets" name="BuyObjectOneOwner">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOnly">
-		Impossible d&apos;acheter les contenus de plus d&apos;un objet à la fois.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOwner">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu&apos;un seul objet.
-	</notification>
-	<notification name="BuyOriginal">
-		Acheter l&apos;objet original pour [PRICE] L$ à [PRICE] ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		Acheter l&apos;objet original pour [PRICE] L$ ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		Acheter une copie pour [PRICE] L$ à [OWNER] ?
-L&apos;objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		Acheter une copie pour [PRICE] L$ ?
-L&apos;objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		Acheter des contenus pour [PRICE] L$ à [OWNER] ?
-Ils seront copiés dans votre inventaire.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		Acheter des contenus pour [PRICE] L$ ?
-Ils seront copiés dans votre inventaire.
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
-		<form name="form">
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		Remarque :
-vous avez mis à jour l&apos;emplacement de ce favori mais les autres détails resteront inchangés.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		Vous avez sélectionné des objets non copiables.
-Ces objets seront déplacés dans votre inventaire et non pas copiés.
-
-Déplacer les objets de l&apos;inventaire ?
-		<usetemplate ignoretext="Lors du transfert d&apos;un inventaire non copiable depuis des objets" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		Vous avez sélectionné des objets de l&apos;inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
-L&apos;objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
-
-Déplacer les objets de l&apos;inventaire ?
-		<usetemplate ignoretext="Lors du transfert d&apos;un inventaire non copiable depuis des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		Avertissement : l&apos;action du clic &apos;Payer l&apos;objet&apos; a été défini mais ne fonctionnera que si un script est ajouté avec l&apos;event money().
-		<form name="form">
-			<ignore name="ignore" text="Lors du paramétrage de la fonction Payer sur des objets sans événement monétaire"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		Vous n&apos;êtes autorisé à copier aucun élément dans cet objet.
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		Aller sur le site de [SECOND_LIFE] pour consulter l&apos;historique de votre compte ?
-		<usetemplate ignoretext="Lors du chargement de la page web contenant l&apos;historique de votre compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		Visiter les pages d&apos;aide de [SECOND_LIFE] ?
-		<usetemplate ignoretext="Lors de la visite des pages d&apos;aide de [SECOND_LIFE]" name="okcancelignore" notext="Annuler" yestext="Aller"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		Êtes-vous certain de vouloir quitter ?
-		<usetemplate ignoretext="Lorsque vous quittez [APP_NAME]" name="okcancelignore" notext="Continuer" yestext="Quitter"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		Utilisez cet outil pour signaler des infractions aux Conditions d&apos;utilisation et aux Règles de la communauté. Voir :
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Lorsqu&apos;elles sont signalées, toutes les infractions aux Conditions d&apos;utilisation et aux Règles de la communauté font l&apos;objet d&apos;une enquête et sont résolues. Pour accéder aux détails de la résolution d&apos;un incident, allez sur :
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
-
-Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s&apos;occuper de tous les rapports envoyés à partir de cette région. Linden Lab n&apos;enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
-
-Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
-(Les réglements sont visibles à partir du menu Monde &gt; À propos du terrain.)
-
-La résolution de ce rapport ne s&apos;applique qu&apos;à cette région ; L&apos;accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l&apos;accès à l&apos;ensemble de [SECOND_LIFE].
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		Veuillez choisir une catégorie pour ce rapport d&apos;infraction.
-Le choix d&apos;une catégorie nous permet de traiter les rapports d&apos;infraction plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		Veuillez saisir le nom du contrevenant.
-Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		Veuillez indiquer l&apos;endroit où l&apos;infraction a eu lieu.
-Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		Veuillez saisir un récapitulatif de l&apos;infraction.
-Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		Veuillez saisir une description détaillée de l&apos;infraction.
-Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l&apos;incident que vous signalez.
-Les descriptions précises nous permettent de traiter les rapports plus rapidement.
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		Cher résident,
-
-Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
-
-(1) Remplissez un rapport d&apos;infraction. Vous pouvez soumettre un rapport d&apos;infraction si vous pensez qu&apos;un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l&apos;encontre du résident non respectueux des Conditions d&apos;utilisation ou des règles de la communauté. Sachez toutefois que l&apos;équipe chargée des infractions ne supprimera pas de contenu à l&apos;intérieur de [SECOND_LIFE].
-
-(2) Demandez à ce que du contenu à l&apos;intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d&apos;infraction valide, tel que fourni dans notre Règlement contre les violations des droit d&apos;auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
-
-Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport.  Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
-
-Merci,
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
-[COMPONENTS]
-	</notification>
-	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
-		Vous avez déjà un objet sur cette partie du corps.
-Voulez-vous le remplacer par l&apos;objet sélectionné ?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Lors du remplacement de pièces-jointes existantes"/>
-			<button ignore="Remplacer automatiquement" name="Yes" text="OK"/>
-			<button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
-		</form>
-	</notification>
-	<notification label="Réponse si occupé(e)" name="BusyModePay">
-		Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
-
-Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="Lorsque vous envoyez de l&apos;argent à une personne en mode Occupé"/>
-			<button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
-			<button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente  ?
-		<usetemplate ignoretext="Lorsque vous videz la corbeille de l&apos;inventaire" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		Êtes-vous certain de vouloir vider le cache de votre navigateur ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		Êtes-vous certain de vouloir supprimer vos cookies ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
-		<usetemplate ignoretext="Losque vous videz le dossier Objets trouvés dans votre inventaire" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="CopySLURL">
-		La SLurl suivante a été copiée dans votre presse-papiers :
- [SLURL]
-
-Mettez-la dans une page web pour permettre aux autres résidents d&apos;accéder facilement à cet endroit ou bien collez-la dans la barre d&apos;adresse de votre navigateur.
-		<form name="form">
-			<ignore name="ignore" text="Lorsque vous copiez une SLurl dans votre presse-papier"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		Ce menu permet de contrôler la taille de la fenêtre et la résolution, ainsi que la qualité des graphiques client. Les préférences de l&apos;interface graphique vous permettent de choisir entre 4 niveaux de graphiques : Faible, Moyen, Élevé et Ultra. Personnalisez vos options graphiques en cliquant sur le bouton Personnaliser et en changeant les paramètres suivants :
-
-Effets : active ou désactive les différents types de shaders pixels.
-
-Objets reflétés : définit le type d&apos;objets reflétés dans l&apos;eau.
-
-Rendu de l&apos;avatar : définit les options qui influent sur la manière dont le client rend les avatars.
-
-Limite d&apos;affichage : la distance à laquelle vous voyez les objets s&apos;afficher dans la scène.
-
-Nombre de particules max. : définit le nombre maximum de particules que vous pouvez voir à la fois sur votre écran.
-
-Qualité post-traitement : définit la résolution du rayonnement.
-
-Détails des rendus : définit le niveau de détail ou le nombre de polygones utilisés dans le rendu de certains objets. Une valeur plus élevée prendra plus de temps pour apparaître, mais permettra d&apos;avoir des objets plus détaillés.
-
-Sources lumineuses : définit les types de lumières que vous souhaitez faire apparaître.
-
-Rendu du terrain : définit le niveau de détail que vous souhaitez utiliser dans la texture du terrain.
-	</notification>
-	<notification name="WLSavePresetAlert">
-		Voulez-vous écraser l&apos;option précédemment enregistrée ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		Voulez-vous supprimer [SKY] ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-	</notification>
-	<notification name="WLMissingSky">
-		Une dossier semble manquer au Cycle du jour : [SKY].
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
-		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="HelpEditSky">
-		Pour créer et sauvegarder plusieurs ciels, utilisez les curseurs WindLight.
-	</notification>
-	<notification name="HelpEditDayCycle">
-		Choisissez quel ciel apparaît au cours de la journée.
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		Ces paramètres permettent de modifier l&apos;environnement local sur votre ordinateur. Pour que vous ayez accès à tous les paramètres, votre carte graphique doit prendre en charge les effets atmosphériques.
-
-Pour changer les différentes phases de la journée dans le client, utilisez le curseur Heure de la journée.
-
-Le curseur Couverture nuageuse permet de contrôler le nombre de nuages dans le ciel.
-
-L&apos;option Couleur de l&apos;eau vous permet de modifier la couleur de l&apos;eau grâce au sélecteur de couleurs.
-
-Le curseur Brouillard dans l&apos;eau permet de contrôler la densité du brouillard sous l&apos;eau.
-
-Pour synchroniser l&apos;heure du jour sur celle de la région, cliquez sur Utiliser heure domaine.
-
-En cliquant sur le bouton Ciel Avancé, vous aurez accès à tous les réglages relatifs au ciel.
-
-En cliquant sur le bouton Eau Avancée, vous aurez accès à tous les réglages relatifs à l&apos;eau.
-	</notification>
-	<notification name="HelpDayCycle">
-		L&apos;éditeur du cycle du jour vous permet de contrôler le ciel au cours du cycle jour/nuit de [SECOND_LIFE]. C&apos;est ce même cycle qui est contrôlé par le curseur Heure de la journée dans l&apos;éditeur d&apos;environnement basique.
-
-L&apos;éditeur du jour fonctionne grâce au réglage d&apos;images-clés. Ces images-clés sont représentées par les marques grises sur la ligne du temps et ont des préréglages qui leurs sont associées. Au cours de la journée et de la nuit, le ciel WindLight s&apos;anime en passant d&apos;une clé à l&apos;autre.
-
-La flèche jaune au dessus de la ligne du temps représente votre vue actuelle, basée sur l&apos;heure de la journée. Cliquez et faites glisser pour voir l&apos;animation au cours de votre journée. Ajoutez ou supprimez des clés en appuyant sur les boutons Ajouter clé ou Supprimer clé, à droite de la ligne du temps.
-
-Vous pouvez définir la position d&apos;une clé en la faisant glisser le long de la ligne du temps ou en définissant manuellement ses valeurs dans la section Réglages des images-clés. Dans cette même section, vous pouvez associer chaque clé au préréglage WindLight respectif.
-
-La Durée du cycle contrôle la durée d&apos;une « journée ». Si vous choisissez une valeur basse (2mn par exemple), cela signifie que toutes les animations de votre journée de 24h se dérouleront en 2mn seulement ! Une fois satisfait de vos choix, utilisez les boutons Jouer et Stop ! pour prévisualiser les résultats. Pour voir l&apos;animation, vous pouvez aussi bouger la flèche jaune au dessus de la ligne du temps. Si vous sélectionnez l&apos;option Utiliser heure domaine, vous synchronisez la durée de votre journée et votre heure avec celle du cycle du jour du domaine.
-
-Une fois que vous êtes satisfait de votre Cycle du jour, vous pouvez le sauvegarder et le charger grâce aux boutons Enregistrer jour test et Charger Jour Test. Veuillez noter que pour l&apos;instant, nous ne pouvez avoir qu&apos;un seul Cycle du jour.
-	</notification>
-	<notification name="HelpBlueHorizon">
-		Utilisez les curseurs Rouge/Vert/Bleu (RVB) pour ajuster la couleur du ciel. Pour déplacer les trois curseurs en même temps, utilisez le curseur Intensité.
-	</notification>
-	<notification name="HelpHazeHorizon">
-		Le paramètre Quantité de brume est l&apos;un des plus utiles pour ajuster l&apos;exposition lumineuse de la scène.
-Il permet de simuler de nombreux paramètres d&apos;exposition, tels que les voiles blancs créés par le soleil ou des lumières plus foncées.
-	</notification>
-	<notification name="HelpBlueDensity">
-		La Densité du bleu affecte la saturation générale des couleurs du ciel et du brouillard. Si vous déplacez le curseur Intensité (I) vers la droite, les couleurs deviennent plus vives et plus vibrantes. Si vous le déplacez complètement à gauche, les couleurs deviennent plus fades, puis finalement noires et blanches. Pour paramétrer avec précision la couleur du ciel, vous pouvez contrôler chacun des éléments de la saturation à l&apos;aide des curseurs Rouge/Vert/Bleu (RVB).
-	</notification>
-	<notification name="HelpHazeDensity">
-		Le paramètre Densité de la brume permet de contrôler le niveau de brume grisâtre dans l&apos;atmosphère. Ce paramètre est utile pour simuler les scènes dans lesquelles il y a beaucoup de fumée et de substances polluantes émises par l&apos;homme. Il est également utile pour simuler le brouillard et la brume.
-	</notification>
-	<notification name="HelpDensityMult">
-		Utilisez le Multiplicateur de densité pour modifier la densité atmosphérique générale. Une valeur basse donne l&apos;impression d&apos;un air « léger » alors qu&apos;une valeur élevée donne l&apos;impression d&apos;un air « lourd » et enfumé.
-	</notification>
-	<notification name="HelpDistanceMult">
-		Ajuste la distance perçue par WindLight.
-La valeur zéro désactive l&apos;influence de WindLight sur le terrain et les objets.
-Les valeurs supérieures à 1 simulent des distances plus importantes pour des effets atmosphériques plus épais.
-	</notification>
-	<notification name="HelpMaxAltitude">
-		L&apos;Altitude max. ajuste les calculs de WindLight lors de la computation de la lumière atmosphérique. Quand la fin de la journée approche, il est utile pour ajuster la « profondeur » du coucher de soleil.
-	</notification>
-	<notification name="HelpSunlightColor">
-		Ajuste la couleur et l&apos;intensité de la lumière directe de la scène.
-	</notification>
-	<notification name="HelpSunAmbient">
-		Ajuste la couleur et l&apos;intensité de la lumière atmosphérique ambiante.
-	</notification>
-	<notification name="HelpSunGlow">
-		Le curseur Taille contrôle la taille du soleil.
-Le curseur Netteté permet de rendre le soleil plus ou moins flou dans le ciel.
-	</notification>
-	<notification name="HelpSceneGamma">
-		Ajuste la distribution de clair et de foncé sur l&apos;écran.
-	</notification>
-	<notification name="HelpStarBrightness">
-		Vous permet de contrôler l&apos;intensité des étoiles dans le ciel.
-	</notification>
-	<notification name="HelpTimeOfDay">
-		Contrôle la position du soleil dans le ciel.
-Même chose que l&apos;élévation.
-	</notification>
-	<notification name="HelpEastAngle">
-		Contrôle la position du soleil dans le ciel.
-Même chose que l&apos;azimut.
-	</notification>
-	<notification name="HelpCloudColor">
-		Modifie la couleur des nuages. Il est recommandé de laisser les nuages en blanc mais vous pouvez aussi faire preuve de créativité...
-	</notification>
-	<notification name="HelpCloudDetail">
-		Contrôle le détail de l&apos;image placée sur l&apos;image du nuage principal. X et Y contrôlent sa position. D (Densité) permet de rendre les nuages plus ou moins pleins ou plus ou moins fracturés.
-	</notification>
-	<notification name="HelpCloudDensity">
-		Vous permet de contrôler la position des nuages avec les curseurs X et Y ainsi que leur densité avec le curseur D.
-	</notification>
-	<notification name="HelpCloudCoverage">
-		Contrôle la surface du ciel couverte par les nuages.
-	</notification>
-	<notification name="HelpCloudScale">
-		Contrôle l&apos;échelle de l&apos;image des nuages sur le dôme du ciel.
-	</notification>
-	<notification name="HelpCloudScrollX">
-		Contrôle la vitesse des nuages sur l&apos;axe des X.
-	</notification>
-	<notification name="HelpCloudScrollY">
-		Contrôle la vitesse des nuages sur l&apos;axe des Y.
-	</notification>
-	<notification name="HelpClassicClouds">
-		Cochez cette option pour utiliser les anciens nuages de [SECOND_LIFE] en plus des nuages WindLight.
-	</notification>
-	<notification name="HelpWaterFogColor">
-		Permet de sélectionner la couleur du brouillard sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		Contrôle la densité du brouillard sous l&apos;eau, ainsi que votre visibilité.
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		Modifie l&apos;effet créé par l&apos;option Densité du brouillard pour contrôler votre visibilité quand votre avatar est sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterGlow">
-		Contrôle l&apos;éclat de l&apos;eau à la surface.
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		Contrôle l&apos;échelle des trois vaguelettes qui forment l&apos;eau.
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		Contrôle la quantité de lumière réfléchie à des angles différents.
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		Contrôle l&apos;intensité de la lumière réfléchie.
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		Contrôle la quantité de lumière réfractée lorsque votre avatar regarde au dessus de l&apos;eau.
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		Contrôle la quantité de lumière réfractée lorsque votre avatar est sous l&apos;eau.
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		Contrôle le mélange reflets/vagues.
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		Contrôle quelle normal map est posée sur l&apos;eau pour déterminer la réflection/réfraction.
-	</notification>
-	<notification name="HelpWaterWave1">
-		Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l&apos;axe des X et l&apos;axe des Y.
-	</notification>
-	<notification name="HelpWaterWave2">
-		Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l&apos;axe des X et l&apos;axe des Y.
-	</notification>
-	<notification name="NewSkyPreset">
-		Nommez le nouveau ciel.
-		<form name="form">
-			<input name="message">
-				Nouveau préréglage
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		Ce préréglage existe déjà !
-	</notification>
-	<notification name="NewWaterPreset">
-		Nommez ce nouveau préréglage d&apos;eau.
-		<form name="form">
-			<input name="message">
-				Nouveau préréglage
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		Ce préréglage existe déjà !
-	</notification>
-	<notification name="WaterNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		Vous devez terminer votre session de chat avec [NAME].
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		Les objets qui font partie d&apos;une pièce-jointe ne peuvent pas être achetés.
-	</notification>
-	<notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails">
-		Accepter cette requête donne au script l&apos;autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l&apos;objet doit supprimer l&apos;objet ou bien réinitialiser les scripts dans l&apos;objet.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		Voulez-vous automatiquement porter l&apos;habit que vous créez ?
-		<usetemplate ignoretext="Porter automatiquement" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		Pour que vous puissiez accéder à cette parcelle, votre âge doit être vérifié.
-Voulez-vous aller sur le site de [SECOND_LIFE] pour vérifier votre âge ?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Avertir si l&apos;âge n&apos;a pas été vérifié" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		Avant de pouvoir pénétrer sur cette parcelle, vous devez enregistrer vos informations de paiement.
-Voulez-vous aller sur le site de [SECOND_LIFE] pour enregistrer ces informations ?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=fr
-		</url>
-		<usetemplate ignoretext="Avertir si les informations de paiement ne sont pas fournies" name="okcancelignore" notext="Non" yestext="Oui"/>
-	</notification>
-	<notification name="MissingString">
-		The string [STRING_NAME] is missing from strings.xml
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		Annulé
-	</notification>
-	<notification name="CancelledSit">
-		Action annulée
-	</notification>
-	<notification name="CancelledAttach">
-		Attachement annulé
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		Habits et parties du corps manquants remplacés par les éléments par défaut.
-	</notification>
-	<notification name="GroupNotice">
-		Sujet : [SUBJECT], Message : [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] est connecté(e)
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] est déconnecté(e)
-	</notification>
-	<notification name="AddSelfFriend">
-		Vous ne pouvez pas devenir ami avec vous-même.
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		Importation de photos SL et Web en cours...
-(prend environ 5 minutes.)
-	</notification>
-	<notification name="UploadPayment">
-		Le chargement a coûté [AMOUNT] L$.
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Photo Web importée
-	</notification>
-	<notification name="UploadSnapshotDone">
-		Photo SL importée
-	</notification>
-	<notification name="TerrainDownloaded">
-		Fichier terrain.raw téléchargé
-	</notification>
-	<notification name="GestureMissing">
-		Geste [NAME] absent de la base de données.
-	</notification>
-	<notification name="UnableToLoadGesture">
-		Impossible de charger le geste [NAME].
-Merci de réessayer.
-	</notification>
-	<notification name="LandmarkMissing">
-		Repère absent de la base de données.
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		Impossible de charger le repère. Merci de réessayer.
-	</notification>
-	<notification name="CapsKeyOn">
-		La touche Verr.maj est activée.
-Ce mode modifie le mot de passe que vous saisissez, vous devriez le quitter.
-	</notification>
-	<notification name="NotecardMissing">
-		Note absente de la base de données.
-	</notification>
-	<notification name="NotecardNoPermissions">
-		Permissions insuffisantes pour voir la note.
-	</notification>
-	<notification name="RezItemNoPermissions">
-		Permissions insuffisantes pour rezzer l&apos;objet.
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		Impossible de lire les données de la note actuellement.
-	</notification>
-	<notification name="ScriptMissing">
-		Script absent de la base de données.
-	</notification>
-	<notification name="ScriptNoPermissions">
-		Permissions insuffisantes pour voir le script.
-	</notification>
-	<notification name="UnableToLoadScript">
-		Impossible de charger le script. Merci de réessayer.
-	</notification>
-	<notification name="IncompleteInventory">
-		Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
-Merci d&apos;essayer à nouveau dans une minute.
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		Vous ne pouvez pas modifier de catégories protégées.
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		Vous ne pouvez pas supprimer de catégories protégées.
-	</notification>
-	<notification name="OfferedCard">
-		Vous avez offert votre carte de visite à [FIRST] [LAST]
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		Achat impossible durant le chargement de l&apos;objet.
-Merci de réessayer.
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		Impossible de lier durant le chargement de l&apos;objet.
-Merci de réessayer.
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		Impossible d&apos;acheter simultanément des objets de propriétaires différents. Veuillez sélectionner un seul objet.
-	</notification>
-	<notification name="ObjectNotForSale">
-		Cet objet ne semble pas à vendre.
-	</notification>
-	<notification name="EnteringGodMode">
-		Activation du mode divin : niveau [LEVEL]
-	</notification>
-	<notification name="LeavingGodMode">
-		Désactivation du mode divin : niveau [LEVEL]
-	</notification>
-	<notification name="CopyFailed">
-		Copie impossible, droits insuffisants.
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME] a accepté votre envoi.
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME] a refusé votre envoi.
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		Votre carte de visite a été acceptée.
-	</notification>
-	<notification name="CallingCardDeclined">
-		Votre carte de visite a été refusée.
-	</notification>
-	<notification name="TeleportToLandmark">
-		A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Repères (Landmarks).
-Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
-	</notification>
-	<notification name="TeleportToPerson">
-		A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
-Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
-Veuillez sélectionner un terrain plus petit.
-	</notification>
-	<notification name="SearchWordBanned">
-		Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
-	</notification>
-	<notification name="NoContentToSearch">
-		Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
-	</notification>
-	<notification name="GroupVote">
-		[NAME] a proposé un vote pour :
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="Voter"/>
-			<button name="Later" text="Plus tard"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		Avis d&apos;événement :
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="Téléporter"/>
-			<button name="Description" text="Description"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		Tous les objets de cette parcelle qui seront transférés à l&apos;acheteur sont maintenant mis en surbrillance.
-
-* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
-		<form name="form">
-			<button name="Done" text="Transfert effectué"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		Gestes désactivés ayant le même mot-clé :
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Le logiciel Apple QuickTime ne semble pas installé sur votre système.
-Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
-	</notification>
-	<notification name="OtherObjectsReturned">
-		Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
-	</notification>
-	<notification name="GroupObjectsReturned">
-		Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l&apos;inventaire de leur propriétaire.
-Les objets donnés transférables ont étés renvoyés à leur propriétaire.
-Les objets non transférables donnés au groupe ont étés supprimés.
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
-	</notification>
-	<notification name="NotSafe">
-		Les dégâts sont autorisés sur ce terrain (« non sécurisé »).
-Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
-	</notification>
-	<notification name="NoFly">
-		Le vol est interdit sur ce terrain (« pas de vol »).
-Vous ne pouvez pas voler ici.
-	</notification>
-	<notification name="PushRestricted">
-		Les bousculades sont interdites sur ce terrain.
-Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
-	</notification>
-	<notification name="NoVoice">
-		La voix est désactivée sur ce terrain.
-	</notification>
-	<notification name="NoBuild">
-		Le mode construction sur ce terrain est désactivé (« pas de construction »).
-Vous ne pouvez pas créer d&apos;objets ici.
-	</notification>
-	<notification name="ScriptsStopped">
-		Un administrateur a temporairement stoppé les scripts dans cette région.
-	</notification>
-	<notification name="ScriptsNotRunning">
-		Aucun script ne fonctionne dans cette région.
-	</notification>
-	<notification name="NoOutsideScripts">
-		Les scripts externes sont désactivés sur ce terrain (« pas de scripts externes »).
-Aucun script n&apos;est exécuté à part ceux du propriétaire du terrain.
-	</notification>
-	<notification name="ClaimPublicLand">
-		Vous ne pouvez réclamer qu&apos;un terrain public dans la région où vous vous trouvez actuellement.
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
-
-Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuillez consulter les pages d&apos;aide.
-	</notification>
-	<notification name="URBannedFromRegion">
-		Vous avez été banni de cette région.
-	</notification>
-	<notification name="NoTeenGridAccess">
-		Votre compte ne peut pas se connecter à cette région du Teen grid.
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Vous ne pouvez pas retourner sur Help Island.
-Pour répéter le didacticiel, veuillez aller sur Help Island Public.
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		Vous n&apos;avez pas le statut de paiement approprié pour pénétrer dans cette région.
-	</notification>
-	<notification name="MustGetAgeRegion">
-		Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge.
-	</notification>
-	<notification name="MustGetAgeParcel">
-		Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
-	</notification>
-	<notification name="NoDestRegion">
-		Région de destination introuvable.
-	</notification>
-	<notification name="NotAllowedInDest">
-		Vous n&apos;êtes pas autorisé dans cette région.
-	</notification>
-	<notification name="RegionParcelBan">
-		Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
-	</notification>
-	<notification name="TelehubRedirect">
-		Vous avez été redirigé vers un téléhub.
-	</notification>
-	<notification name="CouldntTPCloser">
-		Il n&apos;a pas été possible de vous téléporter vers une destination plus proche.
-	</notification>
-	<notification name="TPCancelled">
-		Téléportation annulée.
-	</notification>
-	<notification name="FullRegionTryAgain">
-		La région dans laquelle vous essayez de pénétrer est pleine actuellement.
-Veuillez réessayer dans quelques minutes.
-	</notification>
-	<notification name="GeneralFailure">
-		Panne générale.
-	</notification>
-	<notification name="RoutedWrongRegion">
-		Dirigé vers la mauvaise région. Merci de réessayer.
-	</notification>
-	<notification name="NoValidAgentID">
-		ID agent non valide.
-	</notification>
-	<notification name="NoValidSession">
-		ID de session non valide.
-	</notification>
-	<notification name="NoValidCircuit">
-		Aucun code de circuit valide.
-	</notification>
-	<notification name="NoValidTimestamp">
-		Timestamp non valide.
-	</notification>
-	<notification name="NoPendingConnection">
-		Impossible de créer la connexion en attente.
-	</notification>
-	<notification name="InternalUsherError">
-		Erreur interne lors de la tentative de connexion.
-	</notification>
-	<notification name="NoGoodTPDestination">
-		Impossible de trouver un lieu de téléportation valide dans cette région.
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		Une erreur interne est survenue lors de la résolution des coodonnées de la région.
-	</notification>
-	<notification name="NoValidLanding">
-		Impossible de trouver un point d&apos;atterrissage valide.
-	</notification>
-	<notification name="NoValidParcel">
-		Aucune parcelle valide n&apos;a été trouvée.
-	</notification>
-	<notification name="ObjectGiveItem">
-		Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		L&apos;objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-		<form name="form">
-			<button name="Keep" text="Garder"/>
-			<button name="Discard" text="Jeter"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="Rejoindre"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Info" text="Infos"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME] vous propose de le/la rejoindre par téléportation :
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="Téléporter"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="Plus tard"/>
-			<button name="GoNow..." text="Y aller maintenant..."/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME] vous demande de devenir son ami(e).
-
-[MESSAGE]
-
-(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME] vous demande de devenir son ami.
-
-(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME] a accepté votre amitié.
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME] a refusé votre amitié.
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST] vous offre sa carte de visite.
-Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		La région va redémarrer dans [MINUTES] minutes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-	</notification>
-	<notification name="RegionRestartSeconds">
-		La région va redémarrer dans [SECONDS] secondes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-	</notification>
-	<notification name="LoadWebPage">
-		Charger cette page web [URL] ?
-
-[MESSAGE]
-
-Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
-		<form name="form">
-			<button name="Gotopage" text="Charger"/>
-			<button name="Cancel" text="Annuler"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		La recherche du [TYPE] dans la base de données a échoué.
-	</notification>
-	<notification name="FailedToFindWearable">
-		La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
-	</notification>
-	<notification name="InvalidWearable">
-		L&apos;objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire.  Pour porter cet objet, veuillez télécharger une mise à jour du client.
-	</notification>
-	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à &apos;[NAME]&apos;, aimerait :
-
-[QUESTIONS]
-Acceptez-vous ?
-		<form name="form">
-			<button name="Yes" text="Oui"/>
-			<button name="No" text="Non"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		[OBJECTNAME], un objet appartenant à [NAME], aimerait :
-
-[QUESTIONS]
-Si vous n&apos;avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête. Pour plus d&apos;informations, cliquez sur le bouton Détails.
-
-Accepter cette requête ?
-		<form name="form">
-			<button name="Grant" text="Accepter"/>
-			<button name="Deny" text="Refuser"/>
-			<button name="Details" text="Détails..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		&apos;[TITLE]&apos; de [FIRST] [LAST]
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		&apos;[TITLE]&apos; de [GROUPNAME]
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		Vous venez de recevoir [AMOUNT] L$.
-Des objets et des utilisateurs peuvent vous donner des L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		Vous venez de payer [AMOUNT] L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-	</notification>
-	<notification name="FirstSit">
-		Vous êtes assis(e).
-Utilisez les touches de direction (ou AWSD) pour changer la vue.
-Pour vous lever, cliquez sur le bouton Me lever.
-	</notification>
-	<notification name="FirstMap">
-		Cliquez et faites glisser pour faire défiler la carte.
-Double-cliquez pour vous téléporter.
-Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
-	</notification>
-	<notification name="FirstBuild">
-		Vous pouvez construire des objets dans certaines zones de [SECOND_LIFE].
-Utilisez les outils en haut à gauche pour construire et gardez la touche Ctrl ou Alt enfoncée pour passer rapidement d&apos;un outil à l&apos;autre.
-Appuyez sur la touche Esc pour arrêter de construire.
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		Un clic gauche permet d&apos;interagir avec certains objets.
-Si le pointeur de la souris se transforme en main, vous pouvez interagir avec l&apos;objet.
-Un clic droit fait toujours apparaître un menu des choses que vous pouvez faire.
-	</notification>
-	<notification name="FirstTeleport">
-		Cette région n&apos;autorise pas la téléportation de point à point. Vous avez donc été transporté au téléhub le plus proche.
-Votre destination est marquée par une grande balise.
-Suivez la flèche rouge vers la balise ou cliquez sur la flèche pour faire disparaître la balise.
-	</notification>
-	<notification name="FirstOverrideKeys">
-		Vos mouvements sont maintenant pris en charge par un objet.
-Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
-Certains objets (comme les armes) nécessitent l&apos;activation du mode Vue subjective pour être utilisés.
-Pour cela, appuyez sur la touche M.
-	</notification>
-	<notification name="FirstAppearance">
-		Vous êtes en train d&apos;éditer votre apparence.
-Pour tourner et zoomer, utilisez les flèches de direction.
-Lorsque vous avez terminé, appuyez sur Enregistrer tout pour sauvegarder votre apparence et sortir.
-Vous pouvez modifier votre apparence aussi souvent que vous le souhaitez.
-	</notification>
-	<notification name="FirstInventory">
-		Il s&apos;agit de votre inventaire qui contient des objets, notes, vêtements, et autres possessions.
-* Pour porter un objet ou le dossier contenant un ensemble complet, faites-le glisser sur vous-même.
-* Pour mettre un objet dans le monde, faites-le glisser sur le sol.
-* Pour lire une note, double-cliquez dessus.
-	</notification>
-	<notification name="FirstSandbox">
-		Cette région est un bac à sable.
-Les objets que vous construisez ici peuvent être supprimés quand vous partez. Les bacs à sable sont nettoyés régulièrement, veuillez lire les informations en haut de l&apos;écran à côté du nom de la région.
-
-Les régions bacs à sable sont rares et sont signalées par des panneaux.
-	</notification>
-	<notification name="FirstFlexible">
-		Cet objet est flexible.
-Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes jusqu&apos;à ce que la case Fantôme soit décochée.
-	</notification>
-	<notification name="FirstDebugMenus">
-		Vous avez activé le menu Avancé.
-Ce menu contient des fonctionnalités utiles pour les développeurs qui travaillent sur [SECOND_LIFE].
-Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl+Alt+D. Sur un Mac, appuyez sur &#8997;&#8984;D
-	</notification>
-	<notification name="FirstSculptedPrim">
-		Vous êtes en train d&apos;éditer un sculptie.
-Pour modifier la forme d&apos;un sculptie, vous devez utiliser une texture spécifique.
-Vous trouverez des textures dans la bibliothèque de votre inventaire.
-	</notification>
-	<notification name="FirstMedia">
-		Vous avez lancé la lecture d&apos;un média. Dans le menu Préférences, à l&apos;onglet Audio et vidéo, vous pouvez choisir de lire automatiquement les médias. Notez que cela peut être risqué lorsque les médias viennent de sites que vous ne connaissez pas.
-	</notification>
-	<notification name="MaxListSelectMessage">
-		Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME] vous invite à un chat vocal.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] a reçu un message instantané et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] a reçu un inventaire et n&apos;est donc plus ignoré.
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME] a rejoint un chat vocal avec le groupe [GROUP].
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME] a rejoint un chat vocal avec conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME] vous invite à un chat conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-		<form name="form">
-			<button name="Accept" text="Accepter"/>
-			<button name="Decline" text="Refuser"/>
-			<button name="Mute" text="Ignorer"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		L&apos;appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME] a mis fin à l&apos;appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
-	</notification>
-	<notification name="VoiceLoginRetry">
-		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;êtes pas membre du groupe adéquat.
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		Vous ne pouvez pas pénétrer sur ce terrain car l&apos;accès vous y est interdit.
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;avez pas les droits d&apos;accès requis.
-	</notification>
-	<notification name="VoiceNotAllowed">
-		Vous n&apos;êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
-	</notification>
-	<notification name="VoiceCallGenericError">
-		Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
-	</notification>
-	<notification name="ServerVersionChanged">
-		La région dans laquelle vous avez pénétré utilise une version de simulateur différente. Pour plus de détails, cliquez sur ce message.
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		L&apos;URL sur laquelle vous avez cliqué ne peut pas être ouverte dans ce navigateur.
-	</notification>
-	<global name="UnsupportedCPU">
-		- Votre processeur ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="UnsupportedGLRequirements">
-		Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les drivers les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d&apos;exploitation.
-
-Si vous avez toujours des problèmes, veuillez consulter la page suivante : http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- Votre carte graphique ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="UnsupportedRAM">
-		- Votre mémoire système ne remplit pas les conditions minimum requises.
-	</global>
-	<global name="PermYes">
-		Oui
-	</global>
-	<global name="PermNo">
-		Non
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		Ne plus afficher
+	</global>
+	<global name="alwayschoose">
+		Toujours choisir cette option
+	</global>
+	<global name="implicitclosebutton">
+		Fermer
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="Message d&apos;alerte inconnu" name="MissingAlert">
+		Votre version de [APP_NAME] ne peut afficher ce message d&apos;erreur.  Veuillez vous assurer que vous avez bien la toute dernière version du client.
+
+Détails de l&apos;erreur : L&apos;alerte, appelée &apos;[_NAME]&apos; est introuvable dans notifications.xml.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		Erreur floater : impossible de trouver les contrôles suivants :
+
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		Aucun didacticiel n&apos;est disponible actuellement.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="BadInstallation">
+		Une erreur est survenue lors de la mise à jour de [APP_NAME].  Veuillez télécharger la dernière version su client. http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		Connexion à [SECOND_LIFE_GRID] impossible.
+&apos;[DIAGNOSTIC]&apos;
+Veuillez vérifier votre connexion Internet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		Le modèle de message [PATH] est introuvable.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		Enregistrer les changements dans la partie du corps/les habits actuels ?
+		<usetemplate canceltext="Cancel" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="WriteAnimationFail">
+		Une erreur est survenue lors de l&apos;écriture des données d&apos;animation. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		Impossible d&apos;afficher les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		Enregistrer tous les changements dans les habits/parties du corps ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Tout enregistrer"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
+Souhaitez-vous accorder des droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
+Souhaitez-vous accorder des droits d&apos;édition aux résidents selectionnés ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		Souhaitez-vous retirer les droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		Souhaitez-vous retirer les droits d&apos;édition aux résidents selectionnés ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		Impossible de créer le groupe.
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ignorer les modifications" yestext="Enregistrer les modifications"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		Pour envoyer une notice au groupe, vous devez indiquer un sujet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		Vous êtes sur le point d&apos;ajouter des membres du groupe dans le rôle de [ROLE_NAME].
+Les membres ne peuvent pas être destitués de ce rôle.
+Ils doivent donner eux-mêmes leur démission.
+Êtes-vous certain de vouloir continuer ?
+		<usetemplate ignoretext="Confirmer avant d&apos;ajouter un nouveau propriétaire" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+ *Avertissement*
+ Tout membre disposant de ce pouvoir peut s&apos;affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		Vous êtes sur le point d&apos;ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+
+ *Avertissement*
+ Tout membre dans un rôle avec ce pouvoir peut s&apos;attribuer à lui-même, ainsi qu&apos;à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d&apos;un propriétaire.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		Rejoindre ce groupe coûte [COST] L$.
+Voulez-vous continuer ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		Rejoindre ce groupe coûte [COST] L$.
+Vous n&apos;avez pas suffisamment de L$ pour rejoindre ce groupe.
+	</notification>
+	<notification name="CreateGroupCost">
+		La création de ce groupe coûte 100 L$.
+Les groupes doivent comporter plus d&apos;un membre, sinon ils sont supprimés.
+Veuillez inviter des membres d&apos;ici 48 heures.
+		<usetemplate canceltext="Annuler" name="okcancelbuttons" notext="Annuler" yestext="Créer un groupe pour 100 L$"/>
+	</notification>
+	<notification name="LandBuyPass">
+		Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		Pour rendre l&apos;annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
+Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		Attention : en cliquant sur Vendre à n&apos;importe qui, vous rendez votre terrain disponible à toute la communauté de [SECOND_LIFE], même aux personnes qui ne sont pas dans cette région.
+
+Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l&apos;inventaire du propriétaire précédent ?
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l&apos;inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l&apos;inventaire de leur propriétaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
+
+Objets : [N]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		Impossible de désactiver les scripts.
+Les dégâts sont autorisés dans toute la région.
+Pour que les armes fonctionnent, les scripts doivent être autorisés.
+	</notification>
+	<notification name="MustBeInParcel">
+		Pour définir le point d&apos;atterrissage, vous devez vous trouver à l&apos;intérieur de la parcelle.
+	</notification>
+	<notification name="PromptRecipientEmail">
+		Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
+	</notification>
+	<notification name="PromptSelfEmail">
+		Veuillez saisir votre adresse e-mail.
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		Envoyer la photo avec le sujet ou le message par défaut ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		Erreur dans le traitement des données de la photo
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		Erreur d&apos;encodage de la photo.
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		Une erreur est survenue lors du chargement de la capture d&apos;écran destinée au rapport, suite au problème suivant : [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d&apos;utilisation.
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		Impossible de mettre cet ensemble.
+Ce dossier ne contient pas d&apos;habits, de parties du corps ni de pièces jointes.
+	</notification>
+	<notification name="CannotWearTrash">
+		Vous ne pouvez pas porter d&apos;habits ni de parties du corps se trouvant dans la corbeille.
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		Oups! Vous avez oublié de fournir certaines informations.
+Vous devez saisir le nom et le prénom de votre avatar.
+
+Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
+		<url name="url">
+			http://join.secondlife.com/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
+	</notification>
+	<notification name="AddClassified">
+		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche pendant une semaine.
+Rédigez votre annonce, puis cliquez sur Publier pour l&apos;ajouter à la liste des annonces.
+Au moment de cliquer sur Publier, vous serez invité à payer des frais.
+Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
+		<usetemplate ignoretext="Comment ajouter une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		Supprimer l&apos;annonce [NAME] ?
+Une fois payés, les frais ne sont pas remboursables.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		Enregistrer les changements dans l&apos;annonce [NAME] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		Supprimer le favori [PICK] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		Aller à la page web de [SECOND_LIFE] réservée aux événements ?
+		<url name="url">
+			http://secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		Veuillez sélectionner une proposition.
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		Veuillez sélectionner un historique.
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		Le cache sera vidé après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="CacheWillBeMoved">
+		Le cache sera déplacé après le redémarrage de [APP_NAME].
+Remarque : cela videra le cache.
+	</notification>
+	<notification name="ChangeConnectionPort">
+		Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="ChangeSkin">
+		Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
+	</notification>
+	<notification name="GoToAuctionPage">
+		Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		Enregistrer les changements ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Ne pas enregistrer" yestext="Enregistrer"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		L&apos;enregistrement du geste a échoué.
+Il y a trop d&apos;étapes dans ce geste.
+Essayez d&apos;en supprimer quelques-unes.
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		L&apos;enregistrement du geste a échoué. Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		Le geste n&apos;a pas pu être enregistré car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		Une erreur est survenue lors de l&apos;enregistrement du geste, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre geste ultérieurement.
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		La note n&apos;a pas pu être enregistrée car l&apos;objet ou l&apos;inventaire de l&apos;objet associé n&apos;a pas été trouvé.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement de la note, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre note ultérieurement.
+	</notification>
+	<notification name="ScriptCannotUndo">
+		Impossible d&apos;annuler tous les changements dans votre version du script.
+Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
+(**Attention** Cette opération est irréversible.)
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement du script, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		Impossible d&apos;enregistrer le script car l&apos;objet qui le contient est introuvable.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		Une erreur est survenue lors de l&apos;enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d&apos;enregistrer votre script ultérieurement.
+	</notification>
+	<notification name="StartRegionEmpty">
+		Vous n&apos;avez pas défini de région de départ. 
+Veuillez saisir le nom de la région dans la case Lieu de départ, ou choisissez Dernier emplacement ou Domicile comme Lieu de départ.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		Impossible de lancer ou d&apos;arrêter le script car l&apos;objet qui le contient est introuvable.
+L&apos;objet est peut-être inaccessible ou a peut-être été supprimé.
+	</notification>
+	<notification name="CannotDownloadFile">
+		Impossible de télécharger le fichier
+	</notification>
+	<notification name="CannotWriteFile">
+		Impossible d&apos;écrire le fichier [[FILE]]
+	</notification>
+	<notification name="UnsupportedHardware">
+		Avertissement : vous n&apos;avez pas la configuration système requise pour utiliser [APP_NAME]. Si vous continuez à utiliser [APP_NAME], votre performance risque d&apos;être moindre. Malheureusement, la section [SUPPORT_SITE] n&apos;offre aucune aide pour les problèmes de configuration système.
+
+MINSPECS
+Voulez-vous visiter [_URL] pour plus d&apos;informations ?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Mon matériel n&apos;est pas pris en charge" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="UnknownGPU">
+		Votre système contient une carte graphique que nous ne connaissons pas actuellement.
+Cela est souvent le cas avec le nouveau materiel qui n&apos;a pas encore été testé avec [APP_NAME].  Vous pourrez probablement utiliser [APP_NAME] sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
+(Préférences &gt; Graphiques).
+		<form name="form">
+			<ignore name="ignore" text="Ma carte graphique ne peut être identifiée"/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] a planté lors de l&apos;initialisation des drivers graphiques.
+La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
+Certaines fonctionnalités graphiques seront donc désactivées.
+Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
+La qualité des graphiques peut être augmentée à la section Préférences &gt; Graphiques
+	</notification>
+	<notification name="RegionNoTerraforming">
+		Le terraformage est interdit dans la région [REGION].
+	</notification>
+	<notification name="CannotCopyWarning">
+		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		Impossible de donner l&apos;objet de l&apos;inventaire.
+	</notification>
+	<notification name="TransactionCancelled">
+		Transaction annulée.
+	</notification>
+	<notification name="TooManyItems">
+		Impossible de donner plus de 42 objets au cours d&apos;un seul transfert d&apos;inventaire.
+	</notification>
+	<notification name="NoItems">
+		Vous n&apos;êtes pas autorisé à transférer les objets sélectionnés.
+	</notification>
+	<notification name="CannotCopyCountItems">
+		Vous n&apos;êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
+Souhaitez-vous vraiment donner ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		Vous n&apos;êtes pas autorisé à transférer le dossier sélectionné.
+	</notification>
+	<notification name="FreezeAvatar">
+		Geler cet avatar ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		Geler [AVATAR_NAME] ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Dégeler" yestext="Geler"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		Expulser [AVATAR_NAME] de votre terrain ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Expulser et bannir" yestext="Expulser"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		Expulser cet avatar de votre terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		Expulser [AVATAR_NAME] de votre terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Expulser"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		Erreur d&apos;acquisition : trop d&apos;objets sélectionnés.
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		Erreur d&apos;acquisition : les objets sont répartis dans plus d&apos;une région.
+Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+Aller sur [_URL] pour obtenir des informations sur l&apos;achat de L$ ?
+		<url name="url">
+			http://secondlife.com/app/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		Impossible de lier ces [COUNT] objets.
+Vous pouvez lier un maximum de [MAX] objets.
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		Vous ne pouvez lier que des ensembles d&apos;objets complets et vous devez choisir un minimum de deux objets.
+	</notification>
+	<notification name="CannotLinkModify">
+		Impossible de lier car vous n&apos;avez pas le droit de modifier tous les objets.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets et qu&apos;aucun d&apos;eux n&apos;est verrouillé.
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		Impossible de lier car les objets n&apos;ont pas tous le même propriétaire.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
+	</notification>
+	<notification name="NoFileExtension">
+		Pas d&apos;extension pour le fichier suivant : &apos;[FILE]&apos;
+
+Assurez-vous que le fichier a l&apos;extension correcte.
+	</notification>
+	<notification name="InvalidFileExtension">
+		Extension de fichier [EXTENSION] invalide
+[VALIDS] attendu
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		Impossible de lire le fichier son chargé :
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		Il semble que le fichier ne soit pas un fichier RIFF WAVE :
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		Il semble que le fichier ne soit pas un fichier audio PCM WAVE :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		Impossible de trouver les données dans l&apos;en-tête WAV :
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		Le fichier audio est trop long (10 secondes maximum) :
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		Problème avec le fichier [FILE] :
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		Impossible d&apos;ouvrir le fichier son compressé temporaire : [FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		Échec d&apos;encodage Vorbis inconnu sur : [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		Impossible d&apos;encoder le fichier : [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		Fichier ressource corrompu : [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		Version de fichier ressource Linden inconnu : [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		Impossible de créer le fichier de sortie : [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		Actuellement, APP_NAME] ne prend pas en charge le chargement de lots de fichiers d&apos;animation.
+	</notification>
+	<notification name="CannotUploadReason">
+		Impossible de charger [FILE] suite au problème suivant : [REASON]
+Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="LandmarkCreated">
+		Vous avez ajouté &quot;[LANDMARK_NAME]&quot; à votre dossier [FOLDER_NAME].
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l&apos;autorise pas.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		Impossible d&apos;effectuer les recompilations.
+Sélectionnez un objet avec un script.
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		Impossible d&apos;effectuer les recompilations.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		Impossible d&apos;effectuer la réinitialisation.
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		Impossible d&apos;effectuer la réinitialisation.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		Impossible de définir les scripts sur « exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		Impossible de définir les scripts sur « non-exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+	</notification>
+	<notification name="NoFrontmostFloater">
+		Aucun floater frontmost à sauvegarder.
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		Votre requête a été modifiée et les mots trops courts ont été supprimés.
+
+Recherche effectuée : [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		Vos termes de recherche étaient trop courts et aucune recherche n&apos;a été effectuée.
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		Impossible de téléporter.
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir vous téléporter.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+	</notification>
+	<notification name="invalid_region_handoff">
+		Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+	</notification>
+	<notification name="blocked_tport">
+		Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+	</notification>
+	<notification name="nolandmark_tport">
+		Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
+	</notification>
+	<notification name="timeout_tport">
+		Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
+Veuillez réessayer dans un moment.
+	</notification>
+	<notification name="noaccess_tport">
+		Désolé, vous n&apos;avez pas accès à cette destination.
+	</notification>
+	<notification name="missing_attach_tport">
+		Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
+	</notification>
+	<notification name="too_many_uploads_tport">
+		Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+	</notification>
+	<notification name="expired_tport">
+		Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="expired_region_handoff">
+		Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="no_host">
+		Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="no_inventory_host">
+		L&apos;inventaire est temporairement indisponible.
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		Impossible de définir le propriétaire foncier :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		Problème :
+Aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		Problème :
+Aucune région sélectionnée.
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		Impossible d&apos;abandonner le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		Impossible d&apos;abandonner le terrain :
+la région est introuvable.
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		Impossible d&apos;acheter le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		Impossible d&apos;acheter le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que [APP_NAME] n&apos;estime le montant de cette transaction.
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		Cession du terrain impossible :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		Cession du terrain impossible :
+aucun groupe sélectionné.
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		Cession du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		Cession du terrain impossible :
+plusieurs parcelles sélectionnées.
+
+Essayez de ne sélectionner qu&apos;une seule parcelle.
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		Cette parcelle propose des flux média.
+Pour jouer des flux média, il faut avoir une connexion internet rapide.
+
+Jouer les flux média lorsqu&apos;ils sont disponibles ?
+(Vous pourrez modifier cette option ultérieurement sous Préférences &gt; Audio et vidéo.)
+		<usetemplate name="okcancelbuttons" notext="Désactiver" yestext="Jouer le média"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		Cession du terrain impossible :
+rapport de propriété sur le point d&apos;être envoyé par le serveur.
+
+Merci de réessayer.
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		Cession du terrain impossible :
+la cession de terrain est interdite dans la région [REGION].
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		Impossible d&apos;abandonner le terrain :
+mise à jour des informations sur la parcelle sur le point d&apos;être envoyée par le serveur.
+
+Veuillez réessayer dans quelques secondes.
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		Impossible d&apos;abandonner le terrain :
+vous n&apos;êtes pas le propriétaire des parcelles sélectionnées.
+
+Veuillez sélectionner une seule parcelle.
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		Impossible d&apos;abandonner le terrain :
+vous n&apos;avez pas le droit de libérer cette parcelle.
+Les parcelles qui vous appartiennent sont en vert.
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		Impossible d&apos;abandonner le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		Impossible d&apos;abandonner le terrain :
+le transfert de terrain est interdit dans la région [REGION].
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		Impossible d&apos;abandonner le terrain :
+vous devez sélectionner une parcelle entière pour la libérer.
+
+Sélectionnez toute la parcelle ou divisez-la d&apos;abord.
+	</notification>
+	<notification name="ReleaseLandWarning">
+		Vous vous apprêtez à libérer [AREA] m² de terrain.
+Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
+
+Libérer ce terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		Division du terrain impossible :
+
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		Division du terrain impossible :
+
+Toute la parcelle est sélectionnée.
+Sélectionnez une partie de la parcelle uniquement.
+	</notification>
+	<notification name="LandDivideWarning">
+		Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
+
+Diviser le terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		Division du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		Impossible de fusionner le terrain :
+la région dans laquelle il est situé est introuvable.
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		Impossible de fusionner le terrain :
+aucune parcelle sélectionnée.
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		Impossible de fusionner le terrain :
+vous avez sélectionné une seule parcelle.
+
+Sélectionnez le terrain sur les deux parcelles.
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		Impossible de fusionner le terrain :
+vous devez sélectionner au moins deux parcelles.
+
+Sélectionnez le terrain sur les deux parcelles.
+	</notification>
+	<notification name="JoinLandWarning">
+		En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
+Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
+
+Fusionner le terrain ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		Cette note doit être sauvegardée avant que l&apos;objet ne puisse être copié ou visualisé. Enregistrer la note ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		Copier cet objet dans votre inventaire ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Copier"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		Échec du changement de résolution (à [RESX], de [RESY])
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		Erreur : herbes non identifiées : [SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		Erreur : arbres non identifiés : [SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d&apos;abord libérer de la mémoire sur votre ordinateur.
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
+Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		Vous avez été déconnecté(e) de [SECOND_LIFE] :
+            [MESSAGE]
+Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [APP_NAME].
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Afficher IM et chat"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		Impossible d&apos;acheter du terrain pour le groupe :
+Vous n&apos;avez pas le droit d&apos;acheter de terrain pour votre groupe.
+	</notification>
+	<notification label="Devenir amis" name="AddFriend">
+		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Devenir amis" name="AddFriendWithMessage">
+		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+		<form name="form">
+			<input name="message">
+				Voulez-vous être mon ami(e) ?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		Voulez-vous supprimer plusieurs résidents de votre liste d&apos;amis ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		Vous devez choisir un nom pour votre petite annonce.
+	</notification>
+	<notification name="MinClassifiedPrice">
+		Le coût de l&apos;annonce doit être de [MIN_PRICE] L$ minimum.
+
+Veuillez saisir un montant plus élevé.
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		Au moins un des objets que vous avez sélectionnés est verrouillé.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		Au moins un des objets que vous avez sélectionnés n&apos;est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		Au moins un des objets est verrouillé.
+Au moins un des objets n&apos;est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		Au moins un des objets est verrouillé.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		Au moins un des objets n&apos;est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		Au moins un des objets est verrouillé.
+Au moins un des objets n&apos;est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+		<usetemplate name="okcancelbuttons" notext="annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		Au moins un des objets est verrouillé.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		Au moins un des objets est verrouillé.
+Vous n&apos;êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+Par contre, vous pouvez prendre les objets sélectionnés.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		Impossible d&apos;acheter le terrain car la sélection couvre plusieurs régions.
+
+Veuillez sélectionner une zone plus petite et réessayer.
+	</notification>
+	<notification name="DeedLandToGroup">
+		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
+Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		Les paramètres d&apos;affichage sont au niveau le plus sûr, comme vous l&apos;aviez indiqué.
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		Vos paramètres d&apos;affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		La destination que vous avez choisie n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+	</notification>
+	<notification name="AvatarMovedLast">
+		Votre dernière destination n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+	</notification>
+	<notification name="AvatarMovedHome">
+		La destination que vous avez choisie n&apos;est pas disponible actuellement.
+Vous avez été téléporté vers une région voisine.
+Nous vous conseillons de définir votre domicile ailleurs.
+	</notification>
+	<notification name="ClothingLoading">
+		Vos vêtements sont en cours de téléchargement.
+Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voient correctement.
+		<form name="form">
+			<ignore name="ignore" text="Vos habits prennent du temps à télécharger"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		L&apos;installation de [APP_NAME] est terminée.
+
+S&apos;il s&apos;agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
+Retourner sur www.secondlife.com pour créer un nouveau compte ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Nouveau compte..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		Nous avons des difficultés à vous connecter. Il y a peut-être un problème avec votre connexion Internet ou la [SECOND_LIFE_GRID].
+
+Vérifiez votre connextion Internet et réessayez dans quelques minutes, cliquez sur Aide pour consulter la page [SUPPORT_SITE] ou bien sur Téléporter pour essayer d&apos;aller chez vous.
+		<url name="url">
+			http://secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="Aide"/>
+			<button name="Teleport" text="Téléporter"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		Votre personnage va apparaître dans un moment.
+
+Pour marcher, utilisez les flèches de direction.
+Appuyez sur F1 pour obtenir de l&apos;aide ou en savoir plus sur [SECOND_LIFE].
+Choisissez un avatar homme ou femme.
+Vous pourrez revenir sur votre décision plus tard.
+		<usetemplate name="okcancelbuttons" notext="Femme" yestext="Homme"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] [PRICE] L$ Vous n&apos;avez pas suffisamment de L$ pour faire cela.
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] vous avez donné la permission de modifier ses objets.
+	</notification>
+	<notification name="RevokedModifyRights">
+		Vous n&apos;avez plus le droit de modifier les objets de [FIRST_NAME] [LAST_NAME].
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		Cela videra le cache cartographique de cette région.
+Cela n&apos;est vraiment utile que pour faire du débugage.
+(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		Impossible d&apos;acheter plus d&apos;un objet à  la fois.  Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		Impossible de copier les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		Téléporter tous les résidents de cette région chez eux ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+	</notification>
+	<notification name="InvalidTerrainSize">
+		Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+	</notification>
+	<notification name="RawUploadStarted">
+		Le chargement a commencé. Cela va prendre une à deux minutes,
+suivant votre vitesse de connexion.
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		Echec lors de la tentative d&apos;ajout de [NUM_ADDED] agents :
+Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Figer"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		Impossible d&apos;ajouter le propriétaire du domaine à la liste des résidents bannis.
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		Impossible de changer d&apos;apparence jusqu&apos;à ce que les habits et la silhouette soient chargés.
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n&apos;est pas autorisée.
+	</notification>
+	<notification name="CantSetBuyObject">
+		Cet objet n&apos;est pas à vendre.
+Veuillez choisir un objet à vendre et réessayer.
+	</notification>
+	<notification name="FinishedRawDownload">
+		Chargement du fichier de terrain raw effectué vers :
+[DOWNLOAD_PATH].
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadWindows">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinux">
+		Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		Une nouvelle version de [APP_NAME] est disponible.
+[MESSAGE]
+Pour utiliser [APP_NAME] vous devez télécharger cette mise à jour.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Quitter" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMac">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		Une mise à jour de [APP_NAME] est disponible.
+[MESSAGE]
+Cette mise à jour n&apos;est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l&apos;installer.
+
+Télécharger vers le dossier Applications ?
+		<usetemplate name="okcancelbuttons" notext="Continuer" yestext="Télécharger"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		Si vous cédez cet objet, le groupe :
+* recevra les L$ versés pour l&apos;objet ;
+		<usetemplate ignoretext="Confimer avant que je ne cède un objet à un groupe" name="okcancelignore" notext="Annuler" yestext="Céder"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Voulez-vous ouvrir votre navigateur web système pour afficher ce contenu ?
+		<usetemplate ignoretext="Ouvrir mon navigateur pour consulter une page web" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		Aller sur secondlife.com pour gérer votre compte ?
+		<usetemplate ignoretext="Lancer mon navigateur pour gérer mon compte" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur pour apprendre comment signaler un problème de sécurité" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		Consultez le Wiki sur l&apos;Assurance Qualité de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter la page Wiki sur l&apos;Assurance Qualité." name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
+		<usetemplate ignoretext="Lancer mon navigateur pour utiliser le Public Issue Tracker (JIRA)" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le blog" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		Voulez-vous ouvrir le guide pour l&apos;écriture de scripts ?
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le guide pour l&apos;écriture de scripts" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		Voulez-vous ouvrir le portail LSL pour l&apos;écriture de scripts ?
+		<usetemplate ignoretext="Lancer mon navigateur web pour consulter le portail LSL" name="okcancelignore" notext="Annuler" yestext="Aller à la page"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
+
+*Avertissement* Les objets non transférables seront supprimés !
+		<usetemplate ignoretext="Confirmer avant de rendre les objets à leurs propriétaires" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		Vous êtes actuellement membre du groupe [GROUP].
+Quitter le groupe ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous"/>
+	</notification>
+	<notification name="MuteLinden">
+		Désolé, vous ne pouvez pas ignorer un Linden.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente.  Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
+	</notification>
+	<notification label="Échec de la fonction Ignorer les objets par nom" name="MuteByNameFailed">
+		Vous ignorez déjà ce résident.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		Si vous supprimez des contenus, vous risquez d&apos;endommager l&apos;objet. Souhaitez-vous supprimer cet objet ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		Impossible d&apos;offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		Le mode Occupé est sélectionné.
+Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages instantanés génèreront la réponse en mode occupé que vous avez créée. Toutes les offres de téléportation seront refusées. Toutes les offres d&apos;inventaire iront dans la corbeille.
+		<usetemplate ignoretext="Je change mon statut en mode Occupé" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		Vous avez atteint le nombre de groupes maximum. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
+[NAME] vous invite à rejoindre un groupe.
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="Refuser" yestext="Rejoindre"/>
+	</notification>
+	<notification name="KickUser">
+		Éjecter cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Un administrateur vous a déconnecté.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		Éjecter tous les résidents actuellement en ligne avec quel message ?
+		<form name="form">
+			<input name="message">
+				Un administrateur vous a déconnecté.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		Geler cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM).
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		Dégeler cet utilisateur avec quel message ?
+		<form name="form">
+			<input name="message">
+				Vous n&apos;êtes plus gelé.
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		Proposez une téléportation avec le message suivant ?
+		<form name="form">
+			<input name="message">
+				On se rejoint à [REGION] ?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		Demander au résident de venir vous rejoindre ?
+		<form name="form">
+			<input name="message">
+				On se rejoint à [REGION] ?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		Êtes-vous certain de vouloir être téléporté ?
+		<usetemplate ignoretext="Confirmer que je veux me téléporter à un repère" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+	</notification>
+	<notification name="TeleportToPick">
+		Téléporter vers [PICK] ?
+		<usetemplate ignoretext="Confirmer que je veux me téléporter à un endroit dans mes Préférences" name="okcancelignore" notext="Annuler" yestext="Téléporter"/>
+	</notification>
+	<notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate">
+		Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Modifier un domaine Linden" name="ChangeLindenEstate">
+		Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
+
+Cela est extrêmement délicat car l&apos;expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+
+Continuer ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Modifier l&apos;accès à un domaine Linden" name="ChangeLindenAccess">
+		Vous vous apprêtez à modifier la liste d&apos;accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
+
+Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l&apos;intérieur/extérieur de la grille.
+Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedAgentAdd">
+		Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedAgentRemove">
+		Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedGroupAdd">
+		Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateAllowedGroupRemove">
+		Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateBannedAgentAdd">
+		Refuser l&apos;accès à ce domaine uniquement ou à [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateBannedAgentRemove">
+		Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateManagerAdd">
+		Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Choisir le domaine" name="EstateManagerRemove">
+		Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Tous les domaines" yestext="Ce domaine"/>
+	</notification>
+	<notification label="Confirmer" name="EstateKickUser">
+		Éjecter [EVIL_USER] de ce domaine ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		Êtes-vous certain de vouloir modifier le règlement du domaine ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas pénétrer dans cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous permet pas de pénétrer dans cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<form name="form">
+			<button name="OK" text="Modifier les Préférences"/>
+			<button default="true" name="Cancel" text="Fermer"/>
+			<ignore name="ignore" text="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de pénétrer dans une région"/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas réclamer cette région car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous autorise pas à réclamer cette région.
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous permet pas de réclamer cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche de réclamer un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région. Cela vient peut-être du fait qu&apos;il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d&apos;aide pour savoir comment accéder aux zones ayant ce niveau d&apos;accès.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+		</url>
+		<usetemplate ignoretext="Je ne peux pas acheter ce terrain car je n&apos;ai pas accès à cette catégorie de contenu" name="okcancelignore" notext="Fermer" yestext="Consulter les pages d&apos;aide"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		Votre catégorie d&apos;accès ne vous permet pas d&apos;acheter cette région.
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		Votre catégorie d&apos;accès ne vous autorise pas à acheter cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d&apos;accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition &gt; Préférences... &gt; Général.
+		<usetemplate ignoretext="La catégorie de contenu que j&apos;ai choisie m&apos;empêche d&apos;acheter un terrain" name="okcancelignore" notext="Fermer" yestext="Modifier les Préférences"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		&quot;Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer.&quot;
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		Problème lors de l&apos;importation du règlement du domaine.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		Problèmes lors de l&apos;ajout d&apos;un nouveau gérant de domaine. Il est possible qu&apos;au moins un des domaines ait une liste de gérants complète.
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		Problème lors de l&apos;ajout à la liste de ce domaine. Il est possible qu&apos;au moins un des domaines ait une liste complète.
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		Impossible de charger les données de la note actuellement.
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		Permissions pour afficher la note insuffisantes.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		Les références de la note ne se trouvent pas dans la base de données.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
+
+Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		Cette petite annonce contient-elle du contenu Mature ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="SetGroupMature">
+		Ce groupe contient-il du contenu Mature ?
+		<usetemplate canceltext="Annuler" name="yesnocancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification label="Confirmer le redémarrage" name="ConfirmRestart">
+		Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification label="Envoyer un message à la région" name="MessageRegion">
+		Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Catégorie de la région modifiée" name="RegionMaturityChange">
+		La catégorie d&apos;accès de cette région a été mise à jour.
+Ce changement n&apos;apparaîtra pas immédiatement sur la carte.
+	</notification>
+	<notification label="Versions de voix non compatibles" name="VoiceVersionMismatch">
+		Cette version de [APP_NAME] n&apos;est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour [APP_NAME] pour que le chat vocal fonctionne correctement.
+	</notification>
+	<notification label="Impossible d&apos;acheter des objets" name="BuyObjectOneOwner">
+		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOnly">
+		Impossible d&apos;acheter les contenus de plus d&apos;un objet à la fois.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification label="Impossible d&apos;acheter des contenus" name="BuyContentsOneOwner">
+		Impossible d&apos;acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu&apos;un seul objet.
+	</notification>
+	<notification name="BuyOriginal">
+		Acheter l&apos;objet original pour [PRICE] L$ à [PRICE] ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		Acheter l&apos;objet original pour [PRICE] L$ ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		Acheter une copie pour [PRICE] L$ à [OWNER] ?
+L&apos;objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		Acheter une copie pour [PRICE] L$ ?
+L&apos;objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		Acheter des contenus pour [PRICE] L$ à [OWNER] ?
+Ils seront copiés dans votre inventaire.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		Acheter des contenus pour [PRICE] L$ ?
+Ils seront copiés dans votre inventaire.
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
+		<form name="form">
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		Remarque :
+vous avez mis à jour l&apos;emplacement de ce favori mais les autres détails resteront inchangés.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		Vous avez sélectionné des objets non copiables.
+Ces objets seront déplacés dans votre inventaire et non pas copiés.
+
+Déplacer les objets de l&apos;inventaire ?
+		<usetemplate ignoretext="M&apos;avertir avant que je ne déplace des objets pour lesquels la copie est interdite" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		Vous avez sélectionné des objets de l&apos;inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
+L&apos;objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
+
+Déplacer les objets de l&apos;inventaire ?
+		<usetemplate ignoretext="M&apos;avertir avant que je ne déplace des objets pour lesquels la copie est interdite et qui pourraient casser des objets scriptés" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		Avertissement : l&apos;action du clic Payer l&apos;objet a été définie mais ne fonctionnera que si un script est ajouté avec l&apos;event money().
+		<form name="form">
+			<ignore name="ignore" text="Je définis l&apos;action du clic Payer l&apos;objet  lorsque je construis un objet sans le script money()"/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		Vous n&apos;êtes autorisé à copier aucun élément dans cet objet.
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		Aller sur secondlife.com pour consulter l&apos;historique de votre compte ?
+		<usetemplate ignoretext="Lancer mon navigateur pour consulter l&apos;historique de mon compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		Êtes-vous certain de vouloir quitter ?
+		<usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		Utilisez cet outil pour signaler des infractions aux Conditions d&apos;utilisation et aux Règles de la communauté. Voir :
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Lorsqu&apos;elles sont signalées, toutes les infractions aux Conditions d&apos;utilisation et aux Règles de la communauté font l&apos;objet d&apos;une enquête et sont résolues. Pour accéder aux détails de la résolution d&apos;un incident, allez sur :
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
+
+Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s&apos;occuper de tous les rapports envoyés à partir de cette région. Linden Lab n&apos;enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
+
+Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
+(Les réglements sont visibles à partir du menu Monde &gt; À propos du terrain.)
+
+La résolution de ce rapport ne s&apos;applique qu&apos;à cette région ; L&apos;accès aux autres endroits de [SECOND_LIFE] ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l&apos;accès à l&apos;ensemble de [SECOND_LIFE].
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		Veuillez choisir une catégorie pour ce rapport d&apos;infraction.
+Le choix d&apos;une catégorie nous permet de traiter les rapports d&apos;infraction plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		Veuillez saisir le nom du contrevenant.
+Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		Veuillez indiquer l&apos;endroit où l&apos;infraction a eu lieu.
+Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		Veuillez saisir un récapitulatif de l&apos;infraction.
+Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		Veuillez saisir une description détaillée de l&apos;infraction.
+Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l&apos;incident que vous signalez.
+Les descriptions précises nous permettent de traiter les rapports plus rapidement.
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		Cher résident,
+
+Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
+
+(1) Remplissez un rapport d&apos;infraction. Vous pouvez soumettre un rapport d&apos;infraction si vous pensez qu&apos;un résident exploite le système de droits de [SECOND_LIFE], par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l&apos;encontre du résident non respectueux des Conditions d&apos;utilisation ou des règles de la communauté. Sachez toutefois que l&apos;équipe chargée des infractions ne supprimera pas de contenu à l&apos;intérieur de [SECOND_LIFE].
+
+(2) Demandez à ce que du contenu à l&apos;intérieur de [SECOND_LIFE] soit supprimé. Pour demander à ce que du contenu soit supprimé de [SECOND_LIFE], vous devez soumettre un rapport d&apos;infraction valide, tel que fourni dans notre Règlement contre les violations des droit d&apos;auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
+
+Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport.  Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
+
+Merci,
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
+[COMPONENTS]
+	</notification>
+	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment">
+		Vous avez déjà un objet sur cette partie du corps.
+Voulez-vous le remplacer par l&apos;objet sélectionné ?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Remplacer une pièce-jointe existante par l&apos;objet sélectionné"/>
+			<button ignore="Remplacer automatiquement" name="Yes" text="OK"/>
+			<button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Réponse si occupé(e)" name="BusyModePay">
+		Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
+
+Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="Je suis sur le point de payer une personne ou un objet mais suis en mode Occupé"/>
+			<button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
+			<button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente ?
+		<usetemplate ignoretext="Confimer avant de vider la corbeille" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		Êtes-vous certain de vouloir supprimer vos cookies ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
+		<usetemplate ignoretext="Confimer avant de vider le dossier Objets trouvés" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="CopySLURL">
+		La SLurl suivante a été copiée dans votre presse-papier :
+ [SLURL]
+
+Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apos;accéder facilement à cet endroit ou bien collez-la dans la barre d&apos;adresse de votre navigateur.
+		<form name="form">
+			<ignore name="ignore" text="La SLurl est copiée dans mon presse-papier"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		Voulez-vous écraser l&apos;option précédemment enregistrée ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		Voulez-vous supprimer [SKY] ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+	</notification>
+	<notification name="WLMissingSky">
+		Une dossier semble manquer au Cycle du jour : [SKY].
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		Nommez le nouveau ciel.
+		<form name="form">
+			<input name="message">
+				Nouveau préréglage
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		Ce préréglage existe déjà !
+	</notification>
+	<notification name="NewWaterPreset">
+		Nommez ce nouveau préréglage d&apos;eau.
+		<form name="form">
+			<input name="message">
+				Nouveau préréglage
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		Ce préréglage existe déjà !
+	</notification>
+	<notification name="WaterNoEditDefault">
+		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		Vous devez terminer votre session de chat avec [NAME].
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		Vous ne pouvez pas acheter un objet s&apos;il fait partie d&apos;une pièce-jointe.
+	</notification>
+	<notification label="À propos des requêtes pour les autorisations de débit" name="DebitPermissionDetails">
+		Accepter cette requête donne au script l&apos;autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l&apos;objet doit supprimer l&apos;objet ou bien réinitialiser les scripts dans l&apos;objet.
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		Voulez-vous automatiquement porter l&apos;habit que vous allez créer ?
+		<usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge.  Souhaitez-vous aller sur [SECOND_LIFE] et procéder à la vérification de votre âge ?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement.  Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=fr
+		</url>
+		<usetemplate ignoretext="Mes informations de paiement ne sont pas enregistrées" name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="MissingString">
+		The string [STRING_NAME] is missing from strings.xml
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		Annulé
+	</notification>
+	<notification name="CancelledSit">
+		Action annulée
+	</notification>
+	<notification name="CancelledAttach">
+		Attachement annulé
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		Habits et parties du corps manquants remplacés par les éléments par défaut.
+	</notification>
+	<notification name="GroupNotice">
+		Sujet : [SUBJECT], Message : [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] est connecté(e)
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] est déconnecté(e)
+	</notification>
+	<notification name="AddSelfFriend">
+		Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		Importation de photos SL et Web en cours...
+(prend environ 5 minutes.)
+	</notification>
+	<notification name="UploadPayment">
+		Le chargement a coûté [AMOUNT] L$.
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Photo Web importée
+	</notification>
+	<notification name="UploadSnapshotDone">
+		Photo SL importée
+	</notification>
+	<notification name="TerrainDownloaded">
+		Fichier terrain.raw téléchargé
+	</notification>
+	<notification name="GestureMissing">
+		Geste [NAME] absent de la base de données.
+	</notification>
+	<notification name="UnableToLoadGesture">
+		Impossible de charger le geste [NAME].
+Merci de réessayer.
+	</notification>
+	<notification name="LandmarkMissing">
+		Repère absent de la base de données.
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		Impossible de charger le repère. Merci de réessayer.
+	</notification>
+	<notification name="CapsKeyOn">
+		La touche Verr.maj est activée.
+Cela risque d&apos;impacter votre mot de passe.
+	</notification>
+	<notification name="NotecardMissing">
+		Note absente de la base de données.
+	</notification>
+	<notification name="NotecardNoPermissions">
+		Vous n&apos;avez pas le droit de consulter cette note.
+	</notification>
+	<notification name="RezItemNoPermissions">
+		Permissions insuffisantes pour rezzer l&apos;objet.
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		Impossible de lire les données de la note actuellement.
+	</notification>
+	<notification name="ScriptMissing">
+		Script absent de la base de données.
+	</notification>
+	<notification name="ScriptNoPermissions">
+		Permissions insuffisantes pour voir le script.
+	</notification>
+	<notification name="UnableToLoadScript">
+		Impossible de charger le script. Merci de réessayer.
+	</notification>
+	<notification name="IncompleteInventory">
+		Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
+Merci d&apos;essayer à nouveau dans une minute.
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		Vous ne pouvez pas modifier de catégories protégées.
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		Vous ne pouvez pas supprimer de catégories protégées.
+	</notification>
+	<notification name="OfferedCard">
+		Vous avez offert votre carte de visite à [FIRST] [LAST]
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		Achat impossible durant le chargement de l&apos;objet.
+Merci de réessayer.
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		Impossible de lier durant le chargement de l&apos;objet.
+Merci de réessayer.
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		Vous ne pouvez pas acheter simultanément des objets de propriétaires différents.
+Veuillez sélectionner un seul objet.
+	</notification>
+	<notification name="ObjectNotForSale">
+		Cet objet n&apos;est pas à vendre.
+	</notification>
+	<notification name="EnteringGodMode">
+		Activation du mode divin : niveau [LEVEL]
+	</notification>
+	<notification name="LeavingGodMode">
+		Désactivation du mode divin : niveau [LEVEL]
+	</notification>
+	<notification name="CopyFailed">
+		Vous n&apos;avez pas le droit de copier ceci.
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME] a accepté votre envoi.
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME] a refusé votre envoi.
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		Votre carte de visite a été acceptée.
+	</notification>
+	<notification name="CallingCardDeclined">
+		Votre carte de visite a été refusée.
+	</notification>
+	<notification name="TeleportToLandmark">
+		A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Repères (Landmarks).
+Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
+	</notification>
+	<notification name="TeleportToPerson">
+		A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l&apos;écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
+Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
+Veuillez sélectionner un terrain plus petit.
+	</notification>
+	<notification name="SearchWordBanned">
+		Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
+	</notification>
+	<notification name="NoContentToSearch">
+		Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
+	</notification>
+	<notification name="GroupVote">
+		[NAME] a proposé un vote pour :
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="Voter"/>
+			<button name="Later" text="Plus tard"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		Avis d&apos;événement :
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="Téléporter"/>
+			<button name="Description" text="Description"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		Tous les objets de cette parcelle qui seront transférés à l&apos;acheteur sont maintenant mis en surbrillance.
+
+* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
+		<form name="form">
+			<button name="Done" text="Transfert effectué"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		Gestes désactivés ayant le même mot-clé :
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Le logiciel Apple QuickTime ne semble pas installé sur votre système.
+Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
+	</notification>
+	<notification name="NoPlugin">
+		Aucun Media Plugin n&apos;a été trouvé pour prendre en charge &quot;[MIME_TYPE]&quot;.  Les médias de ce type ne sont pas disponibles.
+	</notification>
+	<notification name="MediaPluginFailed">
+		Le Media Plugin suivant a échoué :
+    [PLUGIN]
+
+Si le problème persiste, veuillez réinstaller le plugin ou contacter le vendeur.
+		<form name="form">
+			<ignore name="ignore" text="L&apos;éxécution d&apos;un Media Plugin a échoué"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
+	</notification>
+	<notification name="OtherObjectsReturned">
+		Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
+	</notification>
+	<notification name="GroupObjectsReturned">
+		Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l&apos;inventaire de leur propriétaire.
+Les objets donnés transférables ont étés renvoyés à leur propriétaire.
+Les objets non transférables donnés au groupe ont étés supprimés.
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
+	</notification>
+	<notification name="NotSafe">
+		Les dégâts sont autorisés sur ce terrain.
+Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
+	</notification>
+	<notification name="NoFly">
+		Le vol est interdit dans cette zone.
+Vous ne pouvez pas voler ici.
+	</notification>
+	<notification name="PushRestricted">
+		Les bousculades sont interdites dans cette zone.
+Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
+	</notification>
+	<notification name="NoVoice">
+		Le chat vocal est interdit dans cette zone. Vous n&apos;entendrez personne parler.
+	</notification>
+	<notification name="NoBuild">
+		La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d&apos;objets ici.
+	</notification>
+	<notification name="ScriptsStopped">
+		Un administrateur a temporairement stoppé les scripts dans cette région.
+	</notification>
+	<notification name="ScriptsNotRunning">
+		Aucun script ne fonctionne dans cette région.
+	</notification>
+	<notification name="NoOutsideScripts">
+		Les scripts externes sont désactivés sur ce terrain.
+
+Aucun script ne marche ici à part ceux du propriétaire du terrain.
+	</notification>
+	<notification name="ClaimPublicLand">
+		Vous ne pouvez réclamer qu&apos;un terrain public dans la région où vous vous trouvez actuellement.
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		Votre catégorie d&apos;accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
+
+Pour savoir comment accéder aux zones ayant un tel niveau d&apos;accès, veuillez consulter les pages d&apos;aide.
+	</notification>
+	<notification name="URBannedFromRegion">
+		Vous avez été banni de cette région.
+	</notification>
+	<notification name="NoTeenGridAccess">
+		Votre compte ne peut pas se connecter à cette région du Teen grid.
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		Vous n&apos;avez pas le statut de paiement approprié pour pénétrer dans cette région.
+	</notification>
+	<notification name="MustGetAgeParcel">
+		Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
+	</notification>
+	<notification name="NoDestRegion">
+		Région de destination introuvable.
+	</notification>
+	<notification name="NotAllowedInDest">
+		Vous n&apos;êtes pas autorisé dans cette région.
+	</notification>
+	<notification name="RegionParcelBan">
+		Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
+	</notification>
+	<notification name="TelehubRedirect">
+		Vous avez été redirigé vers un téléhub.
+	</notification>
+	<notification name="CouldntTPCloser">
+		Il n&apos;a pas été possible de vous téléporter vers une destination plus proche.
+	</notification>
+	<notification name="TPCancelled">
+		Téléportation annulée.
+	</notification>
+	<notification name="FullRegionTryAgain">
+		La région dans laquelle vous essayez de pénétrer est pleine actuellement.
+Veuillez réessayer dans quelques minutes.
+	</notification>
+	<notification name="GeneralFailure">
+		Panne générale.
+	</notification>
+	<notification name="RoutedWrongRegion">
+		Dirigé vers la mauvaise région. Merci de réessayer.
+	</notification>
+	<notification name="NoValidAgentID">
+		ID agent non valide.
+	</notification>
+	<notification name="NoValidSession">
+		ID de session non valide.
+	</notification>
+	<notification name="NoValidCircuit">
+		Aucun code de circuit valide.
+	</notification>
+	<notification name="NoValidTimestamp">
+		Timestamp non valide.
+	</notification>
+	<notification name="NoPendingConnection">
+		Impossible de créer la connexion en attente.
+	</notification>
+	<notification name="InternalUsherError">
+		Erreur interne lors de la tentative de connexion.
+	</notification>
+	<notification name="NoGoodTPDestination">
+		Impossible de trouver un lieu de téléportation valide dans cette région.
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		Une erreur interne est survenue lors de la résolution des coodonnées de la région.
+	</notification>
+	<notification name="NoValidLanding">
+		Impossible de trouver un point d&apos;atterrissage valide.
+	</notification>
+	<notification name="NoValidParcel">
+		Aucune parcelle valide n&apos;a été trouvée.
+	</notification>
+	<notification name="ObjectGiveItem">
+		Un objet appelé [OBJECTFROMNAME] appartenant à [FIRST] [LAST] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		L&apos;objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+		<form name="form">
+			<button name="Keep" text="Garder"/>
+			<button name="Discard" text="Jeter"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="Rejoindre"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Info" text="Infos"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME] vous propose de le/la rejoindre par téléportation :
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="Téléporter"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="Plus tard"/>
+			<button name="GoNow..." text="Y aller maintenant..."/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME] vous demande de devenir son ami(e).
+
+[MESSAGE]
+
+(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME] vous demande de devenir son ami.
+
+(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME] a accepté votre amitié.
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME] a refusé votre amitié.
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST] vous offre sa carte de visite.
+Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		La région va redémarrer dans [MINUTES] minutes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+	</notification>
+	<notification name="RegionRestartSeconds">
+		La région va redémarrer dans [SECONDS] secondes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+	</notification>
+	<notification name="LoadWebPage">
+		Charger cette page web [URL] ?
+
+[MESSAGE]
+
+Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
+		<form name="form">
+			<button name="Gotopage" text="Charger"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		La recherche du [TYPE] dans la base de données a échoué.
+	</notification>
+	<notification name="FailedToFindWearable">
+		La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
+	</notification>
+	<notification name="InvalidWearable">
+		L&apos;objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire.  Pour porter cet objet, veuillez télécharger une mise à jour du client.
+	</notification>
+	<notification name="ScriptQuestion">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à &apos;[NAME]&apos;, aimerait :
+
+[QUESTIONS]
+Acceptez-vous ?
+		<form name="form">
+			<button name="Yes" text="Oui"/>
+			<button name="No" text="Non"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		Un objet appelé « [OBJECTNAME] », appartenant à « [NAME] », aimerait :
+
+[QUESTIONS]
+Si vous n&apos;avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête.
+
+Accepter cette requête ?
+		<form name="form">
+			<button name="Grant" text="Accepter"/>
+			<button name="Deny" text="Refuser"/>
+			<button name="Details" text="Détails..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		&apos;[TITLE]&apos; de [FIRST] [LAST]
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		&apos;[TITLE]&apos; de [GROUPNAME]
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		Vous venez de recevoir [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		Vous venez de payer [AMOUNT] L$.
+Votre solde en L$ est affiché en haut à droite.
+	</notification>
+	<notification name="FirstSit">
+		Vous êtes assis(e).
+Utilisez les touches de direction (ou AWSD) pour regarder autour de vous.
+Pour vous lever, cliquez sur le bouton Me lever.
+	</notification>
+	<notification name="FirstMap">
+		Cliquez et faîtes glisser pour faire défiler la carte.
+Double-cliquez pour vous téléporter.
+Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
+	</notification>
+	<notification name="FirstBuild">
+		Vous avez ouvert les outils de construction. Tous les objets autour de vous ont été créés avec ces outils.
+	</notification>
+	<notification name="FirstTeleport">
+		Vous ne pouvez vous téléporter que dans certaines zones de cette région. La flèche pointe vers votre destination. Cliquez sur la flèche pour la faire disparaître.
+	</notification>
+	<notification name="FirstOverrideKeys">
+		Vos mouvements sont maintenant pris en charge par un objet.
+Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
+Certains objets (comme les armes) nécessitent l&apos;activation du mode Vue subjective pour être utilisés.
+Pour cela, appuyez sur la touche M.
+	</notification>
+	<notification name="FirstAppearance">
+		Vous êtes en train d&apos;éditer votre apparence.
+Utilisez les touches de direction pour regarder autour de vous.
+Une fois terminé, cliquer sur Tout enregistrer.
+	</notification>
+	<notification name="FirstInventory">
+		Il s&apos;agit de votre inventaire qui contient vos possessions.
+
+* Pour porter quelque chose, faites glisser l&apos;objet sur vous-même.
+* Pour rezzer un objet dans le monde, faites-le glisser sur le sol.
+* Pour lire une note, double-cliquez dessus.
+	</notification>
+	<notification name="FirstSandbox">
+		Cette région est un bac à sable et est utilisée par les résidents pour apprendre à construire.
+
+Les objets que vous construisez ici seront supprimés après votre départ. N&apos;oubliez donc pas de cliquer droit et de choisir Prendre pour sauvegarder votre création dans votre inventaire.
+	</notification>
+	<notification name="FirstFlexible">
+		Cet objet est flexible. Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes.
+	</notification>
+	<notification name="FirstDebugMenus">
+		Vous avez ouvert le menu Avancé.
+
+Pour activer/désactiver ce menu,
+  Windows : Ctrl-Alt-D
+  Mac : ⌘-Opt-D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		Vous êtes en train d&apos;éditer un sculptie. Pour spécifier la forme d&apos;un sculptie, vous devez utiliser une texture spécifique.
+	</notification>
+	<notification name="MaxListSelectMessage">
+		Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME] vous invite à un chat vocal.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST] a reçu un message instantané et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST] a reçu un inventaire et n&apos;est donc plus ignoré.
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME] a rejoint un chat vocal avec le groupe [GROUP].
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME] a rejoint un chat vocal avec conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME] vous invite à un chat conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+		<form name="form">
+			<button name="Accept" text="Accepter"/>
+			<button name="Decline" text="Refuser"/>
+			<button name="Mute" text="Ignorer"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		L&apos;appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME] a mis fin à l&apos;appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
+	</notification>
+	<notification name="VoiceLoginRetry">
+		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		Seuls les membres d&apos;un certain groupe peuvent visiter cette zone.
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		Vous ne pouvez pas pénétrer sur ce terrain car l&apos;accès vous y est interdit.
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		Vous ne pouvez pas pénétrer sur ce terrain car vous n&apos;avez pas les droits d&apos;accès requis.
+	</notification>
+	<notification name="VoiceNotAllowed">
+		Vous n&apos;êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
+	</notification>
+	<notification name="VoiceCallGenericError">
+		Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="ServerVersionChanged">
+		La région dans laquelle vous avez pénétré utilise une version de serveur différente, ce qui peut avoir un impact sur votre performance. Cliquez pour voir les notes de version.
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		La SLurl que vous avez saisie n&apos;est pas prise en charge.
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="Répondre"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		L&apos;élément joint a été sauvegardé.
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		Impossible de trouver l&apos;aide.
+	</notification>
+	<global name="UnsupportedCPU">
+		- Votre processeur ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="UnsupportedGLRequirements">
+		Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d&apos;exploitation.
+
+Si vous avez toujours des problèmes, veuillez consulter la page [SUPPORT_SITE].
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- Votre carte graphique ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="UnsupportedRAM">
+		- Votre mémoire système ne remplit pas les conditions minimum requises.
+	</global>
+	<global name="PermYes">
+		Oui
+	</global>
+	<global name="PermNo">
+		Non
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		Si vous possédez un terrain, vous pouvez le définir comme domicile. 
+Sinon, consultez la carte et trouvez les « infohubs ».
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index f62ea7c80fb753f1b377ddf34288d223a024dd5f..afadd109b1da913bf49f4f240fd52e7e68ed6686 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Résident" />
-   <string name="AcctTypeTrial"
-    value="Essai" />
-   <string name="AcctTypeCharterMember"
-    value="Membre originaire" />
-   <string name="AcctTypeEmployee"
-    value="Employé(e) de Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Infos de paiement utilisées" />
-   <string name="PaymentInfoOnFile"
-    value="Infos de paiement enregistrées" />
-   <string name="NoPaymentInfoOnFile"
-    value="Aucune info de paiement" />
-   <string name="AgeVerified"
-    value="Âge vérifié" />
-   <string name="NotAgeVerified"
-    value="Âge non vérifié" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=fr
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partenaire :"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Réponse si occupé(e) :
-      </text>
-    </panel>
-    </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="Résident"/>
+	<string name="AcctTypeTrial" value="Essai"/>
+	<string name="AcctTypeCharterMember" value="Membre originaire"/>
+	<string name="AcctTypeEmployee" value="Employé(e) de Linden Lab"/>
+	<string name="PaymentInfoUsed" value="Infos de paiement utilisées"/>
+	<string name="PaymentInfoOnFile" value="Infos de paiement enregistrées"/>
+	<string name="NoPaymentInfoOnFile" value="Aucune info de paiement"/>
+	<string name="AgeVerified" value="Âge vérifié"/>
+	<string name="NotAgeVerified" value="Âge non vérifié"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=fr
+	</string>
+	<string name="no_partner_text" value="Aucun"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="Cliquez pour sélectionner une image"/>
+				<text name="title_homepage_text">
+					Page d&apos;accueil :
+				</text>
+				<check_box label="Afficher dans les résultats de recherche" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="Statut du compte :"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="Enregistrer les changements" name="save_btn"/>
+		<button label="Annuler" name="cancel_btn"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
index 4cb0b88672655dde0cd4707956fec1a28fe08c16..ae01f05bfbf8933c327fe57a6a08e02ac07be945 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
@@ -1,26 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Inviter un résident" name="invite_panel">
-	<text name="help_text">
-		Vous pouvez inviter plusieurs résidents
-à la fois. Cliquez d&apos;abord sur
-Choisir un résident.
-	</text>
-	<button label="Choisir un résident" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/>
-	<button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/>
-	<text>
-		Assignez-leur un rôle :
-	</text>
-	<text name="role_text">
-		Assignez-leur un rôle :
-	</text>
-	<combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/>
-	<button label="Envoyer les invitations" name="ok_button"/>
-	<button label="Annuler" name="cancel_button"/>
-	<string name="confirm_invite_owner_str">
-		Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
-	</string>
-	<string name="loading">
-		(en cours de chargement...)
-	</string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Inviter un résident" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
+	</panel.string>
+	<panel.string name="loading">
+		(en cours de chargement...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		Certains des avatars font déjà partie du groupe et n&apos;ont pas été invités.
+	</panel.string>
+	<text name="help_text">
+		Vous pouvez inviter plusieurs résidents
+à la fois. Cliquez d&apos;abord sur
+Choisir un résident.
+	</text>
+	<button label="Choisir un résident" name="add_button" tool_tip=""/>
+	<name_list name="invitee_list" tool_tip="Pour sélectionner plusieurs noms, maintenez la touche Ctrl enfoncée en cliquant sur le nom des résidents."/>
+	<button label="Supprimer de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés de la liste des invités."/>
+	<text name="role_text">
+		Assignez-leur un rôle :
+	</text>
+	<combo_box name="role_name" tool_tip="Choisissez des rôles à assigner aux membres dans la liste."/>
+	<button label="Envoyer les invitations" name="ok_button"/>
+	<button label="Annuler" name="cancel_button"/>
+	<string name="GroupInvitation">
+		Invitations au groupe
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
index 29259e2e42aa2f0b108a5714d4157c88d6350341..9a24b7a68716bb178f01cec178489ac3f7a1ad6b 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
@@ -1,86 +1,86 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Terrain et L$" name="land_money_tab">
-	<string name="help_text">
-		Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		Vous n&apos;avez pas la permission de voir quel terrain possède ce groupe.
-	</string>
-	<string name="cant_view_group_accounting_text">
-		Vous n&apos;avez pas la permission d&apos;accéder aux informations
-financières de ce groupe.
-	</string>
-	<string name="loading_txt">
-		Chargement...
-	</string>
-	<text name="group_land_heading">
-		Terrain du groupe
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="Parcelle" name="name"/>
-		<column label="Région" name="location"/>
-		<column label="Type" name="type"/>
-		<column label="Surface" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="Voir sur la carte" label_selected="Voir sur la carte" name="map_button"/>
-	<text name="total_contributed_land_label">
-		Total des contributions :
-	</text>
-	<text name="total_contributed_land_value">
-		[AREA] m²
-	</text>
-	<text name="total_land_in_use_label">
-		Superficie déjà utilisée :
-	</text>
-	<text name="total_land_in_use_value">
-		[AREA] m²
-	</text>
-	<text name="land_available_label">
-		Superficie disponible :
-	</text>
-	<text name="land_available_value">
-		[AREA] m²
-	</text>
-	<text name="your_contribution_label">
-		Votre contribution :
-	</text>
-	<string name="land_contrib_error">
-		Impossible de définir votre don de terre.
-	</string>
-	<text name="your_contribution_units">
-		( m² )
-	</text>
-	<text name="your_contribution_max_value">
-		([AMOUNT] max.)
-	</text>
-	<text name="group_over_limit_text">
-		Une contribution supplémentaire du groupe est requise pour prendre en
-charge le terrain utilisé.
-	</text>
-	<text name="group_money_heading">
-		Finances
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="Planification" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				Calcul en cours...
-			</text_editor>
-		</panel>
-		<panel label="Détails" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				Calcul en cours...
-			</text_editor>
-			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/>
-			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_details_button" tool_tip="Avancer dans le temps"/>
-		</panel>
-		<panel label="Ventes" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				Calcul en cours...
-			</text_editor>
-			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/>
-			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_sales_button" tool_tip="Avancer dans le temps"/>
-		</panel>
-	</tab_container>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Terrain et L$" name="land_money_tab">
+	<string name="help_text">
+		Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		Vous n&apos;avez pas la permission de voir quel terrain possède ce groupe.
+	</string>
+	<string name="cant_view_group_accounting_text">
+		Vous n&apos;avez pas la permission d&apos;accéder aux informations
+financières de ce groupe.
+	</string>
+	<string name="loading_txt">
+		Chargement...
+	</string>
+	<text name="group_land_heading">
+		Terrain du groupe
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="Parcelle" name="name"/>
+		<column label="Région" name="location"/>
+		<column label="Type" name="type"/>
+		<column label="Surface" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="Carte" label_selected="Carte" name="map_button"/>
+	<text name="total_contributed_land_label">
+		Total des contributions :
+	</text>
+	<text name="total_contributed_land_value">
+		[AREA] m²
+	</text>
+	<text name="total_land_in_use_label">
+		Superficie déjà utilisée :
+	</text>
+	<text name="total_land_in_use_value">
+		[AREA] m²
+	</text>
+	<text name="land_available_label">
+		Superficie disponible :
+	</text>
+	<text name="land_available_value">
+		[AREA] m²
+	</text>
+	<text name="your_contribution_label">
+		Votre contribution :
+	</text>
+	<string name="land_contrib_error">
+		Impossible de définir votre don de terre.
+	</string>
+	<text name="your_contribution_units">
+		( m² )
+	</text>
+	<text name="your_contribution_max_value">
+		([AMOUNT] max.)
+	</text>
+	<text name="group_over_limit_text">
+		Une contribution supplémentaire du groupe est requise pour prendre en
+charge le terrain utilisé.
+	</text>
+	<text name="group_money_heading">
+		Finances
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="Planification" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				Calcul en cours...
+			</text_editor>
+		</panel>
+		<panel label="Détails" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				Calcul en cours...
+			</text_editor>
+			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_details_button" tool_tip="Reculer dans le temps"/>
+			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_details_button" tool_tip="Avancer dans le temps"/>
+		</panel>
+		<panel label="Ventes" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				Calcul en cours...
+			</text_editor>
+			<button label="&lt; Plus tôt" label_selected="&lt; Plus tôt" name="earlier_sales_button" tool_tip="Reculer dans le temps"/>
+			<button label="Plus tard &gt;" label_selected="Plus tard &gt;" name="later_sales_button" tool_tip="Avancer dans le temps"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15d48c4eb4cb441d040e92baa979eabaa4f75d86
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+	<text name="group_name" value="Inconnu"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
index 841ac5e7ee57e114675d5140c06a20ab1ff6241a..b719f1f07ff397e9217fb5484fca5c22bdd7632f 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
@@ -1,67 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Notices" name="notices_tab">
-	<text name="help_text">
-		Les notices vous permettent d&apos;envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l&apos;onglet Général.
-	</text>
-	<text name="no_notices_text">
-		Aucune notice
-	</text>
-	<button label="?" label_selected="?" name="help_button"/>
-	<text name="lbl">
-		Anciennes notices du groupe
-	</text>
-	<text name="lbl2">
-		Les notices sont conservées pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices.
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon"/>
-		<column label="Sujet" name="subject"/>
-		<column label="De" name="from"/>
-		<column label="Date" name="date"/>
-	</scroll_list>
-	<text name="notice_list_none_found">
-		Aucun résultat.
-	</text>
-	<button label="Créer une notice" label_selected="Créer une notice" name="create_new_notice"/>
-	<button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/>
-	<panel label="Créer une notice" name="panel_create_new_notice">
-		<text name="lbl">
-			Créer une notice
-		</text>
-		<text name="lbl2">
-			Pour joindre une pièce-jointe à cette notice, faites-la glisser depuis votre inventaire vers cette fenêtre. Les pièces-jointes doivent être copiables et transférables. Il n&apos;est pas possible d&apos;envoyer de dossiers.
-		</text>
-		<text bottom_delta="-79" name="lbl3" left="20">
-			Sujet :
-		</text>
-		<line_editor name="create_subject" width="331" left_delta="61"/>
-		<text name="lbl4" left="20">
-			Message :
-		</text>
-		<text_editor name="create_message" bottom_delta="-90" height="104" left_delta="61" width="330"/>
-		<text name="lbl5" width="68">
-			Pièce-jointe :
-		</text>
-		<line_editor name="create_inventory_name" width="190" left_delta="74"/>
-		<button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
-		<button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/>
-		<panel name="drop_target2" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
-		<panel name="drop_target" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
-	</panel>
-	<panel label="Voir ancienne notice" name="panel_view_past_notice">
-		<text name="lbl">
-			Détails
-		</text>
-		<text name="lbl2">
-			Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
-		</text>
-		<text name="lbl3">
-			Sujet :
-		</text>
-		<text name="lbl4">
-			Message :
-		</text>
-		<button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
-		<line_editor left="128" name="view_inventory_name" width="256"/>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Notices" name="notices_tab">
+	<text name="help_text">
+		Les notices vous permettent d&apos;envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l&apos;onglet Général.
+	</text>
+	<text name="no_notices_text">
+		Aucune notice
+	</text>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		Anciennes notices du groupe
+	</text>
+	<text name="lbl2">
+		Les notes sont conservées pendant 14 jours. La limite est de 200 notes quotidiennes par groupe.
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="Sujet" name="subject"/>
+		<column label="De" name="from"/>
+		<column label="Date" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		Aucun résultat.
+	</text>
+	<button label="Nouvelle note" label_selected="Créer une notice" name="create_new_notice"/>
+	<button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices"/>
+	<panel label="Créer une notice" name="panel_create_new_notice">
+		<text name="lbl">
+			Créer une notice
+		</text>
+		<text name="lbl2">
+			Vous pouvez ajouter un objet simple à la note en le faisant glisser de votre inventaire vers cette section. Les objets joints doivent pouvoir être copiés et transférés. Vous ne pouvez pas envoyer de dossier.
+		</text>
+		<text bottom_delta="-79" left="20" name="lbl3">
+			Sujet :
+		</text>
+		<line_editor left_delta="61" name="create_subject" width="331"/>
+		<text left="20" name="lbl4">
+			Message :
+		</text>
+		<text_editor bottom_delta="-90" height="104" left_delta="61" name="create_message" width="330"/>
+		<text name="lbl5" width="68">
+			Pièce-jointe :
+		</text>
+		<line_editor left_delta="74" name="create_inventory_name" width="190"/>
+		<button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
+		<button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/>
+		<panel name="drop_target2" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+		<panel name="drop_target" tool_tip="Pour joindre un objet de l&apos;inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/>
+	</panel>
+	<panel label="Voir ancienne notice" name="panel_view_past_notice">
+		<text name="lbl">
+			Détails
+		</text>
+		<text name="lbl2">
+			Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
+		</text>
+		<text name="lbl3">
+			Sujet :
+		</text>
+		<text name="lbl4">
+			Message :
+		</text>
+		<button label="Ouvrir pièce-jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/>
+		<line_editor left="128" name="view_inventory_name" width="256"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
index 008402db32796fc20157f0f4f2e987ccb9b80bce..1b716babc654dc4d20eb4c5dec0038d4c3dc74c0 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -1,160 +1,113 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Membres et rôles" name="roles_tab">
-	<text name="default_needs_apply_text">
-		Certains changements n&apos;ont pas été appliqués sur ce sous-onglet.
-	</text>
-	<text name="want_apply_text">
-		Voulez-vous enregistrer les modifications ?
-	</text>
-	<text name="cant_delete_role">
-		Les Rôles Tout le monde et Propriétaires sont spéciaux et ne peuvent être supprimés.
-	</text>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			Membres
-		</text>
-		<text name="static2">
-			Les rôles de chaque membre peuvent être personnalisés, ce qui permet une
-meilleure organisation du groupe.
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			Rôles
-		</text>
-		<text name="role_properties_modifiable">
-			Sélectionnez un rôle ci-dessous. Vous pouvez modifier le nom, la
-description et le titre du membre.
-		</text>
-		<text name="role_properties_not_modifiable">
-			Sélectionnez un rôle ci-dessous pour en connaître les propriétés, les
-membres et les pouvoirs.
-		</text>
-		<text bottom_delta="-28" name="role_actions_modifiable">
-			Vous pouvez aussi assigner des pouvoirs au rôle.
-		</text>
-		<text name="role_actions_not_modifiable">
-			Vous pouvez afficher mais non modifier les pouvoirs assignés.
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			Pouvoirs
-		</text>
-		<text name="static2">
-			Vous pouvez afficher la description du pouvoir et voir à quels rôles ou à
-quels membres ces pouvoirs sont assignés.
-		</text>
-	</panel>
-	<tab_container height="164" name="roles_tab_container">
-		<panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<name_list bottom_delta="-105" height="104" name="member_list">
-				<column label="Nom du membre" name="name"/>
-				<column label="Surface donnée" name="donated" width="116"/>
-				<column label="Dernière connexion" name="online" width="136"/>
-			</name_list>
-			<button label="Inviter un membre..." name="member_invite" width="165"/>
-			<button label="Expulser un membre" name="member_eject"/>
-			<text name="help_text">
-				Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
-Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
-			</text>
-		</panel>
-		<panel height="148" label="Rôles" name="roles_sub_tab">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<scroll_list bottom_delta="-104" height="104" name="role_list">
-				<column label="Nom du rôle" name="name"/>
-				<column label="Titre" name="title"/>
-				<column label="Membres" name="members"/>
-			</scroll_list>
-			<button label="Créer un rôle..." name="role_create"/>
-			<button label="Supprimer le rôle" name="role_delete"/>
-			<text name="help_text">
-				Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
-			</text>
-			<string name="cant_delete_role">
-				Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
-			</string>
-		</panel>
-		<panel height="148" label="Pouvoirs" name="actions_sub_tab">
-			<line_editor bottom="127" name="search_text"/>
-			<button label="Rechercher" name="search_button" width="75"/>
-			<button label="Afficher tout" left_delta="80" name="show_all_button"/>
-			<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails.">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<text name="help_text">
-				Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
-			</text>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			Rôles assignés
-		</text>
-		<text name="static2">
-			Pouvoirs attribués
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			Nom
-		</text>
-		<text name="static2">
-			Description
-		</text>
-		<line_editor name="role_name">
-			Employés
-		</line_editor>
-		<text name="static3">
-			Titre
-		</text>
-		<line_editor name="role_title">
-			(en attente)
-		</line_editor>
-		<text_editor name="role_description">
-			(en attente)
-		</text_editor>
-		<text name="static4">
-			Membres assignés
-		</text>
-		<text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès.">
-			Pouvoirs attribués
-		</text>
-		<check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l&apos;onglet Général aux personnes en dehors du groupe."/>
-		<scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			Description
-		</text>
-		<text_editor name="action_description">
-			Ce pouvoir permet d&apos;expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
-		</text_editor>
-		<text name="static2">
-			Rôles avec ce pouvoir
-		</text>
-		<text name="static3">
-			Membres avec ce pouvoir
-		</text>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Membres et rôles" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		Certains changements n&apos;ont pas été appliqués sur ce sous-onglet.
+	</panel.string>
+	<panel.string name="want_apply_text">
+		Voulez-vous enregistrer les modifications ?
+	</panel.string>
+	<tab_container height="164" name="roles_tab_container">
+		<panel height="148" label="Membres" name="members_sub_tab" tool_tip="Membres">
+			<panel.string name="help_text">
+				Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
+Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
+			</panel.string>
+			<filter_editor label="Filtrer les membres" name="filter_input"/>
+			<name_list bottom_delta="-105" height="104" name="member_list">
+				<name_list.columns label="Membre" name="name"/>
+				<name_list.columns label="Donations" name="donated" width="116"/>
+				<name_list.columns label="En ligne" name="online" width="136"/>
+			</name_list>
+			<button label="Inviter" name="member_invite" width="165"/>
+			<button label="Expulser" name="member_eject"/>
+		</panel>
+		<panel height="148" label="Rôles" name="roles_sub_tab">
+			<panel.string name="help_text">
+				Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
+			</panel.string>
+			<filter_editor label="Filtrer les rôles" name="filter_input"/>
+			<scroll_list bottom_delta="-104" height="104" name="role_list">
+				<scroll_list.columns label="Rôle" name="name"/>
+				<scroll_list.columns label="Titre" name="title"/>
+				<scroll_list.columns label="Membres" name="members"/>
+			</scroll_list>
+			<button label="Ajouter un rôle" name="role_create"/>
+			<button label="Supprimer le rôle" name="role_delete"/>
+		</panel>
+		<panel height="148" label="Pouvoirs" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s&apos;en servir.">
+			<panel.string name="help_text">
+				Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
+			</panel.string>
+			<filter_editor label="Filtrer les pouvoirs" name="filter_input"/>
+			<scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en afficher les détails.">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			Rôles assignés
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			Pouvoirs attribués
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			Nom
+		</text>
+		<line_editor name="role_name">
+			Employés
+		</line_editor>
+		<text name="static3">
+			Titre
+		</text>
+		<line_editor name="role_title">
+			(en attente)
+		</line_editor>
+		<text name="static2">
+			Description
+		</text>
+		<text_editor name="role_description">
+			(en attente)
+		</text_editor>
+		<text name="static4">
+			Membres assignés
+		</text>
+		<check_box label="Membres visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce rôle sont visibles à partir de l&apos;onglet Général aux personnes en dehors du groupe."/>
+		<text name="static5" tool_tip="Une liste des pouvoirs auquel le rôle sélectionné a accès.">
+			Pouvoirs attribués
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="Pour avoir des détails sur chacun des pouvoirs attribués, allez à l&apos;onglet Pouvoirs.">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			Description
+		</text>
+		<text_editor name="action_description">
+			Ce pouvoir permet d&apos;expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
+		</text_editor>
+		<text name="static2">
+			Rôles avec ce pouvoir
+		</text>
+		<text name="static3">
+			Membres avec ce pouvoir
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f8f03f9aba4c589104b2cc23504e88d0f01ca96
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="Voir le profil" name="view_profile_btn"/>
+	<button label="Devenir amis" name="add_friend_btn"/>
+	<button label="Partager" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="Appeler" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index eeef97454f56d2517fef4e9752afefc65420bf24..3c174aa45bda18e53b4a789b751786d444edbec0 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -1,43 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_login">
-	<string name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</string>
-	<text name="first_name_text">
-		Prénom :
-	</text>
-	<text name="last_name_text">
-		Nom :
-	</text>
-	<text name="password_text">
-		Mot de passe :
-	</text>
-	<text name="start_location_text">
-		Lieu de départ :
-	</text>
-	<combo_box name="start_location_combo">
-		<combo_box.item name="MyHome" label="Domicile" />
-		<combo_box.item name="MyLastLocation" label="Dernier emplacement" />
-		<combo_box.item name="Typeregionname" label="&lt;Nom de la région&gt;" />
-	</combo_box>
-	<check_box label="Mémoriser" name="remember_check"/>
-	<text name="full_screen_text">
-		Le plein écran sera activé après identification.
-	</text>
-	<button label="Nouveau Compte..." label_selected="Nouveau Compte..." name="new_account_btn"/>
-	<button label="Me connecter" label_selected="Me connecter" name="connect_btn"/>
-	<button label="Préférences..." label_selected="Préférences..." name="preferences_btn"/>
-	<button label="Quitter" label_selected="Quitter" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		Créer un compte
-	</text>
-	<text name="forgot_password_text">
-		Nom ou mot de passe oublié ?
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="Prénom sur [SECOND_LIFE]"/>
+		<line_editor name="last_name_edit" tool_tip="Nom sur [SECOND_LIFE]"/>
+		<text name="start_location_text">
+			Lieu de départ :
+		</text>
+		<text name="create_new_account_text">
+			Créer un compte
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7aa8f2440494fd5b437ce91b6698236d09099b75
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entrée pour dire, Ctrl-Entrée pour crier"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..534af5ed3f20cc72762fb2fed7f0beca2d3c1094
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Favoris" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="Ajouter cet endroit à mes Favoris"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="Carte" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index f616591c4e89772bf7153d6ce1a7f7df9f16d0a4..1f7c9a57dc8ca31b7dae1047899ef5f28f458cff 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,59 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Chat écrit" name="chat">
-	<text name="text_box">
-		Taille de la police 
-du chat :
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="Petite" />
-		<radio_item name="radio2" label="Moyenne" />
-		<radio_item name="radio3" label="Grande" />
-	</radio_group>
-	<color_swatch label="Vous" name="user"/>
-	<text name="text_box1">
-		Vous
-	</text>
-	<color_swatch label="Avatars" name="agent"/>
-	<text name="text_box2">
-		Avatars
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="Système" name="system"/>
-	<text name="text_box4">
-		Système
-	</text>
-	<color_swatch label="Erreurs de script" name="script_error"/>
-	<text name="text_box5">
-		Erreurs de script
-	</text>
-	<color_swatch label="Objets" name="objects"/>
-	<text name="text_box6">
-		Objets
-	</text>
-	<color_swatch label="Propriétaire" name="owner"/>
-	<text name="text_box7">
-		Propriétaire
-	</text>
-	<color_swatch label="Bulle" name="background"/>
-	<text name="text_box8">
-		Bulle
-	</text>
-	<color_swatch label="URL" name="links"/>
-	<text name="text_box9">
-		URL
-	</text>
-	<spinner label="Effacer le texte après" label_width="112" name="fade_chat_time" width="162"/>
-	<spinner left="335" name="max_chat_count"/>
-	<slider label="Opacité" name="console_opacity"/>
-	<check_box label="Utiliser la largeur de l&apos;écran (redémarrage requis)" name="chat_full_width_check"/>
-	<check_box label="Fermer le chat après avoir appuyé sur Entrée" name="close_chat_on_return_check"/>
-	<check_box label="Faire bouger l&apos;avatar avec les touches de direction" name="arrow_keys_move_avatar_check"/>
-	<check_box label="Afficher les heures dans le chat" name="show_timestamps_check"/>
-	<check_box label="Jouer l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
-	<check_box label="Afficher les bulles de chat" name="bubble_text_chat"/>
-	<slider label="Opacité" name="bubble_chat_opacity"/>
-	<check_box label="Afficher les erreurs dans le chat" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Chat écrit" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="Petite" name="radio"/>
+		<radio_item label="Moyenne" name="radio2"/>
+		<radio_item label="Grande" name="radio3"/>
+	</radio_group>
+	<color_swatch label="Vous" name="user"/>
+	<text name="text_box1">
+		Moi
+	</text>
+	<color_swatch label="Avatars" name="agent"/>
+	<text name="text_box2">
+		Avatars
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="Système" name="system"/>
+	<text name="text_box4">
+		Système
+	</text>
+	<color_swatch label="Erreurs de script" name="script_error"/>
+	<text name="text_box5">
+		Erreurs de script
+	</text>
+	<color_swatch label="Objets" name="objects"/>
+	<text name="text_box6">
+		Objets
+	</text>
+	<color_swatch label="Propriétaire" name="owner"/>
+	<text name="text_box7">
+		Propriétaire
+	</text>
+	<color_swatch label="URL" name="links"/>
+	<text name="text_box9">
+		URL
+	</text>
+	<check_box initial_value="true" label="Jouer l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
+	<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index 726ebc78b0fea08c3420755d504851316d242334..2afd7152cb7c86011ed513cbd1f37d66ca228c88 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -1,163 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Graphiques" name="Display panel">
-	<button label="?" name="GraphicsPreferencesHelpButton"/>
-	<text_editor bottom="-56" height="40" left="25" name="FullScreenInfo" width="460">
-		Décochez cette option pour passer en mode plein écran.
-	</text_editor>
-	<text name="WindowSizeLabel">
-		Taille de la fenêtre :
-	</text>
-	<combo_box name="windowsize combo">
-		<combo_box.item name="640x480" label="640 x 480" />
-		<combo_box.item name="800x600" label="800 x 600" />
-		<combo_box.item name="720x480" label="720 x 480 (NTSC)" />
-		<combo_box.item name="768x576" label="768 x 576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024 x 768" />
-	</combo_box>
-	<text name="DisplayResLabel" width="165">
-		Résolution de l&apos;affichage :
-	</text>
-	<text name="AspectRatioLabel1" tool_tip="largeur/hauteur">
-		Rapport hauteur/largeur :
-	</text>
-	<combo_box name="aspect_ratio" tool_tip="largeur/hauteur">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280 x 1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5 (écran large)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9 (plein écran)" />
-	</combo_box>
-	<text name="text">
-		Résolution d&apos;affichage :
-	</text>
-	<text name="Fullscreen Aspect Ratio:">
-		Format de plein écran :
-	</text>
-	<text name="(width / height)">
-		(largeur / hauteur)
-	</text>
-	<text name="UI Size:">
-		Taille de l&apos;IU :
-	</text>
-	<text name="(meters, lower is faster)">
-		(mètres, moins = plus rapide)
-	</text>
-	<text name="text2">
-		Options d&apos;affichage :
-	</text>
-	<check_box label="Lancer Second Life en mode fenêtré" name="windowed mode"/>
-	<check_box label="Auto-détection du ratio" left="350" name="aspect_auto_detect"/>
-	<check_box label="Utiliser échelle de résolution indépendante" name="ui_auto_scale"/>
-	<check_box label="Montrer l&apos;avatar en vue subjective" name="avfp"/>
-	<spinner label="Distance d&apos;affichage :" name="draw_distance"/>
-	<text name="HigherText">
-		Qualité et
-	</text>
-	<text name="QualityText">
-		Performance :
-	</text>
-	<text left="105" name="FasterText">
-		Plus rapide
-	</text>
-	<text name="ShadersPrefText">
-		Faible
-	</text>
-	<text name="ShadersPrefText2">
-		Moyen
-	</text>
-	<text name="ShadersPrefText3">
-		Élevé
-	</text>
-	<text name="ShadersPrefText4">
-		Ultra
-	</text>
-	<text bottom="-86" left="325" name="HigherText2">
-		Plus élevée
-	</text>
-	<text name="QualityText2" visible="false"/>
-	<check_box label="Personnaliser" left="395" name="CustomSettings"/>
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		Effets :
-	</text>
-	<check_box label="Placage de relief et brillance" name="BumpShiny"/>
-	<check_box label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/>
-	<check_box label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
-	<check_box label="Reflets de l&apos;eau" name="Reflections"/>
-	<text name="ReflectionDetailText">
-		Objets reflétés :
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="Terrain et Arbres" />
-		<radio_item name="1" label="Objets statiques" />
-		<radio_item name="2" label="Objets et avatars" />
-		<radio_item name="3" label="Tout" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		Rendu de l&apos;avatar :
-	</text>
-	<check_box label="Avatars éloignés en 2D" name="AvatarImpostors"/>
-	<check_box label="Accélération du rendu" name="AvatarVertexProgram"/>
-	<check_box label="Mouvement des habits" name="AvatarCloth"/>
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="Limite d&apos;affichage :" name="DrawDistance"/>
-	<slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/>
-	<slider label="Qualité post-traitement :" name="RenderPostProcess"/>
-	<text name="MeshDetailText">
-		Détails des rendus :
-	</text>
-	<slider label="  Objets :" name="ObjectMeshDetail"/>
-	<slider label="  Flexiprims :" name="FlexibleMeshDetail"/>
-	<slider label="  Arbres :" name="TreeMeshDetail"/>
-	<slider label="  Avatars :" name="AvatarMeshDetail"/>
-	<slider label="  Relief :" name="TerrainMeshDetail"/>
-	<slider label="  Ciel :" name="SkyMeshDetail"/>
-	<text name="PostProcessText">
-		Faible
-	</text>
-	<text name="ObjectMeshDetailText">
-		Faible
-	</text>
-	<text name="FlexibleMeshDetailText">
-		Faible
-	</text>
-	<text name="TreeMeshDetailText">
-		Faible
-	</text>
-	<text name="AvatarMeshDetailText">
-		Faible
-	</text>
-	<text name="TerrainMeshDetailText">
-		Faible
-	</text>
-	<text name="SkyMeshDetailText">
-		Faible
-	</text>
-	<text name="LightingDetailText">
-		Sources lumineuses :
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="Soleil et lune uniquement" />
-		<radio_item name="LocalLights" label="Lumières à proximité" />
-	</radio_group>
-	<text left="380" name="TerrainDetailText">
-		Rendu du terrain :
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="Faible" />
-		<radio_item name="2" label="Élevé" />
-	</radio_group>
-	</panel>
-	<button label="Paramètres recommandés" name="Defaults"/>
-	<button label="Configuration du matériel" label_selected="Configuration du matériel" name="GraphicsHardwareButton"/>
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Graphiques" name="Display panel">
+	<text name="WindowSizeLabel">
+		Taille de la fenêtre :
+	</text>
+	<check_box label="Utiliser le plein écran" name="windowed mode"/>
+	<combo_box name="windowsize combo">
+		<combo_box.item label="640 x 480" name="640x480"/>
+		<combo_box.item label="800 x 600" name="800x600"/>
+		<combo_box.item label="720 x 480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768 x 576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024 x 768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		Taille de l&apos;IU :
+	</text>
+	<text name="QualitySpeed">
+		Qualité et vitesse :
+	</text>
+	<text left="105" name="FasterText">
+		Plus rapide
+	</text>
+	<text name="BetterText">
+		Mieux
+	</text>
+	<text name="ShadersPrefText">
+		Faible
+	</text>
+	<text name="ShadersPrefText2">
+		Moyen
+	</text>
+	<text name="ShadersPrefText3">
+		Élevé
+	</text>
+	<text name="ShadersPrefText4">
+		Ultra
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			Effets :
+		</text>
+		<check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/>
+		<check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="Désactiver cette option peut empêcher certains drivers de cartes graphiques de planter."/>
+		<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="Reflets de l&apos;eau" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			Objets reflétés :
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="Terrain et Arbres" name="0"/>
+			<radio_item label="Objets statiques" name="1"/>
+			<radio_item label="Objets et avatars" name="2"/>
+			<radio_item label="Tout" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			Rendu de l&apos;avatar :
+		</text>
+		<check_box initial_value="true" label="Avatars éloignés en 2D" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Accélération du rendu" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
+		<slider label="Limite d&apos;affichage :" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/>
+		<slider label="Qualité post-traitement :" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			Détails des rendus :
+		</text>
+		<slider label="  Objets :" name="ObjectMeshDetail"/>
+		<slider label="  Flexiprims :" name="FlexibleMeshDetail"/>
+		<slider label="  Arbres :" name="TreeMeshDetail"/>
+		<slider label="  Avatars :" name="AvatarMeshDetail"/>
+		<slider label="  Relief :" name="TerrainMeshDetail"/>
+		<slider label="  Ciel :" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			Faible
+		</text>
+		<text name="ObjectMeshDetailText">
+			Faible
+		</text>
+		<text name="FlexibleMeshDetailText">
+			Faible
+		</text>
+		<text name="TreeMeshDetailText">
+			Faible
+		</text>
+		<text name="AvatarMeshDetailText">
+			Faible
+		</text>
+		<text name="TerrainMeshDetailText">
+			Faible
+		</text>
+		<text name="SkyMeshDetailText">
+			Faible
+		</text>
+		<text name="LightingDetailText">
+			Sources lumineuses :
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="Soleil et lune uniquement" name="SunMoon"/>
+			<radio_item label="Lumières à proximité" name="LocalLights"/>
+		</radio_group>
+		<text left="380" name="TerrainDetailText">
+			Rendu du terrain :
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="Faible" name="0"/>
+			<radio_item label="Élevé" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="Appliquer" label_selected="Appliquer" name="Apply"/>
+	<button label="Réinitialiser" name="Defaults"/>
+	<button label="Avancé" name="Advanced"/>
+	<button label="Matériel" label_selected="Matériel" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
index 527097b392f8ffd70004bcc12fa7a0cacd744f6c..c1a6d450891124c59b2e7868f66a822eb84634c8 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
@@ -1,32 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Communication" name="im">
-	<text name="text_box">
-		Mon statut en ligne :
-	</text>
-	<check_box label="Seuls mes amis et groupes voient quand je suis connecté(e)" name="online_visibility"/>
-	<text name="log_in_to_change">
-		se connecter pour changer
-	</text>
-	<check_box label="Envoyer les IM à mon adresse e-mail ([EMAIL])" name="send_im_to_email"/>
-	<check_box label="Afficher les IM dans la console du chat" name="include_im_in_chat_console"/>
-	<check_box label="Afficher l&apos;heure dans les IM" name="show_timestamps_check"/>
-	<check_box label="Me prévenir quand des amis se connectent" name="friends_online_notify_checkbox"/>
-	<text name="text_box3">
-		Réponse si occupé(e) :
-	</text>
-	<text name="text_box4">
-		Enregistrements :
-	</text>
-	<check_box label="Enregistrer les IM sur mon ordinateur" name="log_instant_messages"/>
-	<check_box label="Inclure les heures" name="log_instant_messages_timestamp"/>
-	<check_box label="Enregistrer le chat local sur mon ordinateur" name="log_chat"/>
-	<check_box label="Inclure la fin de la dernière conversation IM" name="log_show_history"/>
-	<check_box label="Inclure les heures" name="log_chat_timestamp"/>
-	<check_box label="Inclure les IM reçus" name="log_chat_IM"/>
-	<check_box label="Inclure la date avec les heures" name="log_date_timestamp"/>
-	<button label="Changer d&apos;emplacement" label_selected="Changer d&apos;emplacement" name="log_path_button" width="150"/>
-	<line_editor left="308" name="log_path_string" right="-20"/>
-	<text name="text_box2">
-		IM :
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Communication" name="im">
+	<panel.string name="log_in_to_change">
+		se connecter pour changer
+	</panel.string>
+	<button label="Vider le cache" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(Endroits, images, web, historique des recherches)
+	</text>
+	<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>
+	<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
+	<check_box label="Fermer le micro à la fin d&apos;un appel" name="auto_disengage_mic_check"/>
+	<check_box label="Accepter les cookies" name="cookies_enabled"/>
+	<check_box label="Sauvegarder les journaux sur mon ordinateur" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="Chat" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<line_editor left="308" name="log_path_string" right="-20"/>
+	<button label="Parcourir" label_selected="Parcourir" name="log_path_button" width="150"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index b52ab672b00b258b961fe838ae0f674cf526ddd0..7f6c7c57bd92f61a554198e557cee6a8e983d8cf 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -1,30 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Contrôle et caméra" name="Input panel">
-	<text name=" Mouselook Options:">
-		Vue subjective :
-	</text>
-	<text name=" Mouse Sensitivity:">
-		Sensibilité de la souris :
-	</text>
-	<check_box label="Inverser la souris" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		Vol automatique :
-	</text>
-	<check_box label="Voler/atterrir en appuyant sur la flèche du haut/bas" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		Options de la caméra :
-	</text>
-	<text name="camera_fov_label">
-		Angle de vision :
-	</text>
-	<text name="Camera Follow Distance:">
-		Distance :
-	</text>
-	<check_box label="Ajustement automatique en mode Édition" name="edit_camera_movement" tool_tip="Positionner automatiquement la caméra lors de l&apos;entrée ou de la sortie du mode Édition"/>
-	<check_box label="Ajustement automatique en mode Édition d&apos;apparence" name="appearance_camera_movement" tool_tip="Positionner automatiquement la caméra en mode Édition"/>
-	<text name="text2">
-		Affichage de l&apos;avatar :
-	</text>
-	<check_box label="Montrer l&apos;avatar en vue subjective" name="first_person_avatar_visible"/>
-	<button label="Configuration du joystick" name="joystick_setup_button" width="175"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Contrôle et caméra" name="Input panel">
+	<button label="Autres accessoires" name="joystick_setup_button" width="175"/>
+	<text name="Mouselook:">
+		Vue subjective :
+	</text>
+	<text name=" Mouse Sensitivity">
+		Sensibilité de la souris
+	</text>
+	<check_box label="Inverser" name="invert_mouse"/>
+	<text name="Network:">
+		Réseau :
+	</text>
+	<text name="Maximum bandwidth">
+		Bande passante maximale
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="Port de connexion personnalisé" name="connection_port_enabled"/>
+	<spinner label="Numéro de port :" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		Taille de la mémoire
+	</text>
+	<text name="text_box5">
+		Mo
+	</text>
+	<button label="Parcourir" label_selected="Parcourir" name="set_cache"/>
+	<button label="Réinitialiser" label_selected="Choisir" name="reset_cache"/>
+	<text name="Cache location">
+		Emplacement du cache
+	</text>
+	<text name="Web:">
+		Web :
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l&apos;aide, ouvrir des liens etc. Ce navigateur s&apos;ouvre dans [APP_NAME]."/>
+		<radio_item label="Utiliser mon navigateur (IE, Firefox etc.)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l&apos;aide, les liens etc. Non recommandé en mode plein écran."/>
+	</radio_group>
+	<check_box initial_value="false" label="Proxy web" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="Le nom ou adresse IP du proxy que vous souhaitez utiliser"/>
+	<button label="Parcourir" label_selected="Parcourir" name="set_proxy"/>
+	<text name="Proxy location">
+		Emplacement du proxy
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index facd22988c7e2a38afb31901bd55d21bf8cd9815..c002c55c23e4148ea2a238436379378e0a395ab9 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Audio et vidéo" name="Preference Media panel">
-	<slider label="Principal" name="System Volume"/>
-	<slider label="Son ambiant" name="Wind Volume"/>
-	<slider label="Sons" name="SFX Volume"/>
-	<slider label="Média" name="Media Volume"/>
-	<slider label="Interface" name="UI Volume"/>
-	<slider label="Musique" name="Music Volume"/>
-	<slider label="Voix" name="Voice Volume"/>
-	<text_editor name="voice_unavailable">
-		Le chat vocal n&apos;est pas disponible
-	</text_editor>
-	<check_box label="Activer la voix" name="enable_voice_check"/>
-	<radio_group name="ear_location">
-		<radio_item name="0" label="Écouter depuis la position de la caméra." />
-		<radio_item name="1" label="Écouter depuis la position de l&apos;avatar." />
-	</radio_group>
-	<button label="Paramètres du matériel" name="device_settings_btn"/>
-	<text name="muting_text">
-		Volume :
-	</text>
-	<panel name="Volume Panel" width="249"/>
-	<check_box label="Couper le son" name="disable audio"/>
-	<text bottom="-195" name="streaming_prefs_text" width="145">
-		Média :
-	</text>
-	<text name="audio_prefs_text">
-		Audio :
-	</text>
-	<panel label="Volume" name="Volume Panel"/>
-	<check_box label="Couper le son lorsque la fenêtre est minimisée" name="mute_when_minimized"/>
-	<check_box label="Jouer la musique disponible" name="streaming_music"/>
-	<check_box label="Jouer le média disponible" name="streaming_video"/>
-	<check_box label="Lire automatiquement le média" name="auto_streaming_video"/>
-	<slider label="Effet Doppler" label_width="115" name="Doppler Effect"/>
-	<slider label="Facteur d&apos;éloignement" label_width="115" name="Distance Factor"/>
-	<slider label="Facteur d&apos;atténuation" label_width="115" name="Rolloff Factor"/>
-	<spinner label="Alerte L$" name="L$ Change Threshold"/>
-	<spinner label="Alerte santé" name="Health Change Threshold"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Audio et vidéo" name="Preference Media panel">
+	<slider label="Volume principal" name="System Volume"/>
+	<slider label="Son ambiant" name="Wind Volume"/>
+	<slider label="Sons" name="SFX Volume"/>
+	<slider label="Média" name="Media Volume"/>
+	<slider label="Interface" name="UI Volume"/>
+	<slider label="Musique" name="Music Volume"/>
+	<slider label="Voix" name="Voice Volume"/>
+	<text_editor name="voice_unavailable">
+		Le chat vocal n&apos;est pas disponible
+	</text_editor>
+	<check_box label="Chat vocal" name="enable_voice_check"/>
+	<radio_group name="ear_location">
+		<radio_item label="Écouter depuis la position de la caméra" name="0"/>
+		<radio_item label="Écouter depuis la position de l&apos;avatar" name="1"/>
+	</radio_group>
+	<button label="Paramètres du matériel" name="device_settings_btn"/>
+	<text name="muting_text">
+		Volume :
+	</text>
+	<panel name="Volume Panel" width="249"/>
+	<check_box label="Couper le son" name="disable audio"/>
+	<text bottom="-195" name="streaming_prefs_text" width="145">
+		Média :
+	</text>
+	<text name="audio_prefs_text">
+		Audio :
+	</text>
+	<panel label="Volume" name="Volume Panel"/>
+	<check_box label="Couper le son quand minimisé" name="mute_when_minimized"/>
+	<check_box label="Jouer la musique disponible" name="streaming_music"/>
+	<check_box label="Jouer le média disponible" name="streaming_video"/>
+	<check_box label="Lire automatiquement le média" name="auto_streaming_video"/>
+	<slider label="Effet Doppler" label_width="115" name="Doppler Effect"/>
+	<slider label="Facteur d&apos;éloignement" label_width="115" name="Distance Factor"/>
+	<slider label="Facteur d&apos;atténuation" label_width="115" name="Rolloff Factor"/>
+	<spinner label="Alerte L$" name="L$ Change Threshold"/>
+	<spinner label="Alerte santé" name="Health Change Threshold"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd67605d9f2a8eae4b99262182d92e31bb997c18
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profil" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=en
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/account"/>
+	<string name="no_partner_text" value="Aucun"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE] :"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="Monde physique :"/>
+			</panel>
+			<text name="me_homepage_text">
+				Page d&apos;accueil :
+			</text>
+			<text name="title_member_text" value="Membre depuis :"/>
+			<text name="title_acc_status_text" value="Statut du compte :"/>
+			<text name="title_partner_text" value="Partenaire :"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="Groupes :"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="Devenir amis" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="Appeler" name="call"/>
+		<button label="Téléporter" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="Modifier le profil" name="edit_profile_btn"/>
+		<button label="Changer d&apos;apparence" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile_view.xml b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..44539ddba478dc46633c306b6af312e60c56c676
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		En ligne
+	</string>
+	<string name="status_offline">
+		Hors ligne
+	</string>
+	<text name="user_name" value="(en cours de chargement...)"/>
+	<text name="status" value="En ligne"/>
+	<tab_container name="tabs">
+		<panel label="Profil" name="panel_profile"/>
+		<panel label="Favoris" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5790efe2f8f3fcbfb41f9c915cc3836e9f847927
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		Chargement…
+	</panel.string>
+	<panel.string name="can_not_view">
+		Ce scipt ne peut pas être copié, visualisé ou modifié.  Pour visualiser ou modifier un script à l&apos;intérieur d&apos;un objet, vous devez avoir les permissions requises.
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		Les objets publics ne peuvent pas exécuter de scripts
+	</panel.string>
+	<panel.string name="script_running">
+		Exécution en cours
+	</panel.string>
+	<panel.string name="Title">
+		Script : [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		Chargement…
+	</text_editor>
+	<button label="Enregistrer" label_selected="Enregistrer" name="Save_btn"/>
+	<combo_box label="Insérer..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="Fichier" name="File">
+			<menu_item_call label="Enregistrer" name="Save"/>
+			<menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
+		</menu>
+		<menu label="Éditer" name="Edit">
+			<menu_item_call label="Annuler" name="Undo"/>
+			<menu_item_call label="Refaire" name="Redo"/>
+			<menu_item_call label="Couper" name="Cut"/>
+			<menu_item_call label="Copier" name="Copy"/>
+			<menu_item_call label="Coller" name="Paste"/>
+			<menu_item_call label="Tout sélectionner" name="Select All"/>
+			<menu_item_call label="Désélectionner" name="Deselect"/>
+			<menu_item_call label="Rechercher / Remplacer..." name="Search / Replace..."/>
+		</menu>
+		<menu label="Aide" name="Help">
+			<menu_item_call label="Aide..." name="Help..."/>
+			<menu_item_call label="Aide par mots-clés..." name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a2567c831ad9b21c6dd31923d4b43b68d805c81
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="Me lever" name="stand_btn" tool_tip="Cliquez ici pour vous lever."/>
+	<button label="Atterrir" name="stop_fly_btn" tool_tip="Atterrir"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index 9545b25126176860005b1ba9608fb09399298afb..c963b4d8cba62f3f72c171a95de7fc66b9194def 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -1,41 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="Nom de la parcelle de terrain sur laquelle vous vous trouvez. Cliquez pour ouvrir la section À propos du terrain.">
-		Saisissez le nom de la parcelle ici
-	</text>
-	<text name="BalanceText" tool_tip="Solde du compte">
-		Chargement...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Acheter des devises"/>
-	<text name="TimeText" tool_tip="Heure actuelle (Californie)">
-		midi
-	</text>
-	<string name="StatBarDaysOfWeek">
-		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
-	</string>
-	<string name="StatBarMonthsOfYear">
-		January:February:March:April:May:June:July:August:September:October:November:December
-	</string>
-	<button label="" label_selected="" name="scriptout" tool_tip="Alertes et erreurs de scripts"/>
-	<button label="" label_selected="" name="health" tool_tip="Santé"/>
-	<text name="HealthText" tool_tip="Santé">
-		100 %
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="Vol interdit"/>
-	<button label="" label_selected="" name="build" tool_tip="Construction interdite"/>
-	<button label="" label_selected="" name="scripts" tool_tip="Scripts interdits"/>
-	<button name="no_fly" tool_tip="Interdiction de voler"/>
-	<button name="no_build" tool_tip="Interdiction de construire/rezzer"/>
-	<button name="no_scripts" tool_tip="Interdiction d&apos;utiliser des scripts"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="Pas de bousculades"/>
-	<button name="status_no_voice" tool_tip="Voix non disponible ici"/>
-	<button label="" label_selected="" name="buyland" tool_tip="Acheter cette parcelle"/>
-	<line_editor label="Rechercher" name="search_editor" tool_tip="Rechercher dans [SECOND_LIFE]"/>
-	<button name="search_btn" tool_tip="Rechercher dans [SECOND_LIFE]"/>
-	<text name="packet_loss_tooltip">
-		Perte de paquets
-	</text>
-	<text name="bandwidth_tooltip">
-		Bande passante
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		January:February:March:April:May:June:July:August:September:October:November:December
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Perte de paquets
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bande passante
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="Mon solde : Cliquez ici pour acheter plus de L$"/>
+	<text name="TimeText" tool_tip="Heure actuelle (Californie)">
+		midi
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml
index d00157a2973445b793445db8080768cd0054e2d9..2fb7baaf7ca1347e5e57a774837eba2fc3bca10b 100644
--- a/indra/newview/skins/default/xui/fr/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		N
-	</panel.string>
-	<panel.string name="world_map_east">
-		E
-	</panel.string>
-	<panel.string name="world_map_west">
-		O
-	</panel.string>
-	<panel.string name="world_map_south">
-		S
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		SE
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		NE
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		SO
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		NO
-	</panel.string>
-	<text label="N" name="floater_map_north" text="N">
-		N
-	</text>
-	<text label="E" name="floater_map_east" text="E">
-		E
-	</text>
-	<text label="O" name="floater_map_west" text="O">
-		O
-	</text>
-	<text label="S" name="floater_map_south" text="S">
-		S
-	</text>
-	<text label="SE" name="floater_map_southeast" text="SE">
-		SE
-	</text>
-	<text label="NE" name="floater_map_northeast" text="NE">
-		NE
-	</text>
-	<text label="SO" name="floater_map_southwest" text="SO">
-		SO
-	</text>
-	<text label="NO" name="floater_map_northwest" text="NO">
-		NO
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		Chargement…
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		Lieu invalide...
+	</panel.string>
+	<panel.string name="world_map_north">
+		N
+	</panel.string>
+	<panel.string name="world_map_east">
+		E
+	</panel.string>
+	<panel.string name="world_map_west">
+		O
+	</panel.string>
+	<panel.string name="world_map_south">
+		S
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		SE
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		NE
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		SO
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		NO
+	</panel.string>
+	<text label="N" name="floater_map_north" text="N">
+		N
+	</text>
+	<text label="E" name="floater_map_east" text="E">
+		E
+	</text>
+	<text label="O" name="floater_map_west" text="O">
+		O
+	</text>
+	<text label="S" name="floater_map_south" text="S">
+		S
+	</text>
+	<text label="SE" name="floater_map_southeast" text="SE">
+		SE
+	</text>
+	<text label="NE" name="floater_map_northeast" text="NE">
+		NE
+	</text>
+	<text label="SO" name="floater_map_southwest" text="SO">
+		SO
+	</text>
+	<text label="NO" name="floater_map_northwest" text="NO">
+		NO
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 070d2cd1a5f6ce537530dd8a412ed157af2fc1a5..06cc7d4a791dc33f82aa7095c040f32bf09db240 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1,655 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
-	</string>
-	<string name="LoginAuthenticating">
-		Authentification en cours
-	</string>
-	<string name="LoginMaintenance">
-		Maintenance du compte en cours…
-	</string>
-	<string name="LoginAttempt">
-		La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER]
-	</string>
-	<string name="LoginPrecaching">
-		Monde en cours de chargement…
-	</string>
-	<string name="LoginInitializingBrowser">
-		Navigateur Web incorporé en cours d&apos;initialisation…
-	</string>
-	<string name="LoginInitializingMultimedia">
-		Multimédia en cours d&apos;initialisation…
-	</string>
-	<string name="LoginVerifyingCache">
-		Fichiers du cache en cours de vérification (peut prendre 60-90 s)...
-	</string>
-	<string name="LoginProcessingResponse">
-		Réponse en cours de traitement…
-	</string>
-	<string name="LoginInitializingWorld">
-		Monde en cours d&apos;initialisation…
-	</string>
-	<string name="LoginDecodingImages">
-		Décodage des images en cours...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		Quicktime en cours d&apos;initialisation
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		Quicktime introuvable, impossible de procéder à l&apos;initialisation.
-	</string>
-	<string name="LoginQuicktimeOK">
-		Initialisation de Quicktime réussie.
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		Liaison avec la région en cours de création...
-	</string>
-	<string name="LoginConnectingToRegion">
-		Connexion avec la région en cours...
-	</string>
-	<string name="LoginDownloadingClothing">
-		Habits en cours de téléchargement...
-	</string>
-	<string name="AgentLostConnection">
-		Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
-	</string>
-	<string name="TooltipPerson">
-		Personne
-	</string>
-	<string name="TooltipNoName">
-		(pas de nom)
-	</string>
-	<string name="TooltipOwner">
-		Propriétaire :
-	</string>
-	<string name="TooltipPublic">
-		Public
-	</string>
-	<string name="TooltipIsGroup">
-		(Groupe)
-	</string>
-	<string name="TooltipFlagScript">
-		Script
-	</string>
-	<string name="TooltipFlagPhysics">
-		Propriétés physique
-	</string>
-	<string name="TooltipFlagTouch">
-		Toucher
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		Laisser tomber l&apos;inventaire
-	</string>
-	<string name="TooltipFlagPhantom">
-		Fantôme
-	</string>
-	<string name="TooltipFlagTemporary">
-		Temporaire
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(cliquez-droit pour le menu)
-	</string>
-	<string name="TooltipFreeToCopy">
-		Copie autorisée
-	</string>
-	<string name="TooltipForSaleL$">
-		À vendre : [AMOUNT] L$
-	</string>
-	<string name="TooltipForSaleMsg">
-		À vendre : [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		Contruction de groupe
-	</string>
-	<string name="TooltipFlagNoBuild">
-		Pas de construction
-	</string>
-	<string name="TooltipFlagNoEdit">
-		Contruction de groupe
-	</string>
-	<string name="TooltipFlagNotSafe">
-		Non sécurisé
-	</string>
-	<string name="TooltipFlagNoFly">
-		Interdiction de voler
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		Scripts de groupe
-	</string>
-	<string name="TooltipFlagNoScripts">
-		Pas de scripts
-	</string>
-	<string name="TooltipLand">
-		Terrain :
-	</string>
-	<string name="TooltipMustSingleDrop">
-		Impossible de faire glisser plus d&apos;un objet ici
-	</string>
-	<string name="RetrievingData">
-		En cours d&apos;extraction...
-	</string>
-	<string name="ReleaseNotes">
-		Notes de version
-	</string>
-	<string name="LoadingData">
-		Chargement..
-	</string>
-	<string name="AvatarNameNobody">
-		(personne)
-	</string>
-	<string name="AvatarNameWaiting">
-		(en attente)
-	</string>
-	<string name="AvatarNameHippos">
-		(hippos)
-	</string>
-	<string name="GroupNameNone">
-		(aucun)
-	</string>
-	<string name="AssetErrorNone">
-		Aucune erreur
-	</string>
-	<string name="AssetErrorRequestFailed">
-		Requête de l&apos;actif : échec
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		Requête de l&apos;actif : fichier inexistant
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		Requête de l&apos;actif : actif introuvable dans la base de données
-	</string>
-	<string name="AssetErrorEOF">
-		Fin du ficher
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		Impossible d&apos;ouvrir le fichier
-	</string>
-	<string name="AssetErrorFileNotFound">
-		Fichier introuvable
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		Délai d&apos;attente du transfert du fichier dépassé
-	</string>
-	<string name="AssetErrorCircuitGone">
-		Disparition du circuit
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		Il y a une différence de prix entre le client et le serveur
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		Statut inconnu
-	</string>
-	<string name="AvatarEditingApparance">
-		(Apparence en cours de modification)
-	</string>
-	<string name="AvatarAway">
-		Absent
-	</string>
-	<string name="AvatarBusy">
-		Occupé
-	</string>
-	<string name="AvatarMuted">
-		Ignoré
-	</string>
-	<string name="anim_express_afraid">
-		Effrayé
-	</string>
-	<string name="anim_express_anger">
-		En colère
-	</string>
-	<string name="anim_away">
-		Absent
-	</string>
-	<string name="anim_backflip">
-		Salto arrière
-	</string>
-	<string name="anim_express_laugh">
-		Rire en se tenant le ventre
-	</string>
-	<string name="anim_express_toothsmile">
-		Grand sourire
-	</string>
-	<string name="anim_blowkiss">
-		Envoyer un baiser
-	</string>
-	<string name="anim_express_bored">
-		Bailler d&apos;ennui
-	</string>
-	<string name="anim_bow">
-		S&apos;incliner
-	</string>
-	<string name="anim_clap">
-		Applaudir
-	</string>
-	<string name="anim_courtbow">
-		Révérence de cour
-	</string>
-	<string name="anim_express_cry">
-		Pleurer
-	</string>
-	<string name="anim_dance1">
-		Danse 1
-	</string>
-	<string name="anim_dance2">
-		Danse 2
-	</string>
-	<string name="anim_dance3">
-		Danse 3
-	</string>
-	<string name="anim_dance4">
-		Danse 4
-	</string>
-	<string name="anim_dance5">
-		Danse 5
-	</string>
-	<string name="anim_dance6">
-		Danse 6
-	</string>
-	<string name="anim_dance7">
-		Danse 7
-	</string>
-	<string name="anim_dance8">
-		Danse 8
-	</string>
-	<string name="anim_express_disdain">
-		Mépris
-	</string>
-	<string name="anim_drink">
-		Boire
-	</string>
-	<string name="anim_express_embarrased">
-		Gêne
-	</string>
-	<string name="anim_angry_fingerwag">
-		Désapprobation
-	</string>
-	<string name="anim_fist_pump">
-		Victoire
-	</string>
-	<string name="anim_yoga_float">
-		Yoga
-	</string>
-	<string name="anim_express_frown">
-		Froncer les sourcils
-	</string>
-	<string name="anim_impatient">
-		Impatient
-	</string>
-	<string name="anim_jumpforjoy">
-		Sauter de joie
-	</string>
-	<string name="anim_kissmybutt">
-		Va te faire voir !
-	</string>
-	<string name="anim_express_kiss">
-		Baiser
-	</string>
-	<string name="anim_laugh_short">
-		Rire
-	</string>
-	<string name="anim_musclebeach">
-		Montrer ses muscles
-	</string>
-	<string name="anim_no_unhappy">
-		Non (mécontent)
-	</string>
-	<string name="anim_no_head">
-		Non
-	</string>
-	<string name="anim_nyanya">
-		Na na na na nère
-	</string>
-	<string name="anim_punch_onetwo">
-		Gauche-droite
-	</string>
-	<string name="anim_express_open_mouth">
-		Bouche ouverte
-	</string>
-	<string name="anim_peace">
-		Paix
-	</string>
-	<string name="anim_point_you">
-		Montrer quelqu&apos;un du doigt
-	</string>
-	<string name="anim_point_me">
-		Se montrer du doigt
-	</string>
-	<string name="anim_punch_l">
-		Gauche
-	</string>
-	<string name="anim_punch_r">
-		Droite
-	</string>
-	<string name="anim_rps_countdown">
-		Compter (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_paper">
-		Papier (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_rock">
-		Pierre (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_rps_scissors">
-		Ciseaux (pierre-papier-ciseaux)
-	</string>
-	<string name="anim_express_repulsed">
-		Dégoût
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		Coup de pied circulaire
-	</string>
-	<string name="anim_express_sad">
-		Triste
-	</string>
-	<string name="anim_salute">
-		Salut
-	</string>
-	<string name="anim_shout">
-		Crier
-	</string>
-	<string name="anim_express_shrug">
-		Hausser les épaules
-	</string>
-	<string name="anim_express_smile">
-		Sourire
-	</string>
-	<string name="anim_smoke_idle">
-		Fumer, immobile
-	</string>
-	<string name="anim_smoke_inhale">
-		Fumer, prendre une bouffée
-	</string>
-	<string name="anim_smoke_throw_down">
-		Fumer, jeter son mégot
-	</string>
-	<string name="anim_express_surprise">
-		Surprise
-	</string>
-	<string name="anim_sword_strike_r">
-		Coup d&apos;épée
-	</string>
-	<string name="anim_angry_tantrum">
-		Caprice
-	</string>
-	<string name="anim_express_tongue_out">
-		Tirer la langue
-	</string>
-	<string name="anim_hello">
-		Faire signe
-	</string>
-	<string name="anim_whisper">
-		Chuchoter
-	</string>
-	<string name="anim_whistle">
-		Siffler
-	</string>
-	<string name="anim_express_wink">
-		Clin d&apos;Å“il
-	</string>
-	<string name="anim_wink_hollywood">
-		Clin d&apos;Å“il (Hollywood)
-	</string>
-	<string name="anim_express_worry">
-		Soucis
-	</string>
-	<string name="anim_yes_happy">
-		Oui (Joie)
-	</string>
-	<string name="anim_yes_head">
-		Oui
-	</string>
-	<string name="texture_loading">
-		Chargement...
-	</string>
-	<string name="worldmap_offline">
-		Hors ligne
-	</string>
-	<string name="whisper">
-		chuchote :
-	</string>
-	<string name="shout">
-		crie :
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		Hors ligne
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		Inconnu
-	</string>
-	<string name="land_type_unknown">
-		(inconnu)
-	</string>
-	<string name="covenant_never_modified">
-		Dernière modification : (jamais)
-	</string>
-	<string name="covenant_modified">
-		Dernière modification :
-	</string>
-	<string name="all_files">
-		Tous fichiers
-	</string>
-	<string name="sound_files">
-		Sons
-	</string>
-	<string name="animation_files">
-		Animations
-	</string>
-	<string name="image_files">
-		Images
-	</string>
-	<string name="save_file_verb">
-		Enregistrer
-	</string>
-	<string name="load_file_verb">
-		Charger
-	</string>
-	<string name="targa_image_files">
-		Images Targa
-	</string>
-	<string name="bitmap_image_files">
-		Images Bitmap
-	</string>
-	<string name="avi_movie_file">
-		Fichier de film AVI
-	</string>
-	<string name="xaf_animation_file">
-		Fichier d&apos;animation XAF
-	</string>
-	<string name="xml_file">
-		Fichier XML
-	</string>
-	<string name="dot_raw_file">
-		Fichier RAW
-	</string>
-	<string name="compressed_image_files">
-		Images compressées
-	</string>
-	<string name="load_files">
-		Charger des fichiers
-	</string>
-	<string name="choose_the_directory">
-		Choisir le répertoire
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Ctrl+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Maj+
-	</string>
-	<string name="GraphicsQualityLow">
-		Faible
-	</string>
-	<string name="GraphicsQualityMid">
-		Moyen
-	</string>
-	<string name="GraphicsQualityHigh">
-		Élevé
-	</string>
-	
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Appartenant aux Lindens</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Art et Culture</string>
-	<string name="Business">Affaires</string>
-	<string name="Educational">Éducation</string>
-	<string name="Gaming">Jeux</string>
-	<string name="Hangout">Favoris</string>
-	<string name="Newcomer Friendly">Accueil pour les nouveaux</string>
-	<string name="Parks&amp;Nature">Parcs et Nature</string>
-	<string name="Residential">Résidentiel</string>
-	<string name="Shopping">Shopping</string>
-	<string name="Other">Autre</string>
-	
-	<string name="ringing">
-		Connexion au chat vocal du Monde en cours…
-	</string>
-	<string name="connected">
-		Connecté(e)
-	</string>
-	<string name="unavailable">
-		Voix non disponible à l&apos;endroit où vous êtes
-	</string>
-	<string name="hang_up">
-		Déconnecté du chat vocal
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n&apos;a pas reçu le droit de : [PERMISSIONS].
-	</string>
-	<string name="ScriptTakeMoney">
-		Débiter vos Linden dollars (L$)
-	</string>
-	<string name="ActOnControlInputs">
-		Utiliser vos touches de commandes
-	</string>
-	<string name="RemapControlInputs">
-		Reconfigurer vos touches de commandes
-	</string>
-	<string name="AnimateYourAvatar">
-		Animer votre avatar
-	</string>
-	<string name="AttachToYourAvatar">
-		Attacher à votre avatar
-	</string>
-	<string name="ReleaseOwnership">
-		Passer l&apos;objet dans le domaine public (sans propriétaire)
-	</string>
-	<string name="LinkAndDelink">
-		Lier et délier d&apos;autres objets
-	</string>
-	<string name="AddAndRemoveJoints">
-		Créer et supprimer des liens avec d&apos;autres objets
-	</string>
-	<string name="ChangePermissions">
-		Modifier ses droits
-	</string>
-	<string name="TrackYourCamera">
-		Suivre votre caméra
-	</string>
-	<string name="ControlYourCamera">
-		Contrôler votre caméra
-	</string>
-	<text name="only_user_message">
-		Vous êtes le seul participant à cette session.
-	</text>
-	<text name="offline_message">
-		[FIRST] [LAST] est déconnecté(e).
-	</text>
-	<string name="invite_message">
-		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
-	</string>
-	<string name="generic_request_error">
-		Erreur lors de la requête, veuillez réessayer ultérieurement.
-	</string>
-	<string name="insufficient_perms_error">
-		Vous n&apos;avez pas les droits requis.
-	</string>
-	<string name="session_does_not_exist_error">
-		La session a expiré
-	</string>
-	<string name="no_ability_error">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="no_ability">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="not_a_mod_error">
-		Vous n&apos;êtes pas modérateur de session.
-	</string>
-	<string name="muted_error">
-		Un modérateur de groupe a désactivé votre chat écrit.
-	</string>
-	<string name="add_session_event">
-		Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Vous avez été supprimé du groupe.
-	</string>
-	<string name="close_on_no_ability">
-		Vous ne pouvez plus participer à la session de chat.
-	</string>
-			<string name="AcctTypeResident">
-				Résident
-			</string>
-			<string name="AcctTypeTrial">
-				Essai
-			</string>
-			<string name="AcctTypeCharterMember">
-				Membre originaire
-			</string>
-			<string name="AcctTypeEmployee">
-				Employé(e) de Linden Lab
-			</string>
-			<string name="PaymentInfoUsed">
-				Infos de paiement utilisées
-			</string>
-			<string name="PaymentInfoOnFile">
-				Infos de paiement enregistrées
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				Aucune info de paiement
-			</string>
-			<string name="AgeVerified">
-				Âge vérifié
-			</string>
-			<string name="NotAgeVerified">
-				Âge non vérifié
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Grille de Second Life
+	</string>
+	<string name="SUPPORT_SITE">
+		Portail Assistance Second Life
+	</string>
+	<string name="StartupDetectingHardware">
+		Détection du matériel...
+	</string>
+	<string name="StartupLoading">
+		Chargement
+	</string>
+	<string name="Fullbright">
+		Fullbright (Legacy)
+	</string>
+	<string name="LoginInProgress">
+		La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		Connexion...
+	</string>
+	<string name="LoginAuthenticating">
+		Authentification en cours
+	</string>
+	<string name="LoginMaintenance">
+		Maintenance du compte en cours…
+	</string>
+	<string name="LoginAttempt">
+		La tentative de connexion précédente a échoué. Connexion, esssai [NUMBER]
+	</string>
+	<string name="LoginPrecaching">
+		Monde en cours de chargement…
+	</string>
+	<string name="LoginInitializingBrowser">
+		Navigateur Web incorporé en cours d&apos;initialisation…
+	</string>
+	<string name="LoginInitializingMultimedia">
+		Multimédia en cours d&apos;initialisation…
+	</string>
+	<string name="LoginVerifyingCache">
+		Fichiers du cache en cours de vérification (peut prendre 60-90 s)...
+	</string>
+	<string name="LoginProcessingResponse">
+		Réponse en cours de traitement…
+	</string>
+	<string name="LoginInitializingWorld">
+		Monde en cours d&apos;initialisation…
+	</string>
+	<string name="LoginDecodingImages">
+		Décodage des images en cours...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		Quicktime en cours d&apos;initialisation
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		Quicktime introuvable, impossible de procéder à l&apos;initialisation.
+	</string>
+	<string name="LoginQuicktimeOK">
+		Initialisation de Quicktime réussie.
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		Liaison avec la région en cours de création...
+	</string>
+	<string name="LoginConnectingToRegion">
+		Connexion avec la région en cours...
+	</string>
+	<string name="LoginDownloadingClothing">
+		Habits en cours de téléchargement...
+	</string>
+	<string name="AgentLostConnection">
+		Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
+	</string>
+	<string name="TooltipPerson">
+		Personne
+	</string>
+	<string name="TooltipNoName">
+		(pas de nom)
+	</string>
+	<string name="TooltipOwner">
+		Propriétaire :
+	</string>
+	<string name="TooltipPublic">
+		Public
+	</string>
+	<string name="TooltipIsGroup">
+		(Groupe)
+	</string>
+	<string name="TooltipForSaleL$">
+		À vendre : [AMOUNT] L$
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		Contruction de groupe
+	</string>
+	<string name="TooltipFlagNoBuild">
+		Pas de construction
+	</string>
+	<string name="TooltipFlagNoEdit">
+		Contruction de groupe
+	</string>
+	<string name="TooltipFlagNotSafe">
+		Non sécurisé
+	</string>
+	<string name="TooltipFlagNoFly">
+		Interdiction de voler
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		Scripts de groupe
+	</string>
+	<string name="TooltipFlagNoScripts">
+		Pas de scripts
+	</string>
+	<string name="TooltipLand">
+		Terrain :
+	</string>
+	<string name="TooltipMustSingleDrop">
+		Impossible de faire glisser plus d&apos;un objet ici
+	</string>
+	<string name="TooltipHttpUrl">
+		Cliquez pour afficher cette page web
+	</string>
+	<string name="TooltipSLURL">
+		Cliquez pour en savoir plus sur cet endroit
+	</string>
+	<string name="TooltipAgentUrl">
+		Cliquez pour afficher le profil de ce résident
+	</string>
+	<string name="TooltipGroupUrl">
+		Cliquez pour afficher la description de ce groupe
+	</string>
+	<string name="TooltipEventUrl">
+		Cliquez pour afficher la description de cet événement
+	</string>
+	<string name="TooltipClassifiedUrl">
+		Cliquez pour afficher cette petite annonce
+	</string>
+	<string name="TooltipParcelUrl">
+		Cliquez pour afficher la description de cette parcelle
+	</string>
+	<string name="TooltipTeleportUrl">
+		Cliquez pour vous téléporter à cet endroit
+	</string>
+	<string name="TooltipObjectIMUrl">
+		Cliquez pour afficher la description de cet objet
+	</string>
+	<string name="TooltipSLAPP">
+		Cliquez pour exécuter la commande secondlife:// command
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		Fermer (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		Fermer (Ctrl+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		Restaurer
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		Minimiser
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		Réduire
+	</string>
+	<string name="BUTTON_DOCK">
+		Attacher
+	</string>
+	<string name="BUTTON_UNDOCK">
+		Détacher
+	</string>
+	<string name="BUTTON_HELP">
+		Afficher l&apos;aide
+	</string>
+	<string name="RetrievingData">
+		En cours d&apos;extraction...
+	</string>
+	<string name="ReleaseNotes">
+		Notes de version
+	</string>
+	<string name="LoadingData">
+		Chargement..
+	</string>
+	<string name="AvatarNameNobody">
+		(personne)
+	</string>
+	<string name="AvatarNameWaiting">
+		(en attente)
+	</string>
+	<string name="AvatarNameHippos">
+		(hippos)
+	</string>
+	<string name="GroupNameNone">
+		(aucun)
+	</string>
+	<string name="AssetErrorNone">
+		Aucune erreur
+	</string>
+	<string name="AssetErrorRequestFailed">
+		Requête de l&apos;actif : échec
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		Requête de l&apos;actif : fichier inexistant
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		Requête de l&apos;actif : actif introuvable dans la base de données
+	</string>
+	<string name="AssetErrorEOF">
+		Fin du ficher
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		Impossible d&apos;ouvrir le fichier
+	</string>
+	<string name="AssetErrorFileNotFound">
+		Fichier introuvable
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		Délai d&apos;attente du transfert du fichier dépassé
+	</string>
+	<string name="AssetErrorCircuitGone">
+		Disparition du circuit
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		Il y a une différence de prix entre le client et le serveur
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		Statut inconnu
+	</string>
+	<string name="texture">
+		texture
+	</string>
+	<string name="sound">
+		son
+	</string>
+	<string name="calling card">
+		carte de visite
+	</string>
+	<string name="landmark">
+		repère
+	</string>
+	<string name="legacy script">
+		script (ancienne version)
+	</string>
+	<string name="clothing">
+		habits
+	</string>
+	<string name="object">
+		objet
+	</string>
+	<string name="note card">
+		note
+	</string>
+	<string name="folder">
+		dossier
+	</string>
+	<string name="root">
+		racine
+	</string>
+	<string name="lsl2 script">
+		script lsl2
+	</string>
+	<string name="lsl bytecode">
+		bytecode lsl
+	</string>
+	<string name="tga texture">
+		texture tga
+	</string>
+	<string name="body part">
+		partie du corps
+	</string>
+	<string name="snapshot">
+		photo
+	</string>
+	<string name="lost and found">
+		objets trouvés
+	</string>
+	<string name="targa image">
+		image targa
+	</string>
+	<string name="trash">
+		poubelle
+	</string>
+	<string name="jpeg image">
+		image jpeg
+	</string>
+	<string name="animation">
+		animation
+	</string>
+	<string name="gesture">
+		geste
+	</string>
+	<string name="simstate">
+		simstate
+	</string>
+	<string name="favorite">
+		favori
+	</string>
+	<string name="symbolic link">
+		lien
+	</string>
+	<string name="AvatarAway">
+		Absent
+	</string>
+	<string name="AvatarBusy">
+		Occupé
+	</string>
+	<string name="AvatarMuted">
+		Ignoré
+	</string>
+	<string name="anim_express_afraid">
+		Effrayé
+	</string>
+	<string name="anim_express_anger">
+		En colère
+	</string>
+	<string name="anim_away">
+		Absent
+	</string>
+	<string name="anim_backflip">
+		Salto arrière
+	</string>
+	<string name="anim_express_laugh">
+		Rire en se tenant le ventre
+	</string>
+	<string name="anim_express_toothsmile">
+		Grand sourire
+	</string>
+	<string name="anim_blowkiss">
+		Envoyer un baiser
+	</string>
+	<string name="anim_express_bored">
+		Bailler d&apos;ennui
+	</string>
+	<string name="anim_bow">
+		S&apos;incliner
+	</string>
+	<string name="anim_clap">
+		Applaudir
+	</string>
+	<string name="anim_courtbow">
+		Révérence de cour
+	</string>
+	<string name="anim_express_cry">
+		Pleurer
+	</string>
+	<string name="anim_dance1">
+		Danse 1
+	</string>
+	<string name="anim_dance2">
+		Danse 2
+	</string>
+	<string name="anim_dance3">
+		Danse 3
+	</string>
+	<string name="anim_dance4">
+		Danse 4
+	</string>
+	<string name="anim_dance5">
+		Danse 5
+	</string>
+	<string name="anim_dance6">
+		Danse 6
+	</string>
+	<string name="anim_dance7">
+		Danse 7
+	</string>
+	<string name="anim_dance8">
+		Danse 8
+	</string>
+	<string name="anim_express_disdain">
+		Mépris
+	</string>
+	<string name="anim_drink">
+		Boire
+	</string>
+	<string name="anim_express_embarrased">
+		Gêne
+	</string>
+	<string name="anim_angry_fingerwag">
+		Désapprobation
+	</string>
+	<string name="anim_fist_pump">
+		Victoire
+	</string>
+	<string name="anim_yoga_float">
+		Yoga
+	</string>
+	<string name="anim_express_frown">
+		Froncer les sourcils
+	</string>
+	<string name="anim_impatient">
+		Impatient
+	</string>
+	<string name="anim_jumpforjoy">
+		Sauter de joie
+	</string>
+	<string name="anim_kissmybutt">
+		Va te faire voir !
+	</string>
+	<string name="anim_express_kiss">
+		Baiser
+	</string>
+	<string name="anim_laugh_short">
+		Rire
+	</string>
+	<string name="anim_musclebeach">
+		Montrer ses muscles
+	</string>
+	<string name="anim_no_unhappy">
+		Non (mécontent)
+	</string>
+	<string name="anim_no_head">
+		Non
+	</string>
+	<string name="anim_nyanya">
+		Na na na na nère
+	</string>
+	<string name="anim_punch_onetwo">
+		Gauche-droite
+	</string>
+	<string name="anim_express_open_mouth">
+		Bouche ouverte
+	</string>
+	<string name="anim_peace">
+		Paix
+	</string>
+	<string name="anim_point_you">
+		Montrer quelqu&apos;un du doigt
+	</string>
+	<string name="anim_point_me">
+		Se montrer du doigt
+	</string>
+	<string name="anim_punch_l">
+		Gauche
+	</string>
+	<string name="anim_punch_r">
+		Droite
+	</string>
+	<string name="anim_rps_countdown">
+		Compter (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_paper">
+		Papier (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_rock">
+		Pierre (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_rps_scissors">
+		Ciseaux (pierre-papier-ciseaux)
+	</string>
+	<string name="anim_express_repulsed">
+		Dégoût
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		Coup de pied circulaire
+	</string>
+	<string name="anim_express_sad">
+		Triste
+	</string>
+	<string name="anim_salute">
+		Salut
+	</string>
+	<string name="anim_shout">
+		Crier
+	</string>
+	<string name="anim_express_shrug">
+		Hausser les épaules
+	</string>
+	<string name="anim_express_smile">
+		Sourire
+	</string>
+	<string name="anim_smoke_idle">
+		Fumer, immobile
+	</string>
+	<string name="anim_smoke_inhale">
+		Fumer, prendre une bouffée
+	</string>
+	<string name="anim_smoke_throw_down">
+		Fumer, jeter son mégot
+	</string>
+	<string name="anim_express_surprise">
+		Surprise
+	</string>
+	<string name="anim_sword_strike_r">
+		Coup d&apos;épée
+	</string>
+	<string name="anim_angry_tantrum">
+		Caprice
+	</string>
+	<string name="anim_express_tongue_out">
+		Tirer la langue
+	</string>
+	<string name="anim_hello">
+		Faire signe
+	</string>
+	<string name="anim_whisper">
+		Chuchoter
+	</string>
+	<string name="anim_whistle">
+		Siffler
+	</string>
+	<string name="anim_express_wink">
+		Clin d&apos;Å“il
+	</string>
+	<string name="anim_wink_hollywood">
+		Clin d&apos;Å“il (Hollywood)
+	</string>
+	<string name="anim_express_worry">
+		Soucis
+	</string>
+	<string name="anim_yes_happy">
+		Oui (Joie)
+	</string>
+	<string name="anim_yes_head">
+		Oui
+	</string>
+	<string name="texture_loading">
+		Chargement...
+	</string>
+	<string name="worldmap_offline">
+		Hors ligne
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		Fichier incomplet
+	</string>
+	<string name="ST_NO_JOINT">
+		Impossible de trouver ROOT ou JOINT.
+	</string>
+	<string name="whisper">
+		chuchote :
+	</string>
+	<string name="shout">
+		crie :
+	</string>
+	<string name="ringing">
+		Connexion au chat vocal du Monde en cours…
+	</string>
+	<string name="connected">
+		Connecté(e)
+	</string>
+	<string name="unavailable">
+		Voix non disponible à l&apos;endroit où vous êtes
+	</string>
+	<string name="hang_up">
+		Déconnecté du chat vocal
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		&apos;[OBJECTNAME]&apos;, un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n&apos;a pas reçu le droit de : [PERMISSIONS].
+	</string>
+	<string name="ScriptTakeMoney">
+		Débiter vos Linden dollars (L$)
+	</string>
+	<string name="ActOnControlInputs">
+		Utiliser vos touches de commandes
+	</string>
+	<string name="RemapControlInputs">
+		Reconfigurer vos touches de commandes
+	</string>
+	<string name="AnimateYourAvatar">
+		Animer votre avatar
+	</string>
+	<string name="AttachToYourAvatar">
+		Attacher à votre avatar
+	</string>
+	<string name="ReleaseOwnership">
+		Passer l&apos;objet dans le domaine public (sans propriétaire)
+	</string>
+	<string name="LinkAndDelink">
+		Lier et délier d&apos;autres objets
+	</string>
+	<string name="AddAndRemoveJoints">
+		Créer et supprimer des liens avec d&apos;autres objets
+	</string>
+	<string name="ChangePermissions">
+		Modifier ses droits
+	</string>
+	<string name="TrackYourCamera">
+		Suivre votre caméra
+	</string>
+	<string name="ControlYourCamera">
+		Contrôler votre caméra
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		Hors ligne
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		Inconnu
+	</string>
+	<string name="land_type_unknown">
+		(inconnu)
+	</string>
+	<string name="all_files">
+		Tous fichiers
+	</string>
+	<string name="sound_files">
+		Sons
+	</string>
+	<string name="animation_files">
+		Animations
+	</string>
+	<string name="image_files">
+		Images
+	</string>
+	<string name="save_file_verb">
+		Enregistrer
+	</string>
+	<string name="load_file_verb">
+		Charger
+	</string>
+	<string name="targa_image_files">
+		Images Targa
+	</string>
+	<string name="bitmap_image_files">
+		Images Bitmap
+	</string>
+	<string name="avi_movie_file">
+		Fichier de film AVI
+	</string>
+	<string name="xaf_animation_file">
+		Fichier d&apos;animation XAF
+	</string>
+	<string name="xml_file">
+		Fichier XML
+	</string>
+	<string name="dot_raw_file">
+		Fichier RAW
+	</string>
+	<string name="compressed_image_files">
+		Images compressées
+	</string>
+	<string name="load_files">
+		Charger des fichiers
+	</string>
+	<string name="choose_the_directory">
+		Choisir le répertoire
+	</string>
+	<string name="AvatarSetNotAway">
+		Ne plus me mettre en mode absent
+	</string>
+	<string name="AvatarSetAway">
+		Me mettre en mode absent
+	</string>
+	<string name="AvatarSetNotBusy">
+		Ne plus me mettre en mode occupé
+	</string>
+	<string name="AvatarSetBusy">
+		Me mettre en mode occupé
+	</string>
+	<string name="shape">
+		Silhouette
+	</string>
+	<string name="skin">
+		Peau
+	</string>
+	<string name="hair">
+		Cheveux
+	</string>
+	<string name="eyes">
+		Yeux
+	</string>
+	<string name="shirt">
+		Chemise
+	</string>
+	<string name="pants">
+		Pantalon
+	</string>
+	<string name="shoes">
+		Chaussures
+	</string>
+	<string name="socks">
+		Chaussettes
+	</string>
+	<string name="jacket">
+		Veste
+	</string>
+	<string name="gloves">
+		Gants
+	</string>
+	<string name="undershirt">
+		Sous-vêtements (homme)
+	</string>
+	<string name="underpants">
+		Sous-vêtements (femme)
+	</string>
+	<string name="skirt">
+		Jupe
+	</string>
+	<string name="invalid">
+		non valide
+	</string>
+	<string name="BodyPartsRightArm">
+		Bras droit
+	</string>
+	<string name="BodyPartsHead">
+		Tête
+	</string>
+	<string name="BodyPartsLeftArm">
+		Bras gauche
+	</string>
+	<string name="BodyPartsLeftLeg">
+		Jambe gauche
+	</string>
+	<string name="BodyPartsTorso">
+		Torse
+	</string>
+	<string name="BodyPartsRightLeg">
+		Jambe droite
+	</string>
+	<string name="GraphicsQualityLow">
+		Faible
+	</string>
+	<string name="GraphicsQualityMid">
+		Moyen
+	</string>
+	<string name="GraphicsQualityHigh">
+		Élevé
+	</string>
+	<string name="LeaveMouselook">
+		Appuyez sur ESC pour quitter la vue subjective
+	</string>
+	<string name="InventoryNoMatchingItems">
+		Aucun objet correspondant ne se trouve dans l&apos;inventaire.
+	</string>
+	<string name="InventoryNoTexture">
+		Vous n&apos;avez pas de copie de cette texture dans votre inventaire
+	</string>
+	<string name="LoadingContents">
+		chargement des contenus en cours...
+	</string>
+	<string name="NoContents">
+		Aucun contenu
+	</string>
+	<string name="InvFolder My Inventory">
+		Mon inventaire
+	</string>
+	<string name="InvFolder My Favorites">
+		Mes favoris
+	</string>
+	<string name="InvFolder Library">
+		Bibliothèque
+	</string>
+	<string name="InvFolder Textures">
+		Textures
+	</string>
+	<string name="InvFolder Sounds">
+		Sons
+	</string>
+	<string name="InvFolder Calling Cards">
+		Cartes de visite
+	</string>
+	<string name="InvFolder Landmarks">
+		Repères
+	</string>
+	<string name="InvFolder Scripts">
+		Scripts
+	</string>
+	<string name="InvFolder Clothing">
+		Habits
+	</string>
+	<string name="InvFolder Objects">
+		Objets
+	</string>
+	<string name="InvFolder Notecards">
+		Notes
+	</string>
+	<string name="InvFolder New Folder">
+		Nouveau dossier
+	</string>
+	<string name="InvFolder Inventory">
+		Inventaire
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		Images non compressées
+	</string>
+	<string name="InvFolder Body Parts">
+		Parties du corps
+	</string>
+	<string name="InvFolder Trash">
+		Poubelle
+	</string>
+	<string name="InvFolder Photo Album">
+		Albums photo
+	</string>
+	<string name="InvFolder Lost And Found">
+		Objets trouvés
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		Sons non compressés
+	</string>
+	<string name="InvFolder Animations">
+		Animations
+	</string>
+	<string name="InvFolder Gestures">
+		Gestes
+	</string>
+	<string name="InvFolder favorite">
+		Favoris
+	</string>
+	<string name="InvFolder Current Outfit">
+		Tenue actuelle
+	</string>
+	<string name="InvFolder My Outfits">
+		Mes tenues
+	</string>
+	<string name="InvFolder Friends">
+		Amis
+	</string>
+	<string name="InvFolder All">
+		Tout
+	</string>
+	<string name="Buy">
+		Acheter
+	</string>
+	<string name="BuyforL$">
+		Acheter des L$
+	</string>
+	<string name="Stone">
+		Pierre
+	</string>
+	<string name="Metal">
+		Métal
+	</string>
+	<string name="Glass">
+		Verre
+	</string>
+	<string name="Wood">
+		Bois
+	</string>
+	<string name="Flesh">
+		Chair
+	</string>
+	<string name="Plastic">
+		Plastique
+	</string>
+	<string name="Rubber">
+		Caoutchouc
+	</string>
+	<string name="Light">
+		Léger
+	</string>
+	<string name="KBShift">
+		Maj-
+	</string>
+	<string name="KBCtrl">
+		Ctrl
+	</string>
+	<string name="Chest">
+		Poitrine
+	</string>
+	<string name="Skull">
+		Crâne
+	</string>
+	<string name="Left Shoulder">
+		Épaule gauche
+	</string>
+	<string name="Right Shoulder">
+		Épaule droite
+	</string>
+	<string name="Left Hand">
+		Main gauche
+	</string>
+	<string name="Right Hand">
+		Main droite
+	</string>
+	<string name="Left Foot">
+		Pied gauche
+	</string>
+	<string name="Right Foot">
+		Pied droit
+	</string>
+	<string name="Spine">
+		Colonne
+	</string>
+	<string name="Pelvis">
+		Bassin
+	</string>
+	<string name="Mouth">
+		Bouche
+	</string>
+	<string name="Chin">
+		Menton
+	</string>
+	<string name="Left Ear">
+		Oreille gauche
+	</string>
+	<string name="Right Ear">
+		Oreille droite
+	</string>
+	<string name="Left Eyeball">
+		Globe oculaire gauche
+	</string>
+	<string name="Right Eyeball">
+		Globe oculaire droit
+	</string>
+	<string name="Nose">
+		Nez
+	</string>
+	<string name="R Upper Arm">
+		Bras D
+	</string>
+	<string name="R Forearm">
+		Avant-bras D
+	</string>
+	<string name="L Upper Arm">
+		Bras G
+	</string>
+	<string name="L Forearm">
+		Avant-bras G
+	</string>
+	<string name="Right Hip">
+		Hanche droite
+	</string>
+	<string name="R Upper Leg">
+		Cuisse D
+	</string>
+	<string name="R Lower Leg">
+		Jambe D
+	</string>
+	<string name="Left Hip">
+		Hanche gauche
+	</string>
+	<string name="L Upper Leg">
+		Cuisse G
+	</string>
+	<string name="L Lower Leg">
+		Jambe G
+	</string>
+	<string name="Stomach">
+		Estomac
+	</string>
+	<string name="Left Pec">
+		Pectoral gauche
+	</string>
+	<string name="Right Pec">
+		Pectoral droit
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS]
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS]
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS]
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS]
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS]
+	</string>
+	<string name="TodayOld">
+		Inscrit aujourd&apos;hui
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] an
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] ans
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] ans
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] mois
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] mois
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] mois
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] semaine
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] semaines
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] semaines
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] jour
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] jours
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] jours
+	</string>
+	<string name="AcctTypeResident">
+		Résident
+	</string>
+	<string name="AcctTypeTrial">
+		Essai
+	</string>
+	<string name="AcctTypeCharterMember">
+		Membre originaire
+	</string>
+	<string name="AcctTypeEmployee">
+		Employé(e) de Linden Lab
+	</string>
+	<string name="PaymentInfoUsed">
+		Infos de paiement utilisées
+	</string>
+	<string name="PaymentInfoOnFile">
+		Infos de paiement enregistrées
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		Aucune info de paiement
+	</string>
+	<string name="AgeVerified">
+		Âge vérifié
+	</string>
+	<string name="NotAgeVerified">
+		Âge non vérifié
+	</string>
+	<string name="Center 2">
+		Centrer 2
+	</string>
+	<string name="Top Right">
+		En haut à droite
+	</string>
+	<string name="Top">
+		En haut
+	</string>
+	<string name="Top Left">
+		En haut à gauche
+	</string>
+	<string name="Center">
+		Centrer
+	</string>
+	<string name="Bottom Left">
+		En bas à gauche
+	</string>
+	<string name="Bottom">
+		Bas
+	</string>
+	<string name="Bottom Right">
+		En bas à droite
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		Téléchargé, compilation en cours
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		Script introuvable sur le serveur.
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		Problème lors du téléchargement
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		Permissions insuffisantes pour télécharger un script.
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		Permissions insuffisantes pour
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		Échec du téléchargement, erreur inconnue
+	</string>
+	<string name="CompileQueueTitle">
+		Recompilation - progrès
+	</string>
+	<string name="CompileQueueStart">
+		recompiler
+	</string>
+	<string name="ResetQueueTitle">
+		Réinitialiser les progrès
+	</string>
+	<string name="ResetQueueStart">
+		réinitialiser
+	</string>
+	<string name="RunQueueTitle">
+		Lancer
+	</string>
+	<string name="RunQueueStart">
+		lancer
+	</string>
+	<string name="NotRunQueueTitle">
+		Arrêter
+	</string>
+	<string name="NotRunQueueStart">
+		arrêter
+	</string>
+	<string name="CompileSuccessful">
+		Compilation réussie !
+	</string>
+	<string name="CompileSuccessfulSaving">
+		Compilation réussie, enregistrement en cours...
+	</string>
+	<string name="SaveComplete">
+		Enregistrement terminé.
+	</string>
+	<string name="ObjectOutOfRange">
+		Script (objet hors de portée)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		Objet [OBJECT] possédé par [OWNER]
+	</string>
+	<string name="GroupsNone">
+		aucun
+	</string>
+	<string name="Unknown">
+		(Inconnu)
+	</string>
+	<string name="Balance">
+		Solde
+	</string>
+	<string name="Credits">
+		Remerciements
+	</string>
+	<string name="Debits">
+		Débits
+	</string>
+	<string name="Total">
+		Total
+	</string>
+	<string name="NoGroupDataFound">
+		Aucune donnée trouvée pour le groupe
+	</string>
+	<string name="IMParentEstate">
+		domaine parent
+	</string>
+	<string name="IMMainland">
+		continent
+	</string>
+	<string name="IMTeen">
+		teen
+	</string>
+	<string name="RegionInfoError">
+		erreur
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		tous les domaines possédés par [OWNER]
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		tous les domaines que vous possédez
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		tous les domaines que vous gérez pour [owner]
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		Résidents autorisés : ([ALLOWEDAGENTS], max [MAXACCESS])
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		Groupes autorisés : ([ALLOWEDGROUPS], max [MAXACCESS])
+	</string>
+	<string name="CursorPos">
+		Ligne [LINE], Colonne [COLUMN]
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] trouvé(s)
+	</string>
+	<string name="PanelContentsNewScript">
+		Nouveau script
+	</string>
+	<string name="MuteByName">
+		(par nom)
+	</string>
+	<string name="MuteAgent">
+		(résident)
+	</string>
+	<string name="MuteObject">
+		(objet)
+	</string>
+	<string name="MuteGroup">
+		(groupe)
+	</string>
+	<string name="RegionNoCovenant">
+		Il n&apos;y a aucun règlement pour ce domaine.
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		Il n&apos;y a aucun règlement pour ce domaine. Le terrain sur ce domaine est vendu par le propriétaire, non par Linden Lab.  Pour en savoir plus, veuillez contacter le propriétaire.
+	</string>
+	<string name="covenant_last_modified">
+		Dernière modification :
+	</string>
+	<string name="GroupOwned">
+		Propriété du groupe
+	</string>
+	<string name="Public">
+		Public
+	</string>
+	<string name="ClassifiedClicksTxt">
+		Clics : [TELEPORT] téléporter, [MAP] carte, [PROFILE] profile
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(mise à jour après la publication)
+	</string>
+	<string name="GroupVoteYes">
+		Oui
+	</string>
+	<string name="GroupVoteNo">
+		Non
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		Il n&apos;y a aucune proposition active actuellement
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		Il n&apos;y a aucune proposition archivée actuellement
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		Extraction des propositions archivées
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		Extraction des propositions actives
+	</string>
+	<string name="MultiPreviewTitle">
+		Prévisualiser
+	</string>
+	<string name="MultiPropertiesTitle">
+		Propriétés
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		Un objet appelé
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		possédé par le groupe
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		possédé par un groupe inconnu
+	</string>
+	<string name="InvOfferOwnedBy">
+		possédé par
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		possédé par un résident inconnu
+	</string>
+	<string name="InvOfferGaveYou">
+		vous a donné
+	</string>
+	<string name="InvOfferYouDecline">
+		Vous avez refusé
+	</string>
+	<string name="InvOfferFrom">
+		de la part de
+	</string>
+	<string name="GroupMoneyTotal">
+		Total
+	</string>
+	<string name="GroupMoneyBought">
+		acheté
+	</string>
+	<string name="GroupMoneyPaidYou">
+		vous a payé
+	</string>
+	<string name="GroupMoneyPaidInto">
+		payé
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		a acheté un pass à
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		a payé des frais pour un événement
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		a payé un prix pour un événement
+	</string>
+	<string name="GroupMoneyBalance">
+		Solde
+	</string>
+	<string name="GroupMoneyCredits">
+		Remerciements
+	</string>
+	<string name="GroupMoneyDebits">
+		Débits
+	</string>
+	<string name="ViewerObjectContents">
+		Contenus
+	</string>
+	<string name="AcquiredItems">
+		Objets acquis
+	</string>
+	<string name="Cancel">
+		Annuler
+	</string>
+	<string name="UploadingCosts">
+		Chargement de %s coûts
+	</string>
+	<string name="UnknownFileExtension">
+		Extension de fichier inconnue. %s
+.wav, .tga, .bmp, .jpg, .jpeg, ou .bvh acceptés
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		Ajouter un repère...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		Modifier le repère...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Ctrl+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Maj+
+	</string>
+	<string name="FileSaved">
+		Fichier enregistré
+	</string>
+	<string name="Receiving">
+		Réception
+	</string>
+	<string name="AM">
+		AM
+	</string>
+	<string name="PM">
+		PM
+	</string>
+	<string name="PST">
+		PST
+	</string>
+	<string name="PDT">
+		PDT
+	</string>
+	<string name="Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Left">
+		Gauche
+	</string>
+	<string name="Right">
+		Droite
+	</string>
+	<string name="Back">
+		Précédente
+	</string>
+	<string name="North">
+		Nord
+	</string>
+	<string name="South">
+		Sud
+	</string>
+	<string name="West">
+		Ouest
+	</string>
+	<string name="East">
+		Est
+	</string>
+	<string name="Up">
+		Vers le haut
+	</string>
+	<string name="Down">
+		Vers le bas
+	</string>
+	<string name="Any Category">
+		Toutes catégories
+	</string>
+	<string name="Shopping">
+		Shopping
+	</string>
+	<string name="Land Rental">
+		Terrains à louer
+	</string>
+	<string name="Property Rental">
+		Propriétés à louer
+	</string>
+	<string name="Special Attraction">
+		Divertissements
+	</string>
+	<string name="New Products">
+		Nouveaux produits
+	</string>
+	<string name="Employment">
+		Emplois
+	</string>
+	<string name="Wanted">
+		Offres
+	</string>
+	<string name="Service">
+		Services
+	</string>
+	<string name="Personal">
+		Divers
+	</string>
+	<string name="None">
+		Aucun
+	</string>
+	<string name="Linden Location">
+		Appartenant aux Lindens
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		Art et Culture
+	</string>
+	<string name="Business">
+		Affaires
+	</string>
+	<string name="Educational">
+		Éducation
+	</string>
+	<string name="Gaming">
+		Jeux
+	</string>
+	<string name="Hangout">
+		Favoris
+	</string>
+	<string name="Newcomer Friendly">
+		Accueil pour les nouveaux
+	</string>
+	<string name="Parks&amp;Nature">
+		Parcs et Nature
+	</string>
+	<string name="Residential">
+		Résidentiel
+	</string>
+	<string name="Stage">
+		Phase
+	</string>
+	<string name="Other">
+		Autre
+	</string>
+	<string name="Any">
+		Aucun
+	</string>
+	<string name="You">
+		Vous
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		Une erreur est survenue lors de la lecture de la ligne de commande.
+Merci de consulter : http://wiki.secondlife.com/wiki/Client_parameters
+Erreur :
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] Utilisation de la ligne de commande :
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] ne peut accéder à un fichier requis.
+
+Cela vient du fait que quelqu&apos;un a ouvert plusieurs copies ou que votre système pense qu&apos;un fichier est ouvert.
+Si ce message persiste, veuillez redémarrer votre ordinateur.
+Si le problème persiste, vous devrez peut-être complètement désinstaller puis réinstaller [APP_NAME].
+	</string>
+	<string name="MBFatalError">
+		Erreur fatale
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] nécessite un microprocesseur AltiVec (version G4 ou antérieure).
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] est déjà lancé.
+Vérifiez si une version minimisée du programme apparaît dans votre barre de tâches.
+Si ce message persiste, redémarrez votre ordinateur.
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] semble avoir crashé lors de l&apos;utilisation précédente.
+Voulez-vous envoyer un rapport de crash ?
+	</string>
+	<string name="MBAlert">
+		Alerte
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] ne peut détecter DirectX 9.0b ou une version supérieure.
+[APP_NAME] utilise DirectX pour détecter les matériels et/ou les pilotes qui ne sont pas à jour et peuvent causer des problèmes de stabilité, de performance, ou des plantages.  Bien que vous puissiez utiliser [APP_NAME] sans DirectX, nous vous recommandons de l&apos;utiliser avec DirectX 9.0b.
+
+Voulez-vous continuer ?
+	</string>
+	<string name="MBWarning">
+		Avertissement
+	</string>
+	<string name="MBNoAutoUpdate">
+		Les mises à jour automatiques n&apos;existent pas encore pour Linux.
+Veuillez télécharger la dernière version sur www.secondlife.com.
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass a échoué
+	</string>
+	<string name="MBError">
+		Erreur
+	</string>
+	<string name="MBFullScreenErr">
+		Impossible d&apos;ouvrir le mode plein écran de [WIDTH] x [HEIGHT]
+Utilisation du mode fenêtré.
+	</string>
+	<string name="MBDestroyWinFailed">
+		Erreur de fermeture lors de la destruction de la fenêtre (DestroyWindow() failed))
+	</string>
+	<string name="MBShutdownErr">
+		Erreur de fermeture
+	</string>
+	<string name="MBDevContextErr">
+		Impossible de créer le contexte GL
+	</string>
+	<string name="MBPixelFmtErr">
+		Impossible de trouver le format pixel approprié
+	</string>
+	<string name="MBPixelFmtDescErr">
+		Impossible de trouver la description du format pixel
+	</string>
+	<string name="MBTrueColorWindow">
+		[APP_NAME] nécessite que True Color (32-bit) soit exécuté dans une fenêtre.
+Veuillez allez sous Panneau de configuration &gt; Affichage &gt; Paramètres et régler la couleur de l&apos;écran sur 32-bit.
+Sinon, lorsque vous choisissez le mode plein écran,  [APP_NAME] ajustera automatiquement l&apos;écran à chaque utilisation.
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] ne peut pas être lancé car il n&apos;y pas de channel 8 bit accessible.  En général, ceci vient de problèmes avec le pilote de la carte vidéo.
+Assurez-vous d&apos;avoir installé le pilote de carte vidéo le plus récent possible.
+ Assurez-vous aussi que votre écran est réglé sur True Clor (22-bit) sous Panneau de configuration &gt; Affichage &gt; Paramètres.
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+	</string>
+	<string name="MBPixelFmtSetErr">
+		Impossible de trouver le format pixel approprié
+	</string>
+	<string name="MBGLContextErr">
+		Impossible de créer le contexte de rendu GL
+	</string>
+	<string name="MBGLContextActErr">
+		Impossible d&apos;activer le contexte de rendu GL
+	</string>
+	<string name="MBVideoDrvErr">
+		[APP_NAME] ne peut pas être exécuté car les pilotes de votre carte vidéo n&apos;ont pas été installés correctement, ne sont pas à jour, ou sont pour du matériel non pris en charge. Assurez-vous d&apos;avoir des pilotes de cartes vidéos récents, et même si vous avez les plus récents, réinstallez-les.
+
+Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		Barbe naissante
+	</string>
+	<string name="All White">
+		Tout blancs
+	</string>
+	<string name="Anime Eyes">
+		Grand yeux
+	</string>
+	<string name="Arced">
+		Arquées
+	</string>
+	<string name="Arm Length">
+		Longueur des bras
+	</string>
+	<string name="Attached">
+		Minces
+	</string>
+	<string name="Attached Earlobes">
+		Largeur des lobes
+	</string>
+	<string name="Back Bangs">
+		Mèches de derrière
+	</string>
+	<string name="Back Bangs Down">
+		Mèches de derrière Bas
+	</string>
+	<string name="Back Bangs Up">
+		Mèches de derrière haut
+	</string>
+	<string name="Back Fringe">
+		Mèches de derrière
+	</string>
+	<string name="Back Hair">
+		Cheveux de derrière
+	</string>
+	<string name="Back Hair Down">
+		Cheveux de derrière Bas
+	</string>
+	<string name="Back Hair Up">
+		Cheveux de derrière haut
+	</string>
+	<string name="Baggy">
+		Cernés
+	</string>
+	<string name="Bangs">
+		Frange
+	</string>
+	<string name="Bangs Down">
+		Frange Bas
+	</string>
+	<string name="Bangs Up">
+		Frange Haut
+	</string>
+	<string name="Beady Eyes">
+		Yeux perçants
+	</string>
+	<string name="Belly Size">
+		Taille du ventre
+	</string>
+	<string name="Big">
+		Gros
+	</string>
+	<string name="Big Butt">
+		Grosses fesses
+	</string>
+	<string name="Big Eyeball">
+		Gros globe oculaire
+	</string>
+	<string name="Big Hair Back">
+		Cheveux volumineux : Derrière
+	</string>
+	<string name="Big Hair Front">
+		Cheveux volumineux : Devant
+	</string>
+	<string name="Big Hair Top">
+		Cheveux volumineux : En haut
+	</string>
+	<string name="Big Head">
+		Grosse tête
+	</string>
+	<string name="Big Pectorals">
+		Gros pectoraux
+	</string>
+	<string name="Big Spikes">
+		Spikes
+	</string>
+	<string name="Black">
+		Noir
+	</string>
+	<string name="Blonde">
+		Blond
+	</string>
+	<string name="Blonde Hair">
+		Cheveux blonds
+	</string>
+	<string name="Blush">
+		Blush
+	</string>
+	<string name="Blush Color">
+		Couleur du blush
+	</string>
+	<string name="Blush Opacity">
+		Opacité du blush
+	</string>
+	<string name="Body Definition">
+		Contour du corps
+	</string>
+	<string name="Body Fat">
+		Graisse
+	</string>
+	<string name="Body Freckles">
+		Grains de beauté
+	</string>
+	<string name="Body Thick">
+		Corps épais
+	</string>
+	<string name="Body Thickness">
+		Épaisseur du corps
+	</string>
+	<string name="Body Thin">
+		Corps mince
+	</string>
+	<string name="Bow Legged">
+		Jambes arquées
+	</string>
+	<string name="Breast Buoyancy">
+		Hauteur des seins
+	</string>
+	<string name="Breast Cleavage">
+		Clivage
+	</string>
+	<string name="Breast Size">
+		Taille des seins
+	</string>
+	<string name="Bridge Width">
+		Arête du nez
+	</string>
+	<string name="Broad">
+		Large
+	</string>
+	<string name="Brow Size">
+		Taille des sourcils
+	</string>
+	<string name="Bug Eyes">
+		Yeux globuleux
+	</string>
+	<string name="Bugged Eyes">
+		Yeux globuleux
+	</string>
+	<string name="Bulbous">
+		En bulbe
+	</string>
+	<string name="Bulbous Nose">
+		Nez en bulbe
+	</string>
+	<string name="Bushy Eyebrows">
+		Sourcils touffus
+	</string>
+	<string name="Bushy Hair">
+		Cheveux touffus
+	</string>
+	<string name="Butt Size">
+		Taille des fesses
+	</string>
+	<string name="bustle skirt">
+		Jupe gonflante
+	</string>
+	<string name="no bustle">
+		Pas gonflante
+	</string>
+	<string name="more bustle">
+		Plus gonflante
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		Pommettes
+	</string>
+	<string name="Chest Size">
+		Taille de la poitrine
+	</string>
+	<string name="Chin Angle">
+		Angle du menton
+	</string>
+	<string name="Chin Cleft">
+		Fente labiale
+	</string>
+	<string name="Chin Curtains">
+		Favoris
+	</string>
+	<string name="Chin Depth">
+		Profondeur du menton
+	</string>
+	<string name="Chin Heavy">
+		Menton lourd
+	</string>
+	<string name="Chin In">
+		Menton rentré
+	</string>
+	<string name="Chin Out">
+		Menton sorti
+	</string>
+	<string name="Chin-Neck">
+		Menton-cou
+	</string>
+	<string name="Clear">
+		Effacer
+	</string>
+	<string name="Cleft">
+		Fente
+	</string>
+	<string name="Close Set Eyes">
+		Yeux rapprochés
+	</string>
+	<string name="Closed">
+		Fermé(s)
+	</string>
+	<string name="Closed Back">
+		Fermé à l&apos;arrière
+	</string>
+	<string name="Closed Front">
+		Fermé devant
+	</string>
+	<string name="Closed Left">
+		Fermé à gauche
+	</string>
+	<string name="Closed Right">
+		Fermé à droite
+	</string>
+	<string name="Coin Purse">
+		Bijoux de famille
+	</string>
+	<string name="Collar Back">
+		Col arrière
+	</string>
+	<string name="Collar Front">
+		Col devant
+	</string>
+	<string name="Corner Down">
+		Coin vers le bas
+	</string>
+	<string name="Corner Normal">
+		Coin normal
+	</string>
+	<string name="Corner Up">
+		Coin vers le haut
+	</string>
+	<string name="Creased">
+		Frippée
+	</string>
+	<string name="Crooked Nose">
+		Nez en bec d&apos;aigle
+	</string>
+	<string name="Cropped Hair">
+		Garçonne
+	</string>
+	<string name="Cuff Flare">
+		Jambe
+	</string>
+	<string name="Dark">
+		Sombre
+	</string>
+	<string name="Dark Green">
+		Vert foncé
+	</string>
+	<string name="Darker">
+		Plus foncé
+	</string>
+	<string name="Deep">
+		Profonde
+	</string>
+	<string name="Default Heels">
+		Talons par défaut
+	</string>
+	<string name="Default Toe">
+		Orteil par défaut
+	</string>
+	<string name="Dense">
+		Dense
+	</string>
+	<string name="Dense hair">
+		Cheveux denses
+	</string>
+	<string name="Double Chin">
+		Double menton
+	</string>
+	<string name="Downturned">
+		Pointant vers le bas
+	</string>
+	<string name="Duffle Bag">
+		Membre viril
+	</string>
+	<string name="Ear Angle">
+		Angle de l&apos;oreille
+	</string>
+	<string name="Ear Size">
+		Taille de l&apos;oreille
+	</string>
+	<string name="Ear Tips">
+		Pointes de l&apos;oreille
+	</string>
+	<string name="Egg Head">
+		Forme de la tête
+	</string>
+	<string name="Eye Bags">
+		Cernes
+	</string>
+	<string name="Eye Color">
+		Couleur des yeux
+	</string>
+	<string name="Eye Depth">
+		Profondeur des yeux
+	</string>
+	<string name="Eye Lightness">
+		Clarté des yeux
+	</string>
+	<string name="Eye Opening">
+		Ouverture des yeux
+	</string>
+	<string name="Eye Pop">
+		Œil proéminent
+	</string>
+	<string name="Eye Size">
+		Taille de l&apos;Å“il
+	</string>
+	<string name="Eye Spacing">
+		Espacement des yeux
+	</string>
+	<string name="Eyeball Size">
+		Taille du globe oculaire
+	</string>
+	<string name="Eyebrow Arc">
+		Arc des sourcils
+	</string>
+	<string name="Eyebrow Density">
+		Épaisseur des sourcils
+	</string>
+	<string name="Eyebrow Height">
+		Hauteur des sourcils
+	</string>
+	<string name="Eyebrow Points">
+		Direction des sourcils
+	</string>
+	<string name="Eyebrow Size">
+		Taille des sourcils
+	</string>
+	<string name="Eyelash Length">
+		Longueur des cils
+	</string>
+	<string name="Eyeliner">
+		Eyeliner
+	</string>
+	<string name="Eyeliner Color">
+		Couleur de l&apos;eyeliner
+	</string>
+	<string name="Eyes Back">
+		Yeux noirs
+	</string>
+	<string name="Eyes Bugged">
+		Yeux globuleux
+	</string>
+	<string name="Eyes Forward">
+		Yeux vers l&apos;avant
+	</string>
+	<string name="Eyes Long Head">
+		Yeux longue tête
+	</string>
+	<string name="Eyes Shear Left Up">
+		Å’il gauche vers le haut
+	</string>
+	<string name="Eyes Shear Right Up">
+		Å’il droit vers le haut
+	</string>
+	<string name="Eyes Short Head">
+		Yeux petite tête
+	</string>
+	<string name="Eyes Spread">
+		Espacement des yeux
+	</string>
+	<string name="Eyes Sunken">
+		Yeux enfoncés
+	</string>
+	<string name="Eyes Together">
+		Yeux rapprochés
+	</string>
+	<string name="Face Shear">
+		Visage
+	</string>
+	<string name="Facial Definition">
+		Définition du visage
+	</string>
+	<string name="Far Set Eyes">
+		Yeux écartés
+	</string>
+	<string name="Fat">
+		Grosse
+	</string>
+	<string name="Fat Head">
+		Grosse tête
+	</string>
+	<string name="Fat Lips">
+		Lèvres épaisses
+	</string>
+	<string name="Fat Lower">
+		Inférieure plus épaisse
+	</string>
+	<string name="Fat Lower Lip">
+		Lèvre inférieure épaisse
+	</string>
+	<string name="Fat Torso">
+		Torse épais
+	</string>
+	<string name="Fat Upper">
+		Supérieure plus épaisse
+	</string>
+	<string name="Fat Upper Lip">
+		Lèvre supérieure épaisse
+	</string>
+	<string name="Female">
+		Femme
+	</string>
+	<string name="Fingerless">
+		Sans doigts
+	</string>
+	<string name="Fingers">
+		Doigts
+	</string>
+	<string name="Flared Cuffs">
+		Jambes larges
+	</string>
+	<string name="Flat">
+		Plat
+	</string>
+	<string name="Flat Butt">
+		Fesses plates
+	</string>
+	<string name="Flat Head">
+		Tête plate
+	</string>
+	<string name="Flat Toe">
+		Orteil plat
+	</string>
+	<string name="Foot Size">
+		Pointure
+	</string>
+	<string name="Forehead Angle">
+		Angle du front
+	</string>
+	<string name="Forehead Heavy">
+		Front lourd
+	</string>
+	<string name="Freckles">
+		Tâches de rousseur
+	</string>
+	<string name="Front Bangs Down">
+		Mèches de devant longues
+	</string>
+	<string name="Front Bangs Up">
+		Mèches de devant courtes
+	</string>
+	<string name="Front Fringe">
+		Mèches de devant
+	</string>
+	<string name="Front Hair">
+		Cheveux devant
+	</string>
+	<string name="Front Hair Down">
+		Cheveux de devant longs
+	</string>
+	<string name="Front Hair Up">
+		Cheveux de devant courts
+	</string>
+	<string name="Full Back">
+		Arrière touffu
+	</string>
+	<string name="Full Eyeliner">
+		Eyeliner marqué
+	</string>
+	<string name="Full Front">
+		Devant touffu
+	</string>
+	<string name="Full Hair Sides">
+		Côtés touffus
+	</string>
+	<string name="Full Sides">
+		Côtés touffus
+	</string>
+	<string name="Glossy">
+		Brillant
+	</string>
+	<string name="Glove Fingers">
+		Doigts avec gants
+	</string>
+	<string name="Glove Length">
+		Longueur des gants
+	</string>
+	<string name="Hair">
+		Cheveux
+	</string>
+	<string name="Hair Back">
+		Cheveux : Derrière
+	</string>
+	<string name="Hair Front">
+		Cheveux : Devant
+	</string>
+	<string name="Hair Sides">
+		Cheveux : Côtés
+	</string>
+	<string name="Hair Sweep">
+		Sens de la coiffure
+	</string>
+	<string name="Hair Thickess">
+		Épaisseur des cheveux
+	</string>
+	<string name="Hair Thickness">
+		Épaisseur des cheveux
+	</string>
+	<string name="Hair Tilt">
+		Inclinaison des cheveux
+	</string>
+	<string name="Hair Tilted Left">
+		Vers la gauche
+	</string>
+	<string name="Hair Tilted Right">
+		Vers la droite
+	</string>
+	<string name="Hair Volume">
+		Cheveux : Volume
+	</string>
+	<string name="Hand Size">
+		Taille de la main
+	</string>
+	<string name="Handlebars">
+		Guidons
+	</string>
+	<string name="Head Length">
+		Longueur de la tête
+	</string>
+	<string name="Head Shape">
+		Forme de la tête
+	</string>
+	<string name="Head Size">
+		Taille de la tête
+	</string>
+	<string name="Head Stretch">
+		Allongement de la tête
+	</string>
+	<string name="Heel Height">
+		Hauteur des talons
+	</string>
+	<string name="Heel Shape">
+		Forme des talons
+	</string>
+	<string name="Height">
+		Taille
+	</string>
+	<string name="High">
+		Haut
+	</string>
+	<string name="High Heels">
+		Talons hauts
+	</string>
+	<string name="High Jaw">
+		Mâchoire haute
+	</string>
+	<string name="High Platforms">
+		Plateformes hautes
+	</string>
+	<string name="High and Tight">
+		Haut et serré
+	</string>
+	<string name="Higher">
+		Plus élevé
+	</string>
+	<string name="Hip Length">
+		Longueur hanche
+	</string>
+	<string name="Hip Width">
+		Largeur hanche
+	</string>
+	<string name="In">
+		In
+	</string>
+	<string name="In Shdw Color">
+		Couleur ombre interne
+	</string>
+	<string name="In Shdw Opacity">
+		Opacité ombre interne
+	</string>
+	<string name="Inner Eye Corner">
+		Coin de l&apos;Å“il interne
+	</string>
+	<string name="Inner Eye Shadow">
+		Ombre de l&apos;Å“il interne
+	</string>
+	<string name="Inner Shadow">
+		Ombre interne
+	</string>
+	<string name="Jacket Length">
+		Longueur de la veste
+	</string>
+	<string name="Jacket Wrinkles">
+		Plis de la veste
+	</string>
+	<string name="Jaw Angle">
+		Angle de la mâchoire
+	</string>
+	<string name="Jaw Jut">
+		saillie de la mâchoire
+	</string>
+	<string name="Jaw Shape">
+		Forme de la mâchoire
+	</string>
+	<string name="Join">
+		Rapprochés
+	</string>
+	<string name="Jowls">
+		Bajoues
+	</string>
+	<string name="Knee Angle">
+		Angle du genou
+	</string>
+	<string name="Knock Kneed">
+		Genoux rapprochés
+	</string>
+	<string name="Large">
+		Grande
+	</string>
+	<string name="Large Hands">
+		Grandes mains
+	</string>
+	<string name="Left Part">
+		Raie à gauche
+	</string>
+	<string name="Leg Length">
+		Longueur de la jambe
+	</string>
+	<string name="Leg Muscles">
+		Muscles de la jambe
+	</string>
+	<string name="Less">
+		Moins
+	</string>
+	<string name="Less Body Fat">
+		Moins de graisse
+	</string>
+	<string name="Less Curtains">
+		Moins
+	</string>
+	<string name="Less Freckles">
+		Moins
+	</string>
+	<string name="Less Full">
+		Moins
+	</string>
+	<string name="Less Gravity">
+		Moins
+	</string>
+	<string name="Less Love">
+		Moins
+	</string>
+	<string name="Less Muscles">
+		Moins
+	</string>
+	<string name="Less Muscular">
+		Moins
+	</string>
+	<string name="Less Rosy">
+		Moins
+	</string>
+	<string name="Less Round">
+		Moins
+	</string>
+	<string name="Less Saddle">
+		Moins
+	</string>
+	<string name="Less Square">
+		Moins
+	</string>
+	<string name="Less Volume">
+		Moins
+	</string>
+	<string name="Less soul">
+		Moins
+	</string>
+	<string name="Lighter">
+		Plus léger
+	</string>
+	<string name="Lip Cleft">
+		Fente labiale
+	</string>
+	<string name="Lip Cleft Depth">
+		Profondeur de la fente labiale
+	</string>
+	<string name="Lip Fullness">
+		Volume des lèvres
+	</string>
+	<string name="Lip Pinkness">
+		Rougeur des lèvres
+	</string>
+	<string name="Lip Ratio">
+		Proportion des lèvres
+	</string>
+	<string name="Lip Thickness">
+		Épaisseur des lèvres
+	</string>
+	<string name="Lip Width">
+		Largeur des lèvres
+	</string>
+	<string name="Lipgloss">
+		Brillant à lèvres
+	</string>
+	<string name="Lipstick">
+		Rouge à lèvres
+	</string>
+	<string name="Lipstick Color">
+		Couleur du rouge à lèvres
+	</string>
+	<string name="Long">
+		Long
+	</string>
+	<string name="Long Head">
+		Tête longue
+	</string>
+	<string name="Long Hips">
+		Hanches longues
+	</string>
+	<string name="Long Legs">
+		Jambes longues
+	</string>
+	<string name="Long Neck">
+		Long cou
+	</string>
+	<string name="Long Pigtails">
+		Longues couettes
+	</string>
+	<string name="Long Ponytail">
+		Longue queue de cheval
+	</string>
+	<string name="Long Torso">
+		Torse long
+	</string>
+	<string name="Long arms">
+		Longs bras
+	</string>
+	<string name="Longcuffs">
+		Manches longues
+	</string>
+	<string name="Loose Pants">
+		Pantalons amples
+	</string>
+	<string name="Loose Shirt">
+		Chemise ample
+	</string>
+	<string name="Loose Sleeves">
+		Manches amples
+	</string>
+	<string name="Love Handles">
+		Poignées d&apos;amour
+	</string>
+	<string name="Low">
+		Bas
+	</string>
+	<string name="Low Heels">
+		Talons bas
+	</string>
+	<string name="Low Jaw">
+		Mâchoire basse
+	</string>
+	<string name="Low Platforms">
+		Plateformes basses
+	</string>
+	<string name="Low and Loose">
+		Bas et ample
+	</string>
+	<string name="Lower">
+		Abaisser
+	</string>
+	<string name="Lower Bridge">
+		Arête plus basse
+	</string>
+	<string name="Lower Cheeks">
+		Joues plus basses
+	</string>
+	<string name="Male">
+		Homme
+	</string>
+	<string name="Middle Part">
+		Raie au milieu
+	</string>
+	<string name="More">
+		Plus
+	</string>
+	<string name="More Blush">
+		Plus
+	</string>
+	<string name="More Body Fat">
+		Plus
+	</string>
+	<string name="More Curtains">
+		Plus
+	</string>
+	<string name="More Eyeshadow">
+		Plus
+	</string>
+	<string name="More Freckles">
+		Plus
+	</string>
+	<string name="More Full">
+		Plus
+	</string>
+	<string name="More Gravity">
+		Plus
+	</string>
+	<string name="More Lipstick">
+		Plus
+	</string>
+	<string name="More Love">
+		Plus
+	</string>
+	<string name="More Lower Lip">
+		Plus
+	</string>
+	<string name="More Muscles">
+		Plus
+	</string>
+	<string name="More Muscular">
+		Plus
+	</string>
+	<string name="More Rosy">
+		Plus
+	</string>
+	<string name="More Round">
+		Plus
+	</string>
+	<string name="More Saddle">
+		Plus
+	</string>
+	<string name="More Sloped">
+		Plus
+	</string>
+	<string name="More Square">
+		Plus
+	</string>
+	<string name="More Upper Lip">
+		Plus
+	</string>
+	<string name="More Vertical">
+		Plus
+	</string>
+	<string name="More Volume">
+		Plus
+	</string>
+	<string name="More soul">
+		Plus
+	</string>
+	<string name="Moustache">
+		Moustache
+	</string>
+	<string name="Mouth Corner">
+		Coin de la bouche
+	</string>
+	<string name="Mouth Position">
+		Position de la bouche
+	</string>
+	<string name="Mowhawk">
+		Mowhawk
+	</string>
+	<string name="Muscular">
+		Musclé
+	</string>
+	<string name="Mutton Chops">
+		Rouflaquettes
+	</string>
+	<string name="Nail Polish">
+		Vernis à ongles
+	</string>
+	<string name="Nail Polish Color">
+		Couleur du vernis
+	</string>
+	<string name="Narrow">
+		Étroit
+	</string>
+	<string name="Narrow Back">
+		Arrière étroit
+	</string>
+	<string name="Narrow Front">
+		Devant étroit
+	</string>
+	<string name="Narrow Lips">
+		Lèvres étroites
+	</string>
+	<string name="Natural">
+		Naturel
+	</string>
+	<string name="Neck Length">
+		Longueur du cou
+	</string>
+	<string name="Neck Thickness">
+		Épaisseur du cou
+	</string>
+	<string name="No Blush">
+		Pas de blush
+	</string>
+	<string name="No Eyeliner">
+		Pas de eyeliner
+	</string>
+	<string name="No Eyeshadow">
+		Pas d&apos;ombre à paupières
+	</string>
+	<string name="No Heels">
+		Pas de talons
+	</string>
+	<string name="No Lipgloss">
+		Pas de brillant à lèvres
+	</string>
+	<string name="No Lipstick">
+		Pas de rouge à lèvres
+	</string>
+	<string name="No Part">
+		Pas de raie
+	</string>
+	<string name="No Polish">
+		Pas de vernis
+	</string>
+	<string name="No Red">
+		Pas de rouge
+	</string>
+	<string name="No Spikes">
+		Pas de spikes
+	</string>
+	<string name="No White">
+		Pas de blanc
+	</string>
+	<string name="No Wrinkles">
+		Pas de rides
+	</string>
+	<string name="Normal Lower">
+		Normal plus bas
+	</string>
+	<string name="Normal Upper">
+		Normal plus haut
+	</string>
+	<string name="Nose Left">
+		Nez à gauche
+	</string>
+	<string name="Nose Right">
+		Nez à droite
+	</string>
+	<string name="Nose Size">
+		Taille du nez
+	</string>
+	<string name="Nose Thickness">
+		Épaisseur du nez
+	</string>
+	<string name="Nose Tip Angle">
+		Angle du bout du nez
+	</string>
+	<string name="Nose Tip Shape">
+		Forme du bout du nez
+	</string>
+	<string name="Nose Width">
+		Largeur du nez
+	</string>
+	<string name="Nostril Division">
+		Division des narines
+	</string>
+	<string name="Nostril Width">
+		Largeur des narines
+	</string>
+	<string name="Old">
+		Vieux
+	</string>
+	<string name="Opaque">
+		Opaque
+	</string>
+	<string name="Open">
+		Ouvert
+	</string>
+	<string name="Open Back">
+		Derrière ouvert
+	</string>
+	<string name="Open Front">
+		Devant ouvert
+	</string>
+	<string name="Open Left">
+		Ouvert à gauche
+	</string>
+	<string name="Open Right">
+		Ouvert à droite
+	</string>
+	<string name="Orange">
+		Orange
+	</string>
+	<string name="Out">
+		Dehors
+	</string>
+	<string name="Out Shdw Color">
+		Couleur de l&apos;ombre externe
+	</string>
+	<string name="Out Shdw Opacity">
+		Opacité de l&apos;ombre externe
+	</string>
+	<string name="Outer Eye Corner">
+		Coin de l&apos;Å“il externe
+	</string>
+	<string name="Outer Eye Shadow">
+		Ombre de l&apos;Å“il externe
+	</string>
+	<string name="Outer Shadow">
+		Ombre externe
+	</string>
+	<string name="Overbite">
+		Chevauchement
+	</string>
+	<string name="Package">
+		Parties
+	</string>
+	<string name="Painted Nails">
+		Ongles vernis
+	</string>
+	<string name="Pale">
+		Pâle
+	</string>
+	<string name="Pants Crotch">
+		Entrejambe
+	</string>
+	<string name="Pants Fit">
+		Taille
+	</string>
+	<string name="Pants Length">
+		Longueur
+	</string>
+	<string name="Pants Waist">
+		Taille
+	</string>
+	<string name="Pants Wrinkles">
+		Plis
+	</string>
+	<string name="Part">
+		Raie
+	</string>
+	<string name="Part Bangs">
+		Séparation de la frange
+	</string>
+	<string name="Pectorals">
+		Pectoraux
+	</string>
+	<string name="Pigment">
+		Pigmentation
+	</string>
+	<string name="Pigtails">
+		Couettes
+	</string>
+	<string name="Pink">
+		Rose
+	</string>
+	<string name="Pinker">
+		Plus rose
+	</string>
+	<string name="Platform Height">
+		Hauteur de la plateforme
+	</string>
+	<string name="Platform Width">
+		Largeur de la plateforme
+	</string>
+	<string name="Pointy">
+		Pointu
+	</string>
+	<string name="Pointy Heels">
+		Talons pointus
+	</string>
+	<string name="Pointy Toe">
+		Orteil pointu
+	</string>
+	<string name="Ponytail">
+		Queue de cheval
+	</string>
+	<string name="Poofy Skirt">
+		Jupe bouffante
+	</string>
+	<string name="Pop Left Eye">
+		Å’il gauche saillant
+	</string>
+	<string name="Pop Right Eye">
+		Å’il droit saillant
+	</string>
+	<string name="Puffy">
+		Gonflé
+	</string>
+	<string name="Puffy Eyelids">
+		Paupières gonflées
+	</string>
+	<string name="Rainbow Color">
+		Couleur de l&apos;arc en ciel
+	</string>
+	<string name="Red Hair">
+		Cheveux roux
+	</string>
+	<string name="Red Skin">
+		Peau rouge
+	</string>
+	<string name="Regular">
+		Standard
+	</string>
+	<string name="Regular Muscles">
+		Muscles normaux
+	</string>
+	<string name="Right Part">
+		Raie à droite
+	</string>
+	<string name="Rosy Complexion">
+		Teint rosé
+	</string>
+	<string name="Round">
+		Rond
+	</string>
+	<string name="Round Forehead">
+		Front rond
+	</string>
+	<string name="Ruddiness">
+		Rougeur
+	</string>
+	<string name="Ruddy">
+		Rouge
+	</string>
+	<string name="Rumpled Hair">
+		Texture
+	</string>
+	<string name="Saddle Bags">
+		Culotte de cheval
+	</string>
+	<string name="Saddlebags">
+		Culotte de cheval
+	</string>
+	<string name="Scrawny">
+		Maigre
+	</string>
+	<string name="Scrawny Leg">
+		Jambes maigres
+	</string>
+	<string name="Separate">
+		Séparés
+	</string>
+	<string name="Shading">
+		Dégradé
+	</string>
+	<string name="Shadow hair">
+		Cheveux
+	</string>
+	<string name="Shallow">
+		Creux
+	</string>
+	<string name="Shear Back">
+		Coupe derrière
+	</string>
+	<string name="Shear Face">
+		Visage
+	</string>
+	<string name="Shear Front">
+		Devant dégagé
+	</string>
+	<string name="Shear Left">
+		Gauche dégagée
+	</string>
+	<string name="Shear Left Up">
+		Haut gauche dégagé
+	</string>
+	<string name="Shear Right">
+		Droite dégagée
+	</string>
+	<string name="Shear Right Up">
+		Haut droit dégagé
+	</string>
+	<string name="Sheared Back">
+		Dégagé derrière
+	</string>
+	<string name="Sheared Front">
+		Dégagé devant
+	</string>
+	<string name="Shift Left">
+		Déplacer vers la gauche
+	</string>
+	<string name="Shift Mouth">
+		Déplacer la bouche
+	</string>
+	<string name="Shift Right">
+		Déplacer vers la droite
+	</string>
+	<string name="Shirt Bottom">
+		Chemise
+	</string>
+	<string name="Shirt Fit">
+		Taille
+	</string>
+	<string name="Shirt Wrinkles">
+		Plis
+	</string>
+	<string name="Shoe Height">
+		Hauteur de la chaussure
+	</string>
+	<string name="Short">
+		Court
+	</string>
+	<string name="Short Arms">
+		Bras courts
+	</string>
+	<string name="Short Legs">
+		Jambes courtes
+	</string>
+	<string name="Short Neck">
+		Petit cou
+	</string>
+	<string name="Short Pigtails">
+		Couettes courtes
+	</string>
+	<string name="Short Ponytail">
+		Queue de cheval courte
+	</string>
+	<string name="Short Sideburns">
+		Favoris courts
+	</string>
+	<string name="Short Torso">
+		Torse court
+	</string>
+	<string name="Short hips">
+		Hanches courtes
+	</string>
+	<string name="Shoulders">
+		Épaules
+	</string>
+	<string name="Side Bangs">
+		Mèches sur le côté
+	</string>
+	<string name="Side Bangs Down">
+		Mèches sur le côté en bas
+	</string>
+	<string name="Side Bangs Up">
+		Mèches sur le côté en haut
+	</string>
+	<string name="Side Fringe">
+		Frange sur le côté
+	</string>
+	<string name="Sideburns">
+		Favoris
+	</string>
+	<string name="Sides Hair">
+		Cheveux sur le côté
+	</string>
+	<string name="Sides Hair Down">
+		Cheveux sur le côté en bas
+	</string>
+	<string name="Sides Hair Up">
+		Cheveux sur le côté en haut
+	</string>
+	<string name="Skinny">
+		Maigre
+	</string>
+	<string name="Skinny Neck">
+		Cou maigre
+	</string>
+	<string name="Skirt Fit">
+		Taille de la jupe
+	</string>
+	<string name="Skirt Length">
+		Longueur de la jupe
+	</string>
+	<string name="Slanted Forehead">
+		Front incliné
+	</string>
+	<string name="Sleeve Length">
+		Longueur de la manche
+	</string>
+	<string name="Sleeve Looseness">
+		Ampleur de la manche
+	</string>
+	<string name="Slit Back">
+		Fente : Derrière
+	</string>
+	<string name="Slit Front">
+		Fente : Devant
+	</string>
+	<string name="Slit Left">
+		Fente : Gauche
+	</string>
+	<string name="Slit Right">
+		Fente : Droite
+	</string>
+	<string name="Small">
+		Petite
+	</string>
+	<string name="Small Hands">
+		Petites mains
+	</string>
+	<string name="Small Head">
+		Petite tête
+	</string>
+	<string name="Smooth">
+		Lisse
+	</string>
+	<string name="Smooth Hair">
+		Cheveux lisses
+	</string>
+	<string name="Socks Length">
+		Longueur des chaussettes
+	</string>
+	<string name="Some">
+		Quelques un(e)s
+	</string>
+	<string name="Soulpatch">
+		Soulpatch
+	</string>
+	<string name="Sparse">
+		Rares
+	</string>
+	<string name="Spiked Hair">
+		Mèches en pointe
+	</string>
+	<string name="Square">
+		Carré
+	</string>
+	<string name="Square Toe">
+		Orteil carré
+	</string>
+	<string name="Squash Head">
+		Écraser la tête
+	</string>
+	<string name="Squash/Stretch Head">
+		Allonger/écraser la tête
+	</string>
+	<string name="Stretch Head">
+		Allonger la tête
+	</string>
+	<string name="Sunken">
+		Enfoncées
+	</string>
+	<string name="Sunken Chest">
+		Poitrine enfoncée
+	</string>
+	<string name="Sunken Eyes">
+		Yeux enfoncés
+	</string>
+	<string name="Sweep Back">
+		En arrière
+	</string>
+	<string name="Sweep Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Swept Back">
+		En arrière
+	</string>
+	<string name="Swept Back Hair">
+		Cheveux en arrière
+	</string>
+	<string name="Swept Forward">
+		Vers l&apos;avant
+	</string>
+	<string name="Swept Forward Hair">
+		Cheveux vers l&apos;&apos;avant
+	</string>
+	<string name="Tall">
+		Grand
+	</string>
+	<string name="Taper Back">
+		Biseauter à l&apos;arrière
+	</string>
+	<string name="Taper Front">
+		Biseauter à l&apos;avant
+	</string>
+	<string name="Thick Heels">
+		Talons épais
+	</string>
+	<string name="Thick Neck">
+		Cou épais
+	</string>
+	<string name="Thick Toe">
+		Orteil épais
+	</string>
+	<string name="Thickness">
+		Épaisseur
+	</string>
+	<string name="Thin">
+		Fins
+	</string>
+	<string name="Thin Eyebrows">
+		Sourcils fins
+	</string>
+	<string name="Thin Lips">
+		Lèvres fines
+	</string>
+	<string name="Thin Nose">
+		Nez fin
+	</string>
+	<string name="Tight Chin">
+		Menton fin
+	</string>
+	<string name="Tight Cuffs">
+		Jambes serrées
+	</string>
+	<string name="Tight Pants">
+		Pantalons serrés
+	</string>
+	<string name="Tight Shirt">
+		Chemise serrée
+	</string>
+	<string name="Tight Skirt">
+		Jupe serrée
+	</string>
+	<string name="Tight Sleeves">
+		Manches serrées
+	</string>
+	<string name="Tilt Left">
+		Pencher sur la gauche
+	</string>
+	<string name="Tilt Right">
+		Pencher sur la droite
+	</string>
+	<string name="Toe Shape">
+		Forme de l&apos;orteil
+	</string>
+	<string name="Toe Thickness">
+		Épaisseur de l&apos;orteil
+	</string>
+	<string name="Torso Length">
+		Longueur du torse
+	</string>
+	<string name="Torso Muscles">
+		Muscles du torse
+	</string>
+	<string name="Torso Scrawny">
+		Torse maigre
+	</string>
+	<string name="Unattached">
+		Séparés
+	</string>
+	<string name="Uncreased">
+		Lisse
+	</string>
+	<string name="Underbite">
+		Rentré
+	</string>
+	<string name="Unnatural">
+		Artificiel
+	</string>
+	<string name="Upper Bridge">
+		Arête supérieure
+	</string>
+	<string name="Upper Cheeks">
+		Pommettes
+	</string>
+	<string name="Upper Chin Cleft">
+		Fente du menton supérieure
+	</string>
+	<string name="Upper Eyelid Fold">
+		Paupière supérieure
+	</string>
+	<string name="Upturned">
+		En trompette
+	</string>
+	<string name="Very Red">
+		Très rouge
+	</string>
+	<string name="Waist Height">
+		Hauteur de la taille
+	</string>
+	<string name="Well-Fed">
+		Bien nourri
+	</string>
+	<string name="White Hair">
+		Cheveux blancs
+	</string>
+	<string name="Wide">
+		Large
+	</string>
+	<string name="Wide Back">
+		Dos large
+	</string>
+	<string name="Wide Front">
+		Devant large
+	</string>
+	<string name="Wide Lips">
+		Lèvres larges
+	</string>
+	<string name="Wild">
+		Revêche
+	</string>
+	<string name="Wrinkles">
+		Rides
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		Ajouter à mes repères
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		Modifier mes repères
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] Mettre à jour
+	</string>
+	<string name="UpdaterNowUpdating">
+		En train de charger [APP_NAME]...
+	</string>
+	<string name="UpdaterNowInstalling">
+		En train d&apos;installer [APP_NAME]...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		Le client [APP_NAME] est en train d&apos;être mis à jour.  Cela peut prendre un certain temps, merci de votre patience.
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		Mise à jour en cours...
+	</string>
+	<string name="UpdaterProgressBarText">
+		Mise à jour en cours
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		Le téléchargement de la mise à jour a échoué
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version sur www.secondlife.com.
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		L&apos;installation de la mise à jour a échoué
+	</string>
+	<string name="UpdaterFailStartTitle">
+		Impossible de lancer le client
+	</string>
+	<string name="only_user_message">
+		Vous êtes le seul participant à cette session.
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST] est déconnecté(e).
+	</string>
+	<string name="invite_message">
+		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
+	</string>
+	<string name="generic_request_error">
+		Erreur lors de la requête, veuillez réessayer ultérieurement.
+	</string>
+	<string name="insufficient_perms_error">
+		Vous n&apos;avez pas les droits requis.
+	</string>
+	<string name="session_does_not_exist_error">
+		La session a expiré
+	</string>
+	<string name="no_ability_error">
+		Vous n&apos;avez pas ce pouvoir.
+	</string>
+	<string name="no_ability">
+		Vous n&apos;avez pas ce pouvoir.
+	</string>
+	<string name="not_a_mod_error">
+		Vous n&apos;êtes pas modérateur de session.
+	</string>
+	<string name="muted_error">
+		Un modérateur de groupe a désactivé votre chat écrit.
+	</string>
+	<string name="add_session_event">
+		Impossible d&apos;ajouter des participants à la session de chat avec [RECIPIENT].
+	</string>
+	<string name="message_session_event">
+		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
+	</string>
+	<string name="removed_from_group">
+		Vous avez été supprimé du groupe.
+	</string>
+	<string name="close_on_no_ability">
+		Vous ne pouvez plus participer à la session de chat.
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
index 810a32f64ecc4bfe75fcf458b641ec0c663df8ef..1315a4b100475d2d77b8a889fcca5a1981f05c18 100644
--- a/indra/newview/skins/default/xui/fr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml
@@ -1,77 +1,77 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-		</message>
-		<message name="invalid_region_handoff">
-			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à la page suivante :
-www.secondlife.com/support
-		</message>
-		<message name="blocked_tport">
-			Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-		</message>
-		<message name="nolandmark_tport">
-			Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
-		</message>
-		<message name="timeout_tport">
-			Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
-Veuillez réessayer dans un moment.
-		</message>
-		<message name="noaccess_tport">
-			Désolé, vous n&apos;avez pas accès à cette destination.
-		</message>
-		<message name="missing_attach_tport">
-			Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
-		</message>
-		<message name="too_many_uploads_tport">
-			Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-		</message>
-		<message name="expired_tport">
-			Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="expired_region_handoff">
-			Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="no_host">
-			Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
-		</message>
-		<message name="no_inventory_host">
-			L&apos;inventaire est temporairement indisponible.
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			Envoi vers la destination en cours.
-		</message>
-		<message name="redirecting">
-			Redirection vers un emplacement différent en cours.
-		</message>
-		<message name="relaying">
-			Relai vers la destination en cours.
-		</message>
-		<message name="sending_home">
-			Requête de la demande d&apos;envoi vers votre domicile en cours.
-		</message>
-		<message name="sending_landmark">
-			Requête de la demande d&apos;envoi vers le repère en cours.
-		</message>
-		<message name="completing">
-			Téléportation sur le point d&apos;aboutir.
-		</message>
-		<message name="resolving">
-			Destination en cours de résolution.
-		</message>
-		<message name="contacting">
-			Contact avec la nouvelle région en cours.
-		</message>
-		<message name="arriving">
-			Vous arrivez...
-		</message>
-		<message name="requesting">
-			Demande de téléportation en cours...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir vous téléporter.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+		</message>
+		<message name="invalid_region_handoff">
+			Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir traverser des régions.
+Si ce message persiste, veuillez consulter la page [SUPPORT_SITE].
+		</message>
+		<message name="blocked_tport">
+			Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+		</message>
+		<message name="nolandmark_tport">
+			Désolé, le système n&apos;a pas réussi à localiser la destination de votre repère.
+		</message>
+		<message name="timeout_tport">
+			Désolé, la connexion vers votre lieu de téléportation n&apos;a pas abouti.
+Veuillez réessayer dans un moment.
+		</message>
+		<message name="noaccess_tport">
+			Désolé, vous n&apos;avez pas accès à cette destination.
+		</message>
+		<message name="missing_attach_tport">
+			Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d&apos;essayer de vous téléporter.
+		</message>
+		<message name="too_many_uploads_tport">
+			Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+		</message>
+		<message name="expired_tport">
+			Désolé, votre demande de téléportation n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="expired_region_handoff">
+			Désolé, votre demande pour passer dans une autre région n&apos;a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="no_host">
+			Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu&apos;elle n&apos;existe plus. Veuillez réessayer dans quelques minutes.
+		</message>
+		<message name="no_inventory_host">
+			L&apos;inventaire est temporairement indisponible.
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			Envoi vers la destination en cours.
+		</message>
+		<message name="redirecting">
+			Redirection vers un emplacement différent en cours.
+		</message>
+		<message name="relaying">
+			Relai vers la destination en cours.
+		</message>
+		<message name="sending_home">
+			Requête de la demande d&apos;envoi vers votre domicile en cours.
+		</message>
+		<message name="sending_landmark">
+			Requête de la demande d&apos;envoi vers le repère en cours.
+		</message>
+		<message name="completing">
+			Téléportation sur le point d&apos;aboutir.
+		</message>
+		<message name="resolving">
+			Destination en cours de résolution.
+		</message>
+		<message name="contacting">
+			Contact avec la nouvelle région en cours.
+		</message>
+		<message name="arriving">
+			Vous arrivez...
+		</message>
+		<message name="requesting">
+			Demande de téléportation en cours...
+		</message>
+	</message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index 2c9137593020ad53786a1b4bad674c04f8262874..a5aff9d48647933858a0ac482a17fb4ba9aeba25 100644
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Informazioni su [APP_NAME]">
+<floater name="floater_about" title="INFORMAZIONI SU [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index ede581c5edcc5c9d74531a6cb25b0023678d7362..f2bd150ad7bd7959b21605d179772a9a11e6ac5d 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Informazioni sul terreno">
+<floater name="floaterland" title="INFORMAZIONI SUL TERRENO">
 	<tab_container name="landtab">
 		<panel label="Generale" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml
index edbb9ab9a93aa6ae33a4381b5093da70a49d46e9..bba76a83cc6e3ebe9f6d853aced7b357fac78500 100644
--- a/indra/newview/skins/default/xui/it/floater_auction.xml
+++ b/indra/newview/skins/default/xui/it/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Inizia a vendere terra Linden">
+<floater name="floater_auction" title="INIZIA A VENDERE TERRA LINDEN">
 	<check_box label="Includi barriere di selezione gialle" name="fence_check"/>
 	<button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
index a223e30fb56f22783cc7da3cf6bf68e552b04c06..89a61eeca8c473b304351c7e22a08ffe50c9b476 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Scegli residente">
+<floater name="avatarpicker" title="SCEGLI RESIDENTE">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Cerca" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
index 281f436224baa71e07082d7e55091fb8daf8df3a..f55b23af355c6c2906f6a89476f006e6b70039fb 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texture dell&apos;Avatar">
+<floater name="avatar_texture_debug" title="TEXTURE DELL&apos;AVATAR">
 	<text name="baked_label">
 		Texture Visualizzate
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml
index 035b073729b5882119f990529ac5d2d77ed82571..126c03e855698ac93a7d016d08961a162187460f 100644
--- a/indra/newview/skins/default/xui/it/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/it/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Segnali luminosi">
+<floater name="beacons" title="SEGNALI LUMINOSI">
 	<panel name="beacons_panel">
 		<check_box label="Oggetti scriptati con solo &apos;tocca&apos; abilitato" name="touch_only"/>
 		<check_box label="Oggetti scriptati" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 2c60aeda2b236973241d725448e69de73dfd4b81..c6ee0f79176e21cfc3aba9c70af15bf337e674c3 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opzioni della griglia">
+<floater name="build options floater" title="OPZIONI DELLA GRIGLIA">
 	<spinner label="Unità di misura della griglia (metri)" name="GridResolution" width="250" label_width="192"/>
 	<spinner label="Estensione della griglia (metri)" name="GridDrawSize" width="250" label_width="192"/>
 	<check_box label="Abilita sotto-unità di movimento" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
index 7ca57f34b3230b3ffddb4132b839e15776efa059..7f5b68279e989c3a2de9bf59a958ca8684eab9ab 100644
--- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Modifica in massa i permessi del contenuto">
+<floater name="floaterbulkperms" title="MODIFICA IN MASSA I PERMESSI DEL CONTENUTO">
 	<text name="applyto">
 		Tipi di contenuto
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml
index d9ce29fa08a07fac025144e178b6e08f5ed190a2..23fa1a41a6906ea89269e040e69012e746026c39 100644
--- a/indra/newview/skins/default/xui/it/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/it/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Collisioni, spinte e colpi">
+<floater name="floater_bumps" title="COLLISIONI, SPINTE E COLPI">
 	<string name="none_detected">
 		Nessuno rilevato
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
index 2836f98970485aac1a26c4a082e79ff29d77be24..1a6f64c07e47591d65ed40b5ca99b56674d01093 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Compra i contenuti">
+<floater name="floater_buy_contents" title="COMPRA I CONTENUTI">
 	<text name="contains_text">
 		[NAME] contiene:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
index a24f0dbe7a33f496dd7311293485e493b800f793..6b881683f130137be635580b4d37f5c77f88c8cd 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Acquista valuta">
+<floater name="buy currency" title="ACQUISTA VALUTA">
 	<text name="info_buying">
 		Acquistando valuta:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml
index d6036c19dd6084cf83d02b51304d31c88010cf76..b5d7ba076370b1e15a2a5f1cd6ee68061f347319 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Compra terra">
+<floater name="buy land" title="COMPRA TERRA">
 	<text name="region_name_label">
 		Regione:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml
index 90ff84a89c774a1b2942ac0cbbc3404d625f9a0b..e99d43236703a76e3aedf8948d96f7386ef3bc06 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Compra una copia dell&apos;oggetto">
+<floater name="contents" title="COMPRA UNA COPIA DELL&apos;OGGETTO">
 	<text name="contents_text">
 		e dei suoi contenuti:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_choose_group.xml b/indra/newview/skins/default/xui/it/floater_choose_group.xml
index 3b5fc79bd8785ba182d4295355cdcdce47a8ffcb..00f2692295d7dfe08acc7599fa5afa1ce020887e 100644
--- a/indra/newview/skins/default/xui/it/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/it/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Gruppi">
+<floater name="groups" title="GRUPPI">
 	<text name="groupdesc">
 		Scegli un gruppo:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml
index 1e6d7bc3f09401f33f4e26402af90c3120bbf77f..297b006e7254380a89b7e45d85158e4819c35d67 100644
--- a/indra/newview/skins/default/xui/it/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Tavolozza colori">
+<floater name="ColorPicker" title="TAVOLOZZA COLORI">
 	<text name="r_val_text">
 		Rosso:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml
index eac673e004d9fbe39ebd8513a01a54130d10304f..ad6111718af7298fb37ff851bed252826756dfc5 100644
--- a/indra/newview/skins/default/xui/it/floater_customize.xml
+++ b/indra/newview/skins/default/xui/it/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aspetto fisico" width="551">
+<floater name="floater customize" title="ASPETTO FISICO" width="551">
 	<tab_container name="customize tab container" tab_min_width="120" width="549">
 		<placeholder label="Parti del corpo" name="body_parts_placeholder"/>
 		<panel label="Forma del corpo" name="Shape" left="124" width="389">
diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
index 4c62d4f5a24afca0aedfb4fff9c7ddd2556578f5..7d50e322c04b5b3f01ebd28c6729384de8a46f58 100644
--- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor delle ciclo giorno/notte">
+<floater name="Day Cycle Floater" title="EDITOR DELLE CICLO GIORNO/NOTTE">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo giorno/notte" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml
index cbf965bf93d05f69a2570e599ac3c95eeab94938..932978809d5212098fb79e9d4d242e3c9157d611 100644
--- a/indra/newview/skins/default/xui/it/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Impostazioni dispositivi Voice Chat"/>
+<floater name="floater_device_settings" title="IMPOSTAZIONI DISPOSITIVI VOICE CHAT"/>
diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml
index 36f97bda81fa611b972d13bd4bb45b1f999c204a..32858d18cdc092a91c4807215031dc81e8c5d10b 100644
--- a/indra/newview/skins/default/xui/it/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor dell&apos;ambiente">
+<floater name="Environment Editor Floater" title="EDITOR DELL&apos;AMBIENTE">
 	<text name="EnvTimeText">
 		Ora del
 giorno
diff --git a/indra/newview/skins/default/xui/it/floater_font_test.xml b/indra/newview/skins/default/xui/it/floater_font_test.xml
index 27b87a931d66d05d4a581bb728d191f417d0f0b0..859c068b11b7f7cb2eabdc81e3dae60b43b01375 100644
--- a/indra/newview/skins/default/xui/it/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/it/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Tipo di carattere per test">
+<floater name="contents" title="TIPO DI CARATTERE PER TEST">
 	<text name="linea">
 		OverrideTest, dovrebbe apparire qui come Times. (Dal default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
index 997e13ecb50e17f124cd1f49738f02479a219b6c..91b7381d13dacc08e4d41b6396acdb374f50487e 100644
--- a/indra/newview/skins/default/xui/it/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gesture attive">
+<floater name="gestures" title="GESTURE ATTIVE">
 	<text name="help_label">
 		Fai doppio click su una gesture per azionare animazioni
 e suoni.
diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
index 688f9137a251f6dcba9778e71a4f83660cc8357e..cdf3e970a662f1654114255acced50605d60ef3a 100644
--- a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Impostazioni Hardware">
+<floater name="Hardware Settings Floater" title="IMPOSTAZIONI HARDWARE">
 	<text name="Filtering:">
 		Filtraggio:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml
index d31bcedf05e8a65a275f09aedb8d98f19799181b..e458913452f0c3afb7d2244af3b00a0ab3fc51a1 100644
--- a/indra/newview/skins/default/xui/it/floater_hud.xml
+++ b/indra/newview/skins/default/xui/it/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml
index 6028c40557c5da62cb33b4ff0965fc88ea7871b0..1a4e6c3c1bdb50e10efc53879e5f079817fe3a87 100644
--- a/indra/newview/skins/default/xui/it/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/it/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Ispeziona oggetti" min_width="450">
+<floater name="inspect" title="ISPEZIONA OGGETTI" min_width="450">
 	<scroll_list name="object_list" tool_tip="Seleziona un oggetto da questo elenco per evidenziarlo inworld">
 		<column label="Nome dell&apos;oggetto" name="object_name"/>
 		<column label="Proprietario" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml
index f21f213497649774880db0e79055cfee432cfe6b..e3325463d6c20b2aa8c43d50968b6f57fd55d1e7 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventario">
+<floater name="Inventory" title="INVENTARIO">
 	<search_editor label="Scrivi qui per cercare" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Tutti gli elementi" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
index e32f57e9f4e635f4b25701ae4f805ac658e3c0d8..8860fd82076bc5b1c742c8bac2f790d4b291814f 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Proprietà dell&apos;oggetto nell&apos;inventario">
+<floater name="item properties" title="PROPRIETÀ DELL&apos;OGGETTO NELL&apos;INVENTARIO">
 	<text name="LabelItemNameTitle">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
index c2c05b4023d88fb3e50e97a6f5cc3b41c4ee4b22..b5a17b2fc1793a12b16044b4e43aa04b0341bd75 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="Inventario_Cose_recenti" width="165">
+<floater name="Inventory Finder" title="INVENTARIO_COSE_RECENTI" width="165">
 	<check_box label="Animazioni" name="check_animation"/>
 	<check_box label="Biglietti da visita" name="check_calling_card"/>
 	<check_box label="Abiti" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml
index b7b766391074154941c42133f4ede6541c6abef9..d74ff9bfb49e72c37ad87bf0c73d509ff8a3dbc6 100644
--- a/indra/newview/skins/default/xui/it/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/it/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configurazione Joystick">
+<floater name="Joystick" title="CONFIGURAZIONE JOYSTICK">
 	<check_box name="enable_joystick" label="Abilita Joystick:"/>
 	<text left="120" name="joystick_type" width="380"/>
 	<spinner label="Mapping: asse X" name="JoystickAxis1" label_width="140" width="180" left="12"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
index af70ad9d310b482862d97b8ff08ba390c5acf65b..5ed748da69e073feeb227094be4cebc9ec0a98cb 100644
--- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Misuratore del lag">
+<floater name="floater_lagmeter" title="MISURATORE DEL LAG">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/>
 	<text left="30" name="client_lag_cause" right="-10" />
 	<text left="30" name="network_lag_cause" right="-10" />
diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
index 85661c28d72bf537b6ae256178ebbbbaad920c6e..8a6689f6afcf378d4ee047f3d5b6d048160c6c42 100644
--- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Il mio terreno">
+<floater name="land holdings floater" title="IL MIO TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nome del terreno" name="name"/>
 		<column label="Regione" name="location"/>
diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
index bb1f6116cf96f435946bf1fd95a1331ff8cf1de0..bd50ad3df7e14820febc70c79659afd7ab480780 100644
--- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: Nuovo script">
+<floater name="script ed float" title="SCRIPT: NUOVO SCRIPT">
 	<button label="Ripristina" label_selected="Ripristina" name="Reset"/>
 	<check_box label="In esecuzione" name="running" left="4"/>
 	<check_box label="Mono" name="mono" left="106"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
index ec62dd087d2c431c66532bc2d4ca7ea8d7d9dd61..4241a32ec1b6036acece97134971d90b73d90b34 100644
--- a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Segui il cursore" name="lock_check"/>
 	<combo_box label="Blocca" name="history_combo" left_delta="120" width="70"/>
 	<button label="Indietro" name="back_btn" left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
index 4d3462b3484867a1d4014cc6c6c3f8b3f29c4557..7a5f9c9fcbc6b84f1e5ad47d480eb246479b540a 100644
--- a/indra/newview/skins/default/xui/it/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Browser multimediale">
+<floater name="floater_about" title="BROWSER MULTIMEDIALE">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Indietro" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
index 4bd0e6ae6b79712128ebb938dd3dd8a27094ac6d..d1809531574d2f64bc22a69e33d87b0866195787 100644
--- a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Simulazione di perdità di memoria">
+<floater name="MemLeak" title="SIMULAZIONE DI PERDITÀ DI MEMORIA">
 	<spinner label="Perdità di velocità (bytes per frame):" name="leak_speed"/>
 	<spinner label="Memoria Persa Max (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml
index 6bacdcab4166a0278935ea16754b8a6d9d906187..a72bfe96815776e72af1314c6700d9929d21e1ea 100644
--- a/indra/newview/skins/default/xui/it/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Ignora l&apos;oggetto dal nome">
+<floater name="mute by name" title="IGNORA L&apos;OGGETTO DAL NOME">
 	<text name="message">
 		Ignora per nome ha effetti sull&apos;oggetto in chat e IM, non
 nei suoni. Devi scrivere esattamente il nome dell&apos;oggetto.
diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml
index a77b8aff80fbb710052a573e1b57e43c70389682..faeba0a6d9a580cab2502691bae6e5c1dabec317 100644
--- a/indra/newview/skins/default/xui/it/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/it/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contatti">
+<floater name="floater_my_friends" title="CONTATTI">
 	<tab_container name="friends_and_groups">
 		<panel label="Amici" name="friends_panel"/>
 		<panel label="Gruppi" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml
index d04a6f3632744d7f1a3f8f82e110ced7306d1d95..0c2029e18e4c5260e882fd02cd4765e2af6a08cd 100644
--- a/indra/newview/skins/default/xui/it/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/it/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Contenuto dell&apos;oggetto">
+<floater name="objectcontents" title="CONTENUTO DELL&apos;OGGETTO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
index 8037481f37e580b5f6b7d27ed61fbb14df612ff5..46de31455bb813c750f0eb04e56ed6cf873e50a6 100644
--- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permessi di base di importazione">
+<floater name="perm prefs" title="PERMESSI DI BASE DI IMPORTAZIONE">
 	<panel label="Permessi" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Condividi con il gruppo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/it/floater_post_process.xml b/indra/newview/skins/default/xui/it/floater_post_process.xml
index 226970041b2c04c1c13c0fb3d3f1b6325327676c..3aa8b2910176985109e3668bc58d64e5b4bafa4a 100644
--- a/indra/newview/skins/default/xui/it/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/it/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Impostazioni di post-produzione">
+<floater name="Post-Process Floater" title="IMPOSTAZIONI DI POST-PRODUZIONE">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtro Colore" name="wmiColorFilterPanel">
 			<check_box label="Abilita" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml
index 5132771acc8146abe4d942a571df48b2ecd5089a..5ea3b634d447a38d6d259a4abf6a11aa43461081 100644
--- a/indra/newview/skins/default/xui/it/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/it/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Invia la fotografia via email">
+<floater name="Postcard" title="INVIA LA FOTOGRAFIA VIA EMAIL">
 	<text name="to_label" width="135">
 		Email del destinatario:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml
index 6277300bee5080b4ff4b370886551ad5ebc7fb4e..172449554d3c1c53461bad42a07dd7c655b8197e 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferenze" min_width="350" width="646">
+<floater name="Preferences" title="PREFERENZE" min_width="350" width="646">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
 	<button label="Applica" label_selected="Applica" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
index f78c70b1fe08f7582568b2973e03a9225a188868..5819bd37a53032e04b5a9ebf167e3576af21648c 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Informazione Riservata"/>
+<floater name="classified_preview" title="INFORMAZIONE RISERVATA"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml
index 7cc99a9fea66094cf5b57e182498fded549d4174..dca38c363f6dde629df4369bc515dc9efc57ad71 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Informazione sull&apos;evento"/>
+<floater name="event_preview" title="INFORMAZIONE SULL&apos;EVENTO"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
index b0608c8546e7fed7a78f0243cebb12a82e71dd11..81a51223b05249eba1c250eff246e95cf96f24a3 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Salva" label_selected="Salva" name="Save"/>
 	<text name="desc txt">
 		Descrizione:
diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml
index a802550bf4a15b55de5e53ff3843b164faa940b3..a715cf1f06cacdc09fb2278ee898c847258d2ae9 100644
--- a/indra/newview/skins/default/xui/it/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/it/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Regione/Proprietà"/>
+<floater name="regioninfo" title="REGIONE/PROPRIETÀ"/>
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
index c67fc69db6db5238dab5139d414de925a0545568..4b969354fedc31952b18ff1e5c1fa72fb284cde5 100644
--- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Denuncia di Abuso">
+<floater name="floater_report_abuse" title="DENUNCIA DI ABUSO">
 	<check_box label="Includi una fotografia" name="screen_check"/>
 	<text name="reporter_title">
 		Segnalato da:
diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml
index 39736dde673fe194b5b4fb404687e2a70a8e1815..89bf80da5ed062f2fa1c6194e9a8d25d01d51030 100644
--- a/indra/newview/skins/default/xui/it/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Avvisi/Errori Script">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Tutti gli script]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml
index 20af60b2d49f7de699038b68fc23b101e39b58e6..934ffd539588ae168a0d1aec791dce2cbbd4bfce 100644
--- a/indra/newview/skins/default/xui/it/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview lsl text" title="Script: Script di rotazione">
+<floater name="preview lsl text" title="SCRIPT: SCRIPT DI ROTAZIONE">
 	<text name="desc txt">
 		Descrizione:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml
index e5b38fea62f5982c898d9e173244bc2424861af2..37eb3e4bbfb62f0082ee4fb29bc521054d9e283f 100644
--- a/indra/newview/skins/default/xui/it/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Progressione reset">
+<floater name="queue" title="PROGRESSIONE RESET">
 	<button label="Chiudi" label_selected="Chiudi" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml
index 470fb7613513a86fa59880fa2fab4e7adc543814..e5f923f7a3f9ffa2b63e2a63ca457e683a4d41fa 100644
--- a/indra/newview/skins/default/xui/it/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Cerca Script" width="320">
+<floater name="script search" title="CERCA SCRIPT" width="320">
 	<check_box label="Senza distinzione tra maiuscole e minuscole" name="case_text" left="65"/>
 	<button label="Cerca" label_selected="Cerca" name="search_btn" width="85"/>
 	<button label="Sostituisci" label_selected="Sostituisci" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/it/floater_sell_land.xml b/indra/newview/skins/default/xui/it/floater_sell_land.xml
index 79dd2c5abf1acc8afdddf71145264c0966242dda..91712a706bb046995770c32c689a3bc92fa88e1e 100644
--- a/indra/newview/skins/default/xui/it/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vendi terra">
+<floater name="sell land" title="VENDI TERRA">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
index 6dd1b7978de2e22fe8235e658113ae9d7cafdf75..aec3c8aa9d4462bfec18da4220e66efa282f4a8d 100644
--- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configurazioni per il debug">
+<floater name="settings_debug" title="CONFIGURAZIONI PER IL DEBUG">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="VERO"/>
 		<combo_box.item name="FALSE" label="FALSO"/>
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index 808158ff7e70eddd57176cf1063c50199fc4cc4c..e226ce6ffe4eaebde00796536ff61715207d9086 100644
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Anteprima della fotografia" width="247">
+<floater name="Snapshot" title="ANTEPRIMA DELLA FOTOGRAFIA" width="247">
 	<text name="type_label">
 		Destinazione della fotografia
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_sound_preview.xml b/indra/newview/skins/default/xui/it/floater_sound_preview.xml
index 86117329839811060819f9d3b437faec34085ca7..221e5e5b531d4f1cfbdac9235bb896028ff445ab 100644
--- a/indra/newview/skins/default/xui/it/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml
index 6083949b8c19ded88c9c6433379e18256b66917b..00df1ff99493e0230e8c42951a6734f28f2c9d5c 100644
--- a/indra/newview/skins/default/xui/it/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/it/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistiche"/>
+<floater name="stats floater" title="STATISTICHE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml
index 0c5199dbc7f11db5907d129ffa3c934a9e06c295..de5c32574f4c728884535b8fc2670c1fe8a1e438 100644
--- a/indra/newview/skins/default/xui/it/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/it/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286">
 	<text name="status_text_connected">
 		Telehub connesso all&apos;oggetto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
index 65bc8ba41db74578442484eb2b65f2b01263867d..836f85b48c4af308fc3b553b59cd42a1e322dfa8 100644
--- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Preferiti: Immagine">
+<floater name="texture picker" title="PREFERITI: IMMAGINE">
 	<string name="choose_picture">
 		Clicca per scegliere l&apos;immagine
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 8fc1818ccc191d0afb148a504476ac360ae7c6e7..8e6f27e162fdb98d631473909db73274f29db129 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Costruisci" width="288">
+<floater name="toolbox floater" title="" short_title="COSTRUISCI" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Muoviti"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Modifica"/>
diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml
index 470e21769c8ccaf62f75cd2bf5c2cd4026fabcee..9b406199e91c62954c43a5416635e1f12977cd42 100644
--- a/indra/newview/skins/default/xui/it/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="In caricamento...">
+<floater name="top_objects" title="IN CARICAMENTO...">
 	<text name="title_text">
 		In caricamento...
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
index 33f91ed1c883509e0094b332cfbd828f8c5287ba..13db1d4589b97ed2e09521ef3a16e94930608af0 100644
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ b/indra/newview/skins/default/xui/it/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor avanzato dell&apos;acqua">
+<floater name="Water Floater" title="EDITOR AVANZATO DELL&apos;ACQUA">
 	<text name="KeyFramePresetsText" width="224">
 		Impostazioni predeterminate dell&apos;acqua:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
index 5076c777dc10a6c49bb5cecaec212f6479dcc623..e86d656e3922544ddbbd4cebe381b9cb6c7884ee 100644
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor avanzato del cielo">
+<floater name="WindLight floater" title="EDITOR AVANZATO DEL CIELO">
 	<text name="KeyFramePresetsText">
 		Cieli predefiniti:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml
index e19335fe07f63c11c9338ea4c6dbfd6740303022..6fb7b93bc71f55678ce919be449e5062db670197 100644
--- a/indra/newview/skins/default/xui/it/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/it/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mappa">
+<floater name="worldmap" title="MAPPA">
 	<tab_container name="maptab">
 		<panel label="Oggetti" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
index 0eba7bf3b69d43b70e41ed5e9f5f1a5c16152e6b..33f3c367c2e8eb7e8cc635035a94e642d14ad1cf 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Residente" />
-   <string name="AcctTypeTrial"
-    value="Prova" />
-   <string name="AcctTypeCharterMember"
-    value="Membro privilegiato" />
-   <string name="AcctTypeEmployee"
-    value="Impiegato della Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Info. di pagamento usate" />
-   <string name="PaymentInfoOnFile"
-    value="Info. di pagamento in archivio" />
-   <string name="NoPaymentInfoOnFile"
-    value="Nessuna info. di pagamento" />
-   <string name="AgeVerified"
-    value="Età verificata" />
-   <string name="NotAgeVerified"
-    value="Età non verificata" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=it
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Risposta agli IM quando sono in &apos;Occupato&apos;:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Residente" />
+   <string name="AcctTypeTrial"
+    value="Prova" />
+   <string name="AcctTypeCharterMember"
+    value="Membro privilegiato" />
+   <string name="AcctTypeEmployee"
+    value="Impiegato della Linden Lab" />
+   <string name="PaymentInfoUsed"
+    value="Info. di pagamento usate" />
+   <string name="PaymentInfoOnFile"
+    value="Info. di pagamento in archivio" />
+   <string name="NoPaymentInfoOnFile"
+    value="Nessuna info. di pagamento" />
+   <string name="AgeVerified"
+    value="Età verificata" />
+   <string name="NotAgeVerified"
+    value="Età non verificata" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=it
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Partner:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Risposta agli IM quando sono in &apos;Occupato&apos;:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index a9b3d81a3b1080969d8ec977a84042706e098486..07911c68b1f62f7e52dff4d69b5451e997db31b2 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -1,43 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="[APP_NAME]について">
-<tab_container name="about_tab">
-	<panel name="credits_panel">
-	<text_editor name="credits_editor">
-		Second Lifeは、 Philip、Tessa、Andrew、Cory、James、Ben、Char、Charlie、Colin、Dan、Daniel、Doug、Eric、Hamlet、Haney、Eve、Hunter、Ian、Jeff、Jennifer、Jim、John、Lee、Mark、Peter、Phoenix、Richard、Robin、Xenon、Steve、Tanya、Eddie、Avi、Frank、Bruce、Aaron、Alice、Bob、Debra、Eileen、Helen、Janet、Louie、Leviathania、Stefan、Ray、Kevin、Tom、Mikeb、MikeT、Burgess、Elena、Tracy、Bill、Todd、Ryan、Zach、Sarah、Nova、Tim、Stephanie、Michael、Evan、Nicolas、Catherine、Rachelle、Dave、Holly、Bub、Kelly、Magellan、Ramzi、Don、Sabin、Jill、Rheya、Jeska、Torley、Kona、Callum、Charity、Ventrella、Jack、Vektor、Iris、Chris、Nicole、Mick、Reuben、Blue、Babbage、Yedwab、Deana、Lauren、Brent、Pathfinder、Chadrick、Altruima、Jesse、Teeny、Monroe、Icculus、David、Tess、Lizzie、Patsy、Isaac、Lawrence、Cyn、Bo、Gia、Annette、Marius、Tbone、Jonathan、Karen、Ginsu、Satoko、Yuko、Makiko、Thomas、Harry、Seth、Alexei、Brian、Guy、Runitai、Ethan、Data、Cornelius、Kenny、Swiss、Zero、Natria、Wendy、Stephen、Teeple、Thumper、Lucy、Dee、Mia、Liana、Warren、Branka、Aura、beez、Milo、Hermia、Red、Thrax、Joe、Sally、Magenta、Mogura、Paul、Jose、Rejean、Henrik、Lexie、Amber、Logan、Xan、Nora、Morpheus、Donovan、Leyla、MichaelFrancis、Beast、Cube、Bucky、Joshua、Stryfe、Harmony、Teresa、Claudia、Walker、Glenn、Fritz、Fordak、June、Cleopetra、Jean、Ivy、Betsy、Roosevelt、Spike、Ken、Which、Tofu、Chiyo、Rob、Zee、dustin、George、Del、Matthew、Cat、Jacqui、Lightfoot、Adrian、Viola、Alfred、Noel、Irfan、Sunil、Yool、Rika、Jane、Xtreme、Frontier、a2、Neo、Siobhan、Yoz、Justin、Elle、Qarl、Benjamin、Isabel、Gulliver、Everett、Christopher、Izzy、Stephany、Garry、Sejong、Sean、Tobin、Iridium、Meta、Anthony、Jeremy、JP、Jake、Maurice、Madhavi、Leopard、Kyle、Joon、Kari、Bert、Belinda、Jon、Kristi、Bridie、Pramod、KJ、Socrates、Maria、Ivan、Aric、Yamasaki、Adreanne、Jay、MitchK、Ceren、Coco、Durl、Jenny、Periapse、Kartic、Storrs、Lotte、Sandy、Rohn、Colossus、Zen、BigPapi、Brad、Pastrami、Kurz、Mani、Neuro、Jaime、MJ、Rowan、Sgt、Elvis、Gecko、Samuel、Sardonyx、Leo、Bryan、Niko、Soft、Poppy、Rachel、Aki、Angelo、Banzai、Alexa、Sue、CeeLo、Bender、CG、Gillian、Pelle、Nick、Echo、Zara、Christine、Shamiran、Emma、Blake、Keiko、Plexus、Joppa、Sidewinder、Erica、Ashlei、Twilight、Kristen、Brett、Q、Enus、Simon、Bevis、Kraft、Kip、Chandler、Ron、LauraP、Ram、KyleJM、Scouse、Prospero、Melissa、Marty、Nat、Hamilton、Kend、Lordan、Jimmy、Kosmo、Seraph、Green、Ekim、Wiggo、JT、Rome、Doris、Miz、Benoc、Whump、Trinity、Patch、Kate、TJ、Bao、Joohwan、Christy、Sofia、Matias、Cogsworth、Johan、Oreh、Cheah、Angela、Brandy、Mango、Lan、Aleks、Gloria、Heidy、Mitchell、Space、Colton、Bambers、Einstein、Maggie、Malbers、Rose、Winnie、Stella、Milton、Rothman、Niall、Marin、Allison、Katie、Dawn、Katt、Dusty、Kalpana、Judy、Andrea、Ambroff、Infinity、Gail、Rico、Raymond、Yi、William、Christa、M、Teagan、Scout、Molly、Dante、Corr、Dynamike、Usi、Kaylee、Vidtuts、Lil、Danica、Sascha、Kelv、Jacob、Nya、Rodney、Brandon、Elsie、Blondin、Grant、Katrin、Nyx、Gabriel、Locklainn、Claire、Devin、Minerva、Monty、Austin、Bradford、Si、Keira、H、Caitlin、Dita、Makai、Jenn、Ann、Meredith、Clare、Joy、Praveen、Cody、Edmund、Ruthe、Sirena、Gayathri、Spider、FJ、Davidoff、Tian、Jennie、Louise、Oskar、Landon、Noelle、Jarv、Ingrid、Al、Sommer、Doc、Aria、Huin、Gray、Lili、Vir、DJ、Yang、T、Simone、Maestro、Scott、Charlene、Quixote、Amanda、Susan、Zed、Anne、Enkidu、Esbee、Joroan、Katelin、Roxie、Tay、Scarlet、Kevin、Johnny、Wolfgang、Andren、Bob、Howard、Merov、Rand、Ray、Michon、Newell、Galen、Dessie、Les、Michon、Jenelle、Geo、Siz、Shapiro、Pete、Calyle、Selene、Allen、Phoebe、Goldin、Kimmora、Dakota、Slaton、Lindquist、Zoey、Hari、Othello、Rohit、Sheldon、Petra、Viale、Gordon、Kaye、Pink、Ferny、Emerson、Davy、Bri、Chan、Juan、Robert、Terrence、Nathan、Carlと、その他多数の人達によって作成されました。
-
-  このバージョンをこれまでで最高のものになるようご協力をいただいた以下の住人の皆様に深く感謝いたします。 able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-
-  ビジネスで成功するには、勇気を持って、誰よりも先に、人と違ったことをすることだ。 --Henry Marchant
-	</text_editor>
-	</panel>
-	<panel name="licenses_panel">
-	<text_editor name="credits_editor">
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-  GL Copyright (C) 1999-2004 Brian Paul.
-  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-  ogg/vorbis Copyright (C) 2001, Xiphophorus
-  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-  google-perftools Copyright (c) 2005, Google Inc.
-  
-  無断転写、複製、転載を禁じます。  詳細はlicenses.txtを参照してください。
-
-  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-	</text_editor>
-	</panel>
-</tab_container>
-	<text name="you_are_at">
-		[POSITION]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="[APP_NAME]について">
+	<tab_container name="about_tab">
+		<panel label="クレジット" name="credits_panel">
+			<text_editor name="credits_editor">
+				Second Lifeは、 Philip、Tessa、Andrew、Cory、James、Ben、Char、Charlie、Colin、Dan、Daniel、Doug、Eric、Hamlet、Haney、Eve、Hunter、Ian、Jeff、Jennifer、Jim、John、Lee、Mark、Peter、Phoenix、Richard、Robin、Xenon、Steve、Tanya、Eddie、Avi、Frank、Bruce、Aaron、Alice、Bob、Debra、Eileen、Helen、Janet、Louie、Leviathania、Stefan、Ray、Kevin、Tom、Mikeb、MikeT、Burgess、Elena、Tracy、Bill、Todd、Ryan、Zach、Sarah、Nova、Tim、Stephanie、Michael、Evan、Nicolas、Catherine、Rachelle、Dave、Holly、Bub、Kelly、Magellan、Ramzi、Don、Sabin、Jill、Rheya、Jeska、Torley、Kona、Callum、Charity、Ventrella、Jack、Vektor、Iris、Chris、Nicole、Mick、Reuben、Blue、Babbage、Yedwab、Deana、Lauren、Brent、Pathfinder、Chadrick、Altruima、Jesse、Teeny、Monroe、Icculus、David、Tess、Lizzie、Patsy、Isaac、Lawrence、Cyn、Bo、Gia、Annette、Marius、Tbone、Jonathan、Karen、Ginsu、Satoko、Yuko、Makiko、Thomas、Harry、Seth、Alexei、Brian、Guy、Runitai、Ethan、Data、Cornelius、Kenny、Swiss、Zero、Natria、Wendy、Stephen、Teeple、Thumper、Lucy、Dee、Mia、Liana、Warren、Branka、Aura、beez、Milo、Hermia、Red、Thrax、Joe、Sally、Magenta、Mogura、Paul、Jose、Rejean、Henrik、Lexie、Amber、Logan、Xan、Nora、Morpheus、Donovan、Leyla、MichaelFrancis、Beast、Cube、Bucky、Joshua、Stryfe、Harmony、Teresa、Claudia、Walker、Glenn、Fritz、Fordak、June、Cleopetra、Jean、Ivy、Betsy、Roosevelt、Spike、Ken、Which、Tofu、Chiyo、Rob、Zee、dustin、George、Del、Matthew、Cat、Jacqui、Lightfoot、Adrian、Viola、Alfred、Noel、Irfan、Sunil、Yool、Rika、Jane、Xtreme、Frontier、a2、Neo、Siobhan、Yoz、Justin、Elle、Qarl、Benjamin、Isabel、Gulliver、Everett、Christopher、Izzy、Stephany、Garry、Sejong、Sean、Tobin、Iridium、Meta、Anthony、Jeremy、JP、Jake、Maurice、Madhavi、Leopard、Kyle、Joon、Kari、Bert、Belinda、Jon、Kristi、Bridie、Pramod、KJ、Socrates、Maria、Ivan、Aric、Yamasaki、Adreanne、Jay、MitchK、Ceren、Coco、Durl、Jenny、Periapse、Kartic、Storrs、Lotte、Sandy、Rohn、Colossus、Zen、BigPapi、Brad、Pastrami、Kurz、Mani、Neuro、Jaime、MJ、Rowan、Sgt、Elvis、Gecko、Samuel、Sardonyx、Leo、Bryan、Niko、Soft、Poppy、Rachel、Aki、Angelo、Banzai、Alexa、Sue、CeeLo、Bender、CG、Gillian、Pelle、Nick、Echo、Zara、Christine、Shamiran、Emma、Blake、Keiko、Plexus、Joppa、Sidewinder、Erica、Ashlei、Twilight、Kristen、Brett、Q、Enus、Simon、Bevis、Kraft、Kip、Chandler、Ron、LauraP、Ram、KyleJM、Scouse、Prospero、Melissa、Marty、Nat、Hamilton、Kend、Lordan、Jimmy、Kosmo、Seraph、Green、Ekim、Wiggo、JT、Rome、Doris、Miz、Benoc、Whump、Trinity、Patch、Kate、TJ、Bao、Joohwan、Christy、Sofia、Matias、Cogsworth、Johan、Oreh、Cheah、Angela、Brandy、Mango、Lan、Aleks、Gloria、Heidy、Mitchell、Space、Colton、Bambers、Einstein、Maggie、Malbers、Rose、Winnie、Stella、Milton、Rothman、Niall、Marin、Allison、Katie、Dawn、Katt、Dusty、Kalpana、Judy、Andrea、Ambroff、Infinity、Gail、Rico、Raymond、Yi、William、Christa、M、Teagan、Scout、Molly、Dante、Corr、Dynamike、Usi、Kaylee、Vidtuts、Lil、Danica、Sascha、Kelv、Jacob、Nya、Rodney、Brandon、Elsie、Blondin、Grant、Katrin、Nyx、Gabriel、Locklainn、Claire、Devin、Minerva、Monty、Austin、Bradford、Si、Keira、H、Caitlin、Dita、Makai、Jenn、Ann、Meredith、Clare、Joy、Praveen、Cody、Edmund、Ruthe、Sirena、Gayathri、Spider、FJ、Davidoff、Tian、Jennie、Louise、Oskar、Landon、Noelle、Jarv、Ingrid、Al、Sommer、Doc、Aria、Huin、Gray、Lili、Vir、DJ、Yang、T、Simone、Maestro、Scott、Charlene、Quixote、Amanda、Susan、Zed、Anne、Enkidu、Esbee、Joroan、Katelin、Roxie、Tay、Scarlet、Kevin、Johnny、Wolfgang、Andren、Bob、Howard、Merov、Rand、Ray、Michon、Newell、Galen、Dessie、Les、Michon、Jenelle、Geo、Siz、Shapiro、Pete、Calyle、Selene、Allen、Phoebe、Goldin、Kimmora、Dakota、Slaton、Lindquist、Zoey、Hari、Othello、Rohit、Sheldon、Petra、Viale、Gordon、Kaye、Pink、Ferny、Emerson、Davy、Bri、Chan、Juan、Robert、Terrence、Nathan、Carlと、その他多数の人達によって作成されました。
+
+  このバージョンをこれまでで最高のものになるようご協力をいただいた以下の住人の皆様に深く感謝いたします。 able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+
+  ビジネスで成功するには、勇気を持って、誰よりも先に、人と違ったことをすることだ。 --Henry Marchant
+			</text_editor>
+		</panel>
+		<panel label="ライセンス" name="licenses_panel">
+			<text_editor name="credits_editor">
+				3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+  APR Copyright (C) 2000-2004 The Apache Software Foundation
+  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+  expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+  FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+  GL Copyright (C) 1999-2004 Brian Paul.
+  Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+  jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+  jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+  ogg/vorbis Copyright (C) 2001, Xiphophorus
+  OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+  SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+  SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+  google-perftools Copyright (c) 2005, Google Inc.
+  
+  無断転写、複製、転載を禁じます。  詳細はlicenses.txtを参照してください。
+
+  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+			</text_editor>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index fb7136d7ced1a1559969829776d1a706cbe1a00d..bb9dcac83bb7721e92c210a437214e0a7a735134 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -1,495 +1,475 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="土地情報">
-	<tab_container name="landtab">
-		<panel label="一般" name="land_general_panel">
-			<text name="Name:">
-				名前:
-			</text>
-			<line_editor name="Name"/>
-			<text name="Description:">
-				説明:
-			</text>
-			<text name="LandType">
-				種類:
-			</text>
-			<text name="LandTypeText">
-				メインランド/ホームステッド
-			</text>
-			<text name="ContentRating">
-				区分:
-			</text>
-			<text name="ContentRatingText">
-				Adult
-			</text>
-			<text name="Owner:">
-				オーナー:
-			</text>
-			<text name="OwnerText">
-				Leyla Linden
-			</text>
-			<button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/>
-			<text name="Group:">
-				グループ:
-			</text>
-			<button label="設定..." label_selected="設定..." name="Set..."/>
-			<check_box label="グループへの譲渡を許可" name="check deed" tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。"/>
-			<button label="譲渡..." label_selected="譲渡..." name="Deed..." tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。"/>
-			<check_box label="オーナーが譲渡と共に寄付" name="check contrib" tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。"/>
-			<text name="For Sale:">
-				販売の有無:
-			</text>
-			<text name="Not for sale.">
-				販売対象外
-			</text>
-			<text name="For Sale: Price L$[PRICE].">
-				価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル)
-			</text>
-			<button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
-			<text name="For sale to">
-				販売先:[BUYER]
-			</text>
-			<text name="Sell with landowners objects in parcel.">
-				オブジェクトも販売価格に含まれます
-			</text>
-			<text name="Selling with no objects in parcel.">
-				オブジェクトは販売対象外です
-			</text>
-			<button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/>
-			<text name="Claimed:">
-				取得日時:
-			</text>
-			<text name="DateClaimText">
-				2006年8月15日火曜日13:47:25
-			</text>
-			<text name="PriceLabel">
-				面積:
-			</text>
-			<text name="PriceText">
-				4048平方メートル
-			</text>
-			<text name="Traffic:">
-				交通量:
-			</text>
-			<text name="DwellText">
-				誤
-			</text>
-			<button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/>
-			<button label="グループ用に購入..." label_selected="グループ用に購入..." name="Buy For Group..."/>
-			<button label="入場許可を購入..." label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="125"/>
-			<button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/>
-			<button label="土地の返還を要求..." label_selected="土地の返還を要求..." name="Reclaim Land..."/>
-			<button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/>
-			<panel.string name="new users only">
-				新規ユーザーのみ
-			</panel.string>
-			<panel.string name="anyone">
-				誰でも
-			</panel.string>
-			<panel.string name="area_text">
-				面積:
-			</panel.string>
-			<panel.string name="area_size_text">
-				[AREA]平方メートル
-			</panel.string>
-			<panel.string name="auction_id_text">
-				オークションID: [ID]
-			</panel.string>
-			<panel.string name="need_tier_to_modify">
-				この土地を修正変更するには、購入を承認する必要があります。
-			</panel.string>
-			<panel.string name="group_owned_text">
-				(グループ所有)
-			</panel.string>
-			<panel.string name="profile_text">
-				プロフィール...
-			</panel.string>
-			<panel.string name="info_text">
-				情報...
-			</panel.string>
-			<panel.string name="public_text">
-				(公共)
-			</panel.string>
-			<panel.string name="none_text">
-				(なし)
-			</panel.string>
-			<panel.string name="sale_pending_text">
-				(購入審査中)
-			</panel.string>
-			<panel.string name="no_selection_text">
-				区画が選定されていません。
-「世界」メニュー>「土地情報」に進むか、別の区画を選択して、詳細を表示します。
-			</panel.string>
-		</panel>
-		<panel label="約款" name="land_covenant_panel">
-			<text font="SansSerifLarge" name="estate_section_lbl">
-				不動産:
-			</text>
-			<text name="estate_name_lbl">
-				名前:
-			</text>
-			<text name="estate_name_text">
-				メインランド
-			</text>
-			<text name="estate_owner_lbl">
-				オーナー:
-			</text>
-			<text name="estate_owner_text">
-				(なし)
-			</text>
-			<text_editor name="covenant_editor">
-				この不動産には約款がありません。
-			</text_editor>
-			<text name="covenant_timestamp_text">
-				最後の更新1969年12月31日水曜日16:00:00
-			</text>
-			<text font="SansSerifLarge" name="region_section_lbl">
-				地域:
-			</text>
-			<text name="region_name_lbl">
-				名前:
-			</text>
-			<text name="region_name_text">
-				Leyla
-			</text>
-			<text name="region_landtype_lbl">
-				種類:
-			</text>
-			<text name="region_landtype_text">
-				メインランド/ホームステッド
-			</text>
-			<text name="region_maturity_lbl">
-				区分:
-			</text>
-			<text name="region_maturity_text">
-				Adult
-			</text>
-			<text name="resellable_lbl">
-				再販:
-			</text>
-			<text name="resellable_clause">
-				この地域(リージョン)にある土地は再販できません。
-			</text>
-			<text name="changeable_lbl">
-				再分割:
-			</text>
-			<text name="changeable_clause">
-				この地域(リージョン)にある土地は統合または分割ができ
-ません。
-			</text>
-			<panel.string name="can_resell">
-				この地域で購入した土地は、再販できます。
-			</panel.string>
-			<panel.string name="can_not_resell">
-				この地域で購入した土地は、再販できないことがあります。
-			</panel.string>
-			<panel.string name="can_change">
-				この地域で購入した土地は、統合または再分割できます。
-			</panel.string>
-			<panel.string name="can_not_change">
-				この地域で購入した土地は、統合/再分割できないことが
-あります。
-			</panel.string>
-		</panel>
-		<panel label="オブジェクト" name="land_objects_panel">
-			<text name="parcel_object_bonus">
-				地域オブジェクトボーナス要因: [BONUS]
-			</text>
-			<text name="Simulator primitive usage:" width="500">
-				地域全体のプリム使用状況:
-			</text>
-			<text left="200" name="objects_available">
-				[MAX]の内[COUNT]([AVAILABLE]利用可能)
-			</text>
-			<panel.string left="200" name="objects_available_text">
-				[MAX]の内[COUNT]([AVAILABLE]利用可能)
-			</panel.string>
-			<panel.string left="200" name="objects_deleted_text">
-				[MAX]の内[COUNT]([DELETED]を削除)
-			</panel.string>
-			<text name="Primitives parcel supports:" width="200">
-				区画でサポートされるプリム数:
-			</text>
-			<text left="200" name="object_contrib_text">
-				[COUNT]
-			</text>
-			<text name="Primitives on parcel:">
-				区画上のプリム数:
-			</text>
-			<text left="200" name="total_objects_text">
-				[COUNT]
-			</text>
-			<text name="Owned by parcel owner:" width="300">
-				区画オーナーによる所有:
-			</text>
-			<text left="200" name="owner_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Set to group:">
-				グループに設定:
-			</text>
-			<text left="200" name="group_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Owned by others:">
-				他人による所有:
-			</text>
-			<text left="200" name="other_objects_text">
-				[COUNT]
-			</text>
-			<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
-			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
-			<text name="Selected / sat upon:">
-				選択済み/決定済み:
-			</text>
-			<text left="200" name="selected_objects_text">
-				[COUNT]
-			</text>
-			<text name="Autoreturn" width="500">
-				他の住人のオブジェクトの自動返却(分、0で自動返却なし)
-			</text>
-			<line_editor left_delta="5" name="clean other time" right="-80"/>
-			<text name="Object Owners:" width="150">
-				オブジェクトのオーナー:
-			</text>
-			<button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/>
-			<button label="オブジェクトの返却..." label_selected="オブジェクトの返却..." left="256" name="Return objects..."/>
-			<name_list label="カウント" name="owner list">
-				<column label="タイプ" name="type"/>
-				<column name="online_status"/>
-				<column label="名前" name="name"/>
-				<column label="カウント" name="count"/>
-				<column label="最新" name="mostrecent"/>
-			</name_list>
-		</panel>
-		<panel label="オプション" name="land_options_panel">
-			<text name="allow_label">
-				他の住人に以下を許可:
-			</text>
-			<check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/>
-			<check_box label="ランドマーク作成" name="check landmark"/>
-			<check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/>
-			<text left="138" name="allow_label2" width="144">
-				オブジェクトの作成:
-			</text>
-			<check_box label="すべての住人" left="280" name="edit objects check"/>
-			<check_box label="グループ" left="380" name="edit group objects check"/>
-			<text left="138" name="allow_label3" width="144">
-				オブジェクトの進入:
-			</text>
-			<check_box label="すべての住人" left="280" name="all object entry check"/>
-			<check_box label="グループ" left="380" name="group object entry check"/>
-			<text left="138" name="allow_label4" width="144">
-				スクリプトの実行:
-			</text>
-			<check_box label="すべての住人" left="280" name="check other scripts"/>
-			<check_box label="グループ" left="380" name="check group scripts"/>
-			<text name="land_options_label">
-				土地オプション:
-			</text>
-			<check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/>
-			<check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/>
-			<check_box label="検索に表示>(週L$30)以下の場所" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/>
-			<panel.string name="search_enabled_tooltip">
-				この区画を検索結果に表示する
-			</panel.string>
-			<panel.string name="search_disabled_small_tooltip">
-				区画面積が128平方メートルかそれ以下のため、このオプションは無効です。
-大きな区画のみ検索に表示させることが可能です。
-			</panel.string>
-			<panel.string name="search_disabled_permissions_tooltip">
-				あなたはこの区画の設定編集ができないため、このオプションは無効です。
-			</panel.string>
-			<combo_box name="land category with adult">
-				<combo_box.item name="item0" label="全カテゴリ"
-				/>
-				<combo_box.item name="item1" label="Linden所在地"
-				/>
-				<combo_box.item name="item2" label="Adult"
-				/>
-				<combo_box.item name="item3" label="アートとカルチャー"
-				/>
-				<combo_box.item name="item4" label="ビジネス"
-				/>
-				<combo_box.item name="item5" label="教育的"
-				/>
-				<combo_box.item name="item6" label="ゲーム"
-				/>
-				<combo_box.item name="item7" label="たまり場"
-				/>
-				<combo_box.item name="item8" label="新住人に好意的"
-				/>
-				<combo_box.item name="item9" label="公園と自然"
-				/>
-				<combo_box.item name="item10" label="住宅用"
-				/>
-				<combo_box.item name="item11" label="ショッピング"
-				/>
-				<combo_box.item name="item12" label="その他"
-				/>
-			</combo_box>
-			<combo_box name="land category">
-				<combo_box.item name="item0" label="全カテゴリー"
-				/>
-				<combo_box.item name="item1" label="Linden所在地"
-				/>
-				<combo_box.item name="item3" label="アート&amp;カルチャー"
-				/>
-				<combo_box.item name="item4" label="ビジネス"
-				/>
-				<combo_box.item name="item5" label="教育的"
-				/>
-				<combo_box.item name="item6" label="ゲーム"
-				/>
-				<combo_box.item name="item7" label="たまり場"
-				/>
-				<combo_box.item name="item8" label="新住人に好意的"
-				/>
-				<combo_box.item name="item9" label="公園と自然"
-				/>
-				<combo_box.item name="item10" label="住宅用"
-				/>
-				<combo_box.item name="item11" label="ショッピング"
-				/>
-				<combo_box.item name="item12" label="その他"
-				/>
-			</combo_box>
-			<button label="?" label_selected="?" name="?"/>
-			<check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
-			<panel.string name="mature_check_mature">
-				Matureコンテンツ
-			</panel.string>
-			<panel.string name="mature_check_adult">
-				Adultコンテンツ
-			</panel.string>
-			<panel.string name="mature_check_mature_tooltip">
-				あなたの区画情報及びコンテンツはMatureとされています。
-			</panel.string>
-			<panel.string name="mature_check_adult_tooltip">
-				あなたの区画情報及びコンテンツはAdultとされています。
-			</panel.string>
-			<text name="Snapshot:">
-				スナップショット:
-			</text>
-			<texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
-			<text name="landing_point">
-				着地点: [LANDING]
-			</text>
-			<panel.string name="landing_point_none">
-				(なし)
-			</panel.string>
-			<button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/>
-			<button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/>
-			<text name="Teleport Routing: ">
-				テレポート制限:
-			</text>
-			<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
-				<combo_box.item name="Blocked" label="不可"
-				/>
-				<combo_box.item name="LandingPoint" label="着地点"
-				/>
-				<combo_box.item name="Anywhere" label="どこでも"
-				/>
-			</combo_box>
-			<panel.string name="push_restrict_text">
-				プッシングを制限
-			</panel.string>
-			<panel.string name="push_restrict_region_text">
-				プッシングを制限 (地域優先)
-			</panel.string>
-		</panel>
-		<panel label="メディア" name="land_media_panel">
-			<text name="with media:">
-				タイプ:
-			</text>
-			<combo_box name="media type" tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します"/>
-			<text name="at URL:">
-				URL:
-			</text>
-			<button label="設定..." label_selected="設定..." name="set_media_url"/>
-			<text name="Description:">
-				説明:
-			</text>
-			<line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/>
-			<text name="Media texture:">
-				テクスチ
-ャ取替:
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/>
-			<text name="replace_texture_help" width="290">
-				「再生」矢印をクリックすると、このテクスチャーを
- 使用するオブジェクトに動画またはウェブ・ページ
- が表示されます。
-			</text>
-			<text name="Options:">
-				メディア
-オプション:
-			</text>
-			<check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。"/>
-			<check_box label="メディアのループ" name="media_loop" tool_tip="メディアをループ再生します。  メディアの再生が終わったら、最初から再生し直します。"/>
-			<check_box label="メディア URL を隠す" name="hide_media_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーにはメディア URL が表示されません。 これは HTML タイプには使用できませんのでご注意ください。"/>
-			<check_box label="音楽のURLを隠す" name="hide_music_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーには音楽の URL が表示されません。"/>
-			<text name="media_size" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。">
-				サイズ:
-			</text>
-			<spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
-			<spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
-			<text name="pixels">
-				ピクセル
-			</text>
-			<text name="MusicURL:">
-				音楽のURL:
-			</text>
-			<text name="Sound:">
-				サウンド:
-			</text>
-			<check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定" name="check sound local"/>
-			<button label="?" label_selected="?" left="408" name="?"/>
-			<text name="Voice settings:">
-				ボイス:
-			</text>
-			<check_box label="ボイスを有効にする" name="parcel_enable_voice_channel"/>
-			<check_box label="ボイスを有効にする(不動産設定)" name="parcel_enable_voice_channel_is_estate_disabled"/>
-			<check_box label="この区画でのボイス使用を制限する" name="parcel_enable_voice_channel_parcel"/>
-		</panel>
-		<panel label="アクセス" name="land_access_panel">
-			<text name="Limit access to this parcel to:">
-				この区画にアクセス
-			</text>
-			<check_box label="パブリック・アクセスを許可" name="public_access"/>
-			<text name="Only Allow">
-				次の住人のアクセスをブロック:
-			</text>
-			<check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="支払い情報未確認の住人を排除する"/>
-			<check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を排除する詳細については、support.secondlife.comを参照してください。"/>
-			<panel.string name="estate_override">
-				1つ以上のオプションが、不動産レベルで設定されています。
-			</panel.string>
-			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
-			<check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
-			<combo_box name="pass_combo">
-				<combo_box.item name="Anyone" label="誰でも"
-				/>
-				<combo_box.item name="Group" label="グループ"
-				/>
-			</combo_box>
-			<spinner label="価格(L$):" name="PriceSpin"/>
-			<spinner label="アクセス時間:" name="HoursSpin"/>
-			<text label="常に許可" name="AllowedText">
-				許可された住人
-			</text>
-			<name_list name="AccessList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
-			<button label="追加..." label_selected="追加..." name="add_allowed"/>
-			<button label="削除" label_selected="削除" name="remove_allowed"/>
-			<text label="禁止" name="BanCheck">
-				禁止された住人
-			</text>
-			<name_list name="BannedList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
-			<button label="追加..." label_selected="追加..." name="add_banned"/>
-			<button label="削除" label_selected="削除" name="remove_banned"/>
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterland" title="土地情報">
+	<floater.string name="Minutes">
+		[MINUTES] 分
+	</floater.string>
+	<floater.string name="Minute">
+		分
+	</floater.string>
+	<floater.string name="Seconds">
+		[SECONDS] 秒
+	</floater.string>
+	<tab_container name="landtab">
+		<panel label="一般" name="land_general_panel">
+			<panel.string name="new users only">
+				新規ユーザーのみ
+			</panel.string>
+			<panel.string name="anyone">
+				誰でも
+			</panel.string>
+			<panel.string name="area_text">
+				面積:
+			</panel.string>
+			<panel.string name="area_size_text">
+				[AREA]平方メートル
+			</panel.string>
+			<panel.string name="auction_id_text">
+				オークションID: [ID]
+			</panel.string>
+			<panel.string name="need_tier_to_modify">
+				この土地を修正変更するには、購入を承認する必要があります。
+			</panel.string>
+			<panel.string name="group_owned_text">
+				(グループ所有)
+			</panel.string>
+			<panel.string name="profile_text">
+				プロフィール...
+			</panel.string>
+			<panel.string name="info_text">
+				情報...
+			</panel.string>
+			<panel.string name="public_text">
+				(公共)
+			</panel.string>
+			<panel.string name="none_text">
+				(なし)
+			</panel.string>
+			<panel.string name="sale_pending_text">
+				(購入審査中)
+			</panel.string>
+			<panel.string name="no_selection_text">
+				区画が選定されていません。
+「世界」メニュー>「土地情報」に進むか、別の区画を選択して、詳細を表示します。
+			</panel.string>
+			<text name="Name:">
+				名前:
+			</text>
+			<line_editor name="Name"/>
+			<text name="Description:">
+				説明:
+			</text>
+			<text name="LandType">
+				種類:
+			</text>
+			<text name="LandTypeText">
+				メインランド/ホームステッド
+			</text>
+			<text name="ContentRating">
+				区分:
+			</text>
+			<text name="ContentRatingText">
+				Adult
+			</text>
+			<text name="Owner:">
+				オーナー:
+			</text>
+			<text name="OwnerText">
+				Leyla Linden
+			</text>
+			<button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/>
+			<text name="Group:">
+				グループ:
+			</text>
+			<button label="設定..." label_selected="設定..." name="Set..."/>
+			<check_box label="グループへの譲渡を許可" name="check deed" tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。"/>
+			<button label="譲渡..." label_selected="譲渡..." name="Deed..." tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。"/>
+			<check_box label="オーナーが譲渡と共に寄付" name="check contrib" tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。"/>
+			<text name="For Sale:">
+				販売の有無:
+			</text>
+			<text name="Not for sale.">
+				販売対象外
+			</text>
+			<text name="For Sale: Price L$[PRICE].">
+				価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル)
+			</text>
+			<button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
+			<text name="For sale to">
+				販売先:[BUYER]
+			</text>
+			<text name="Sell with landowners objects in parcel.">
+				オブジェクトも販売価格に含まれます
+			</text>
+			<text name="Selling with no objects in parcel.">
+				オブジェクトは販売対象外です
+			</text>
+			<button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/>
+			<text name="Claimed:">
+				取得日時:
+			</text>
+			<text name="DateClaimText">
+				2006年8月15日火曜日13:47:25
+			</text>
+			<text name="PriceLabel">
+				面積:
+			</text>
+			<text name="PriceText">
+				4048平方メートル
+			</text>
+			<text name="Traffic:">
+				交通量:
+			</text>
+			<text name="DwellText">
+				誤
+			</text>
+			<button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/>
+			<button label="グループ用に購入..." label_selected="グループ用に購入..." name="Buy For Group..."/>
+			<button label="入場許可を購入..." label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="125"/>
+			<button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/>
+			<button label="土地の返還を要求..." label_selected="土地の返還を要求..." name="Reclaim Land..."/>
+			<button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/>
+		</panel>
+		<panel label="約款" name="land_covenant_panel">
+			<panel.string name="can_resell">
+				この地域で購入した土地は、再販できます。
+			</panel.string>
+			<panel.string name="can_not_resell">
+				この地域で購入した土地は、再販できないことがあります。
+			</panel.string>
+			<panel.string name="can_change">
+				この地域で購入した土地は、統合または再分割できます。
+			</panel.string>
+			<panel.string name="can_not_change">
+				この地域で購入した土地は、統合/再分割できないことが
+あります。
+			</panel.string>
+			<text font="SansSerifLarge" name="estate_section_lbl">
+				不動産:
+			</text>
+			<text name="estate_name_lbl">
+				名前:
+			</text>
+			<text name="estate_name_text">
+				メインランド
+			</text>
+			<text name="estate_owner_lbl">
+				オーナー:
+			</text>
+			<text name="estate_owner_text">
+				(なし)
+			</text>
+			<text_editor name="covenant_editor">
+				この不動産には約款がありません。
+			</text_editor>
+			<text name="covenant_timestamp_text">
+				最後の更新1969年12月31日水曜日16:00:00
+			</text>
+			<text font="SansSerifLarge" name="region_section_lbl">
+				地域:
+			</text>
+			<text name="region_name_lbl">
+				名前:
+			</text>
+			<text name="region_name_text">
+				Leyla
+			</text>
+			<text name="region_landtype_lbl">
+				種類:
+			</text>
+			<text name="region_landtype_text">
+				メインランド/ホームステッド
+			</text>
+			<text name="region_maturity_lbl">
+				区分:
+			</text>
+			<text name="region_maturity_text">
+				Adult
+			</text>
+			<text name="resellable_lbl">
+				再販:
+			</text>
+			<text name="resellable_clause">
+				この地域(リージョン)にある土地は再販できません。
+			</text>
+			<text name="changeable_lbl">
+				再分割:
+			</text>
+			<text name="changeable_clause">
+				この地域(リージョン)にある土地は統合または分割ができ
+ません。
+			</text>
+		</panel>
+		<panel label="オブジェクト" name="land_objects_panel">
+			<panel.string left="200" name="objects_available_text">
+				[MAX]の内[COUNT]([AVAILABLE]利用可能)
+			</panel.string>
+			<panel.string left="200" name="objects_deleted_text">
+				[MAX]の内[COUNT]([DELETED]を削除)
+			</panel.string>
+			<text name="parcel_object_bonus">
+				地域オブジェクトボーナス要因: [BONUS]
+			</text>
+			<text name="Simulator primitive usage:" width="500">
+				地域全体のプリム使用状況:
+			</text>
+			<text left="200" name="objects_available">
+				[MAX]の内[COUNT]([AVAILABLE]利用可能)
+			</text>
+			<text name="Primitives parcel supports:" width="200">
+				区画でサポートされるプリム数:
+			</text>
+			<text left="200" name="object_contrib_text">
+				[COUNT]
+			</text>
+			<text name="Primitives on parcel:">
+				区画上のプリム数:
+			</text>
+			<text left="200" name="total_objects_text">
+				[COUNT]
+			</text>
+			<text name="Owned by parcel owner:" width="300">
+				区画オーナーによる所有:
+			</text>
+			<text left="200" name="owner_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Set to group:">
+				グループに設定:
+			</text>
+			<text left="200" name="group_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Owned by others:">
+				他人による所有:
+			</text>
+			<text left="200" name="other_objects_text">
+				[COUNT]
+			</text>
+			<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text name="Selected / sat upon:">
+				選択済み/決定済み:
+			</text>
+			<text left="200" name="selected_objects_text">
+				[COUNT]
+			</text>
+			<text name="Autoreturn" width="500">
+				他の住人のオブジェクトの自動返却(分、0で自動返却なし)
+			</text>
+			<line_editor left_delta="5" name="clean other time" right="-80"/>
+			<text name="Object Owners:" width="150">
+				オブジェクトのオーナー:
+			</text>
+			<button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/>
+			<button label="オブジェクトの返却..." label_selected="オブジェクトの返却..." left="256" name="Return objects..."/>
+			<name_list label="カウント" name="owner list">
+				<name_list.columns label="タイプ" name="type"/>
+				<name_list.columns name="online_status"/>
+				<name_list.columns label="名前" name="name"/>
+				<name_list.columns label="カウント" name="count"/>
+				<name_list.columns label="最新" name="mostrecent"/>
+			</name_list>
+		</panel>
+		<panel label="オプション" name="land_options_panel">
+			<panel.string name="search_enabled_tooltip">
+				この区画を検索結果に表示する
+			</panel.string>
+			<panel.string name="search_disabled_small_tooltip">
+				区画面積が128平方メートルかそれ以下のため、このオプションは無効です。
+大きな区画のみ検索に表示させることが可能です。
+			</panel.string>
+			<panel.string name="search_disabled_permissions_tooltip">
+				あなたはこの区画の設定編集ができないため、このオプションは無効です。
+			</panel.string>
+			<panel.string name="mature_check_mature">
+				Matureコンテンツ
+			</panel.string>
+			<panel.string name="mature_check_adult">
+				Adultコンテンツ
+			</panel.string>
+			<panel.string name="mature_check_mature_tooltip">
+				あなたの区画情報及びコンテンツはMatureとされています。
+			</panel.string>
+			<panel.string name="mature_check_adult_tooltip">
+				あなたの区画情報及びコンテンツはAdultとされています。
+			</panel.string>
+			<panel.string name="landing_point_none">
+				(なし)
+			</panel.string>
+			<panel.string name="push_restrict_text">
+				プッシングを制限
+			</panel.string>
+			<panel.string name="push_restrict_region_text">
+				プッシングを制限 (地域優先)
+			</panel.string>
+			<text name="allow_label">
+				他の住人に以下を許可:
+			</text>
+			<check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/>
+			<check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/>
+			<text left="138" name="allow_label2" width="144">
+				オブジェクトの作成:
+			</text>
+			<check_box label="すべての住人" left="280" name="edit objects check"/>
+			<check_box label="グループ" left="380" name="edit group objects check"/>
+			<text left="138" name="allow_label3" width="144">
+				オブジェクトの進入:
+			</text>
+			<check_box label="すべての住人" left="280" name="all object entry check"/>
+			<check_box label="グループ" left="380" name="group object entry check"/>
+			<text left="138" name="allow_label4" width="144">
+				スクリプトの実行:
+			</text>
+			<check_box label="すべての住人" left="280" name="check other scripts"/>
+			<check_box label="グループ" left="380" name="check group scripts"/>
+			<text name="land_options_label">
+				土地オプション:
+			</text>
+			<check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/>
+			<check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/>
+			<check_box label="検索に表示>(週L$30)以下の場所" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/>
+			<combo_box name="land category with adult">
+				<combo_box.item label="全カテゴリ" name="item0"/>
+				<combo_box.item label="Linden所在地" name="item1"/>
+				<combo_box.item label="Adult" name="item2"/>
+				<combo_box.item label="アートとカルチャー" name="item3"/>
+				<combo_box.item label="ビジネス" name="item4"/>
+				<combo_box.item label="教育的" name="item5"/>
+				<combo_box.item label="ゲーム" name="item6"/>
+				<combo_box.item label="たまり場" name="item7"/>
+				<combo_box.item label="新住人に好意的" name="item8"/>
+				<combo_box.item label="公園と自然" name="item9"/>
+				<combo_box.item label="住宅用" name="item10"/>
+				<combo_box.item label="ショッピング" name="item11"/>
+				<combo_box.item label="その他" name="item12"/>
+			</combo_box>
+			<combo_box name="land category">
+				<combo_box.item label="全カテゴリー" name="item0"/>
+				<combo_box.item label="Linden所在地" name="item1"/>
+				<combo_box.item label="アート&amp;カルチャー" name="item3"/>
+				<combo_box.item label="ビジネス" name="item4"/>
+				<combo_box.item label="教育的" name="item5"/>
+				<combo_box.item label="ゲーム" name="item6"/>
+				<combo_box.item label="たまり場" name="item7"/>
+				<combo_box.item label="新住人に好意的" name="item8"/>
+				<combo_box.item label="公園と自然" name="item9"/>
+				<combo_box.item label="住宅用" name="item10"/>
+				<combo_box.item label="ショッピング" name="item11"/>
+				<combo_box.item label="その他" name="item12"/>
+			</combo_box>
+			<check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
+			<text name="Snapshot:">
+				スナップショット:
+			</text>
+			<texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
+			<text name="landing_point">
+				着地点: [LANDING]
+			</text>
+			<button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/>
+			<button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/>
+			<text name="Teleport Routing: ">
+				テレポート制限:
+			</text>
+			<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
+				<combo_box.item label="不可" name="Blocked"/>
+				<combo_box.item label="着地点" name="LandingPoint"/>
+				<combo_box.item label="どこでも" name="Anywhere"/>
+			</combo_box>
+		</panel>
+		<panel label="メディア" name="land_media_panel">
+			<text name="with media:">
+				種類:
+			</text>
+			<combo_box name="media type" tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します"/>
+			<text name="at URL:">
+				ホーム URL:
+			</text>
+			<button label="設定..." label_selected="設定..." name="set_media_url"/>
+			<text name="CurrentURL:">
+				現在の URL:
+			</text>
+			<button label="リセット..." label_selected="リセット..." name="reset_media_url"/>
+			<check_box label="URL を非表示" name="hide_media_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーにはメディア URL が表示されません。 これは HTML タイプには使用できませんのでご注意ください。"/>
+			<text name="Description:">
+				説明:
+			</text>
+			<line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/>
+			<text name="Media texture:">
+				テクスチ
+ャ取替:
+			</text>
+			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/>
+			<text name="replace_texture_help" width="290">
+				このテクスチャを使用するオブジェクトのプレイをクリックすると、ムービーや Web ページを表示します。
+
+テクスチャを変更するにはサムネイルを選択してください。
+			</text>
+			<check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。"/>
+			<text name="media_size" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。">
+				サイズ:
+			</text>
+			<spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
+			<spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
+			<text name="pixels">
+				ピクセル
+			</text>
+			<text name="Options:">
+				オプション:
+			</text>
+			<check_box label="ループ" name="media_loop" tool_tip="メディアをループ再生します。  メディアの再生が終わったら、最初から再生し直します。"/>
+		</panel>
+		<panel label="オーディオ" name="land_audio_panel">
+			<text name="MusicURL:">
+				音楽 URL:
+			</text>
+			<text name="Sound:">
+				サウンド:
+			</text>
+			<check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定" name="check sound local"/>
+			<text name="Voice settings:">
+				ボイス:
+			</text>
+			<check_box label="ボイスを有効にする" name="parcel_enable_voice_channel"/>
+			<check_box label="ボイスを有効にする(不動産設定)" name="parcel_enable_voice_channel_is_estate_disabled"/>
+			<check_box label="この区画でのボイス使用を制限する" name="parcel_enable_voice_channel_parcel"/>
+		</panel>
+		<panel label="アクセス" name="land_access_panel">
+			<panel.string name="estate_override">
+				1つ以上のオプションが、不動産レベルで設定されています。
+			</panel.string>
+			<text name="Limit access to this parcel to:">
+				この区画にアクセス
+			</text>
+			<check_box label="パブリック・アクセスを許可" name="public_access"/>
+			<text name="Only Allow">
+				次の住人のアクセスをブロック:
+			</text>
+			<check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="支払い情報未確認の住人を排除する"/>
+			<check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を禁止します。 詳しい情報は [SUPPORT_SITE] をご覧下さい。"/>
+			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
+			<check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
+			<combo_box name="pass_combo">
+				<combo_box.item label="誰でも" name="Anyone"/>
+				<combo_box.item label="グループ" name="Group"/>
+			</combo_box>
+			<spinner label="価格(L$):" name="PriceSpin"/>
+			<spinner label="アクセス時間:" name="HoursSpin"/>
+			<text label="常に許可" name="AllowedText">
+				許可された住人
+			</text>
+			<name_list name="AccessList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
+			<button label="追加..." label_selected="追加..." name="add_allowed"/>
+			<button label="削除" label_selected="削除" name="remove_allowed"/>
+			<text label="禁止" name="BanCheck">
+				禁止された住人
+			</text>
+			<name_list name="BannedList" tool_tip="([LISTED]リスト入り、[MAX]最大)"/>
+			<button label="追加..." label_selected="追加..." name="add_banned"/>
+			<button label="削除" label_selected="削除" name="remove_banned"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
index b61007d86e61de81fb4a275a7357d63debae4543..1bc12b839cea273f9e2d18eef0ac61318b1c60a5 100644
--- a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml
@@ -1,101 +1,183 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Animation Preview" title="">
-	<text name="name_label">
-		名前:
-	</text>
-	<text name="description_label">
-		説明:
-	</text>
-	<spinner label="優先順位" name="priority"
-	     tool_tip="このアニメーションで上書き可能な他のアニメーションを制御します。" />
-	<text name="preview_label">
-		同時進行行動
-	</text>
-	<combo_box label="" name="preview_base_anim"
-	     tool_tip="アバターが普通の行動をするときのアニメーションの動きをテストするためにこれを使います。">
-		<combo_box.item name="Standing" label="立つ" />
-		<combo_box.item name="Walking" label="歩く" />
-		<combo_box.item name="Sitting" label="座る" />
-		<combo_box.item name="Flying" label="飛行" />
-	</combo_box>
-	<pad height="7" />
-	<check_box label="ループ" name="loop_check"
-	     tool_tip="このアニメーションをループ再生します。" />
-	<spinner label="イン(%)" name="loop_in_point"
-	     tool_tip="アニメーションのループ復帰点を設定します。" label_width="45" left="70" width="100" />
-	<spinner label="アウト(%)" name="loop_out_point"
-	     tool_tip="アニメーションのループ終了点を設定します。" label_width="60" left="170" width="100" />
-	<text name="hand_label">
-		手の動き
-	</text>
-	<combo_box label="" name="hand_pose_combo"
-	     tool_tip="アニメーションの手の動きをコントロールします。">
-		<combo_box.item name="Spread" label="広がる" />
-		<combo_box.item name="Relaxed" label="リラックス" />
-		<combo_box.item name="PointBoth" label="両方を指す" />
-		<combo_box.item name="Fist" label="拳" />
-		<combo_box.item name="RelaxedLeft" label="リラックス左" />
-		<combo_box.item name="PointLeft" label="左を指す" />
-		<combo_box.item name="FistLeft" label="拳左" />
-		<combo_box.item name="RelaxedRight" label="リラックス右" />
-		<combo_box.item name="PointRight" label="右を指す" />
-		<combo_box.item name="FistRight" label="拳右" />
-		<combo_box.item name="SaluteRight" label="敬礼右" />
-		<combo_box.item name="Typing" label="入力する" />
-		<combo_box.item name="PeaceRight" label="ピース・サイン右" />
-	</combo_box>
-	<text name="emote_label">
-		表現
-	</text>
-	<combo_box label="" name="emote_combo"
-	     tool_tip="アニメーションの顔を表情をコントロールします。">
-		<combo_box.item name="[None]" label="None]" />
-		<combo_box.item name="Aaaaah" label="アーーーーー" />
-		<combo_box.item name="Afraid" label="怖れ" />
-		<combo_box.item name="Angry" label="怒り" />
-		<combo_box.item name="BigSmile" label="満面の笑み" />
-		<combo_box.item name="Bored" label="退屈" />
-		<combo_box.item name="Cry" label="泣く" />
-		<combo_box.item name="Disdain" label="侮蔑" />
-		<combo_box.item name="Embarrassed" label="困惑" />
-		<combo_box.item name="Frown" label="しかめっ面" />
-		<combo_box.item name="Kiss" label="キス" />
-		<combo_box.item name="Laugh" label="笑う" />
-		<combo_box.item name="Plllppt" label="Plllppt" />
-		<combo_box.item name="Repulsed" label="嫌悪感" />
-		<combo_box.item name="Sad" label="悲しい" />
-		<combo_box.item name="Shrug" label="肩をすくめる" />
-		<combo_box.item name="Smile" label="笑み" />
-		<combo_box.item name="Surprise" label="驚き" />
-		<combo_box.item name="Wink" label="ウィンク" />
-		<combo_box.item name="Worry" label="心配" />
-	</combo_box>
-	<spinner label="フェーズイン(秒)" name="ease_in_time"
-	     tool_tip="アニメーションのブレンド・イン時間(秒)" />
-	<spinner label="フェーズアウト(秒)" name="ease_out_time"
-	     tool_tip="アニメーションのブレンド・アウト時間(秒)" />
-	<button label="" name="play_btn"
-	     tool_tip="アニメーションの再生/一時停止" />
-	<button label="" name="stop_btn" tool_tip="アニメーションの再生を停止" />
-	<slider label="" name="playback_slider" />
-	<text name="bad_animation_text">
-		アニメーション・ファイルを読み込めません。
- 
- Poser 4からエクスポートされたBVHファイルを推奨します。
-	</text>
-	<button label="取り消し" name="cancel_btn" />
-	<button label="アップロードL$[AMOUNT]" name="ok_btn" />
-	<text name="failed_to_initialize">
-		モーションを初期化できませんでした
-	</text>
-	<text name="anim_too_long">
-		アニメーションファイルの長さは[LENGTH]秒です。
-
-アニメーションの最大の長さは[MAX_LENGTH]秒です。
-	</text>
-	<text name="failed_file_read">
-		アニメーションファイルを読み取れません。
-
-[STATUS]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Animation Preview" title="">
+	<floater.string name="failed_to_initialize">
+		モーションを初期化できませんでした
+	</floater.string>
+	<floater.string name="anim_too_long">
+		アニメーションファイルの長さは[LENGTH]秒です。
+
+アニメーションの最大の長さは[MAX_LENGTH]秒です。
+	</floater.string>
+	<floater.string name="failed_file_read">
+		アニメーションファイルを読み取れません。
+
+[STATUS]
+	</floater.string>
+	<floater.string name="E_ST_OK">
+		Ok
+	</floater.string>
+	<floater.string name="E_ST_EOF">
+		不完全なファイル。
+	</floater.string>
+	<floater.string name="E_ST_NO_CONSTRAINT">
+		制約定義を読みとれません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FILE">
+		BVH ファイルを開けません。
+	</floater.string>
+	<floater.string name="E_ST_NO_HIER">
+		無効な HIERARCHY ヘッダーです。.
+	</floater.string>
+	<floater.string name="E_ST_NO_JOINT">
+		ROOT または JOINT が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_NAME">
+		JOINT ネームを取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_OFFSET">
+		OFFSET が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_CHANNELS">
+		CHANNELS が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_ROTATION">
+		回転順序を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_AXIS">
+		回転軸を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_MOTION">
+		MOTION が見つかりません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAMES">
+		フレーム数を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_FRAME_TIME">
+		フレームタイムを取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_POS">
+		ポジション値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_ROT">
+		回転値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_FILE">
+		Cannot open translation file.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HEADER">
+		Cannot read translation header.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_NAME">
+		Cannot read translation names.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_IGNORE">
+		Cannot read translation ignore value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_RELATIVE">
+		Cannot read translation relative value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_OUTNAME">
+		Cannot read translation outname value.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MATRIX">
+		Cannot read translation matrix.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGECHILD">
+		Mergechild 名を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_MERGEPARENT">
+		Mergeparent 名を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_PRIORITY">
+		プロパティ値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_LOOP">
+		ループ値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEIN">
+		Cannot get easeIn values.
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EASEOUT">
+		easeOut 値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_HAND">
+		Hand morph 値を取得できません。
+	</floater.string>
+	<floater.string name="E_ST_NO_XLT_EMOTE">
+		エモート名を読みとれません。
+	</floater.string>
+	<text name="name_label">
+		名前:
+	</text>
+	<text name="description_label">
+		説明:
+	</text>
+	<spinner label="優先順位" name="priority" tool_tip="このアニメーションで上書き可能な他のアニメーションを制御します。"/>
+	<check_box label="ループ" name="loop_check" tool_tip="このアニメーションをループ再生します。"/>
+	<spinner label="イン(%)" label_width="45" left="70" name="loop_in_point" tool_tip="アニメーションのループ復帰点を設定します。" width="100"/>
+	<spinner label="アウト(%)" label_width="60" left="170" name="loop_out_point" tool_tip="アニメーションのループ終了点を設定します。" width="100"/>
+	<text name="hand_label">
+		手の動き
+	</text>
+	<combo_box label="" name="hand_pose_combo" tool_tip="アニメーションの手の動きをコントロールします。">
+		<combo_box.item label="広がる" name="Spread"/>
+		<combo_box.item label="リラックス" name="Relaxed"/>
+		<combo_box.item label="両方を指す" name="PointBoth"/>
+		<combo_box.item label="拳" name="Fist"/>
+		<combo_box.item label="リラックス左" name="RelaxedLeft"/>
+		<combo_box.item label="左を指す" name="PointLeft"/>
+		<combo_box.item label="拳左" name="FistLeft"/>
+		<combo_box.item label="リラックス右" name="RelaxedRight"/>
+		<combo_box.item label="右を指す" name="PointRight"/>
+		<combo_box.item label="拳右" name="FistRight"/>
+		<combo_box.item label="敬礼右" name="SaluteRight"/>
+		<combo_box.item label="入力する" name="Typing"/>
+		<combo_box.item label="ピース・サイン右" name="PeaceRight"/>
+	</combo_box>
+	<text name="emote_label">
+		表現
+	</text>
+	<combo_box label="" name="emote_combo" tool_tip="アニメーションの顔を表情をコントロールします。">
+		<combo_box.item label="None]" name="[None]"/>
+		<combo_box.item label="アーーーーー" name="Aaaaah"/>
+		<combo_box.item label="怖れ" name="Afraid"/>
+		<combo_box.item label="怒り" name="Angry"/>
+		<combo_box.item label="満面の笑み" name="BigSmile"/>
+		<combo_box.item label="退屈" name="Bored"/>
+		<combo_box.item label="泣く" name="Cry"/>
+		<combo_box.item label="侮蔑" name="Disdain"/>
+		<combo_box.item label="困惑" name="Embarrassed"/>
+		<combo_box.item label="しかめっ面" name="Frown"/>
+		<combo_box.item label="キス" name="Kiss"/>
+		<combo_box.item label="笑う" name="Laugh"/>
+		<combo_box.item label="Plllppt" name="Plllppt"/>
+		<combo_box.item label="嫌悪感" name="Repulsed"/>
+		<combo_box.item label="悲しい" name="Sad"/>
+		<combo_box.item label="肩をすくめる" name="Shrug"/>
+		<combo_box.item label="笑み" name="Smile"/>
+		<combo_box.item label="驚き" name="Surprise"/>
+		<combo_box.item label="ウィンク" name="Wink"/>
+		<combo_box.item label="心配" name="Worry"/>
+	</combo_box>
+	<text name="preview_label">
+		同時進行行動
+	</text>
+	<combo_box label="" name="preview_base_anim" tool_tip="アバターが普通の行動をするときのアニメーションの動きをテストするためにこれを使います。">
+		<combo_box.item label="立つ" name="Standing"/>
+		<combo_box.item label="歩く" name="Walking"/>
+		<combo_box.item label="座る" name="Sitting"/>
+		<combo_box.item label="飛行" name="Flying"/>
+	</combo_box>
+	<spinner label="フェーズイン(秒)" name="ease_in_time" tool_tip="アニメーションのブレンド・イン時間(秒)"/>
+	<spinner label="フェーズアウト(秒)" name="ease_out_time" tool_tip="アニメーションのブレンド・アウト時間(秒)"/>
+	<button label="" name="play_btn" tool_tip="アニメーションの再生/一時停止"/>
+	<button label="" name="stop_btn" tool_tip="アニメーションの再生を停止"/>
+	<slider label="" name="playback_slider"/>
+	<text name="bad_animation_text">
+		アニメーション・ファイルを読み込めません。
+ 
+ Poser 4からエクスポートされたBVHファイルを推奨します。
+	</text>
+	<button label="取り消し" name="cancel_btn"/>
+	<button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
index ea076846529674cd4ec62288c84795bb6b1ca794..eebc7eb88e6a4218b26f0cb88e7e17a1e1f9c3f8 100644
--- a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="住人を選択" min_width="275" width="275">
-	<tab_container name="ResidentChooserTabs" width="265">
-		<panel label="検索" name="SearchPanel" width="145">
-			<text name="InstructSearchResidentName">
-				住人の名前の一部を入力:
-			</text>
-			<button label="検索" label_selected="検索" name="Find"/>
-		</panel>
-		<panel label="コーリングカード" name="CallingCardsPanel" width="145">
-			<text name="InstructSelectCallingCard">
-				コーリングカードを選択:
-			</text>
-		</panel>
-		<panel label="自分の近く" name="NearMePanel" width="145">
-			<text name="InstructSelectResident">
-				近くの住人を選択:
-			</text>
-			<button label="リスト更新" label_selected="リスト更新" name="Refresh"/>
-			<slider label="範囲" name="near_me_range"/>
-			<text name="meters" width="50">
-				メートル
-			</text>
-		</panel>
-	</tab_container>
-	<button label="選択" label_selected="選択" name="Select"/>
-	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
-	<string name="not_found">
-		「[TEXT]」は見つかりませんでした
-	</string>
-	<string name="no_one_near">
-		近くに誰もいません
-	</string>
-	<string name="no_results">
-		検索結果:ゼロ
-	</string>
-	<string name="searching">
-		検索中...
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater min_width="275" name="avatarpicker" title="住人を選択" width="275">
+	<tab_container name="ResidentChooserTabs" width="265">
+		<panel label="検索" name="SearchPanel" width="145">
+			<text name="InstructSearchResidentName">
+				名前の一部を入力:
+			</text>
+			<button label="検索" label_selected="検索" name="Find"/>
+		</panel>
+		<panel label="コーリングカード" name="CallingCardsPanel" width="145">
+			<text name="InstructSelectCallingCard">
+				コーリングカードを選択:
+			</text>
+		</panel>
+		<panel label="自分の近く" name="NearMePanel" width="145">
+			<text name="InstructSelectResident">
+				近くの人を選択:
+			</text>
+			<button label="リスト更新" label_selected="リスト更新" name="Refresh"/>
+			<slider label="範囲" name="near_me_range"/>
+			<text name="meters" width="50">
+				メートル
+			</text>
+		</panel>
+	</tab_container>
+	<button label="OK" label_selected="OK" name="Select"/>
+	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
+	<string name="not_found">
+		「[TEXT]」は見つかりませんでした
+	</string>
+	<string name="no_one_near">
+		近くに誰もいません
+	</string>
+	<string name="no_results">
+		検索結果:ゼロ
+	</string>
+	<string name="searching">
+		検索中...
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml
index 2065656732fe615e8b4656a1c6c5df09d30e4c7b..4e89e11d0d2c3158179414e7f34e789f59455ddd 100644
--- a/indra/newview/skins/default/xui/ja/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/ja/floater_beacons.xml
@@ -1,15 +1,21 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="ビーコン(標識)">
-	<panel name="beacons_panel">
-		<check_box label="タッチオンリーのスクリプトを含むオブジェクト" name="touch_only"/>
-		<check_box label="スクリプト・オブジェクト" name="scripted"/>
-		<check_box label="物理的オブジェクト" name="physical"/>
-		<check_box label="音源" name="sounds"/>
-		<check_box label="パーティクル源" name="particles"/>
-		<check_box label="ハイライトのレンダリング" name="highlights"/>
-		<check_box label="ビーコン(標識)のレンダリング" name="beacons"/>
-		<text name="beacon_width_label">
-			ビーコン(標識)の幅
-		</text>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="beacons" title="ビーコン(標識)">
+	<panel name="beacons_panel">
+		<text name="label_show">
+			表示:
+		</text>
+		<check_box label="ビーコン(標識)" name="beacons"/>
+		<check_box label="ハイライト" name="highlights"/>
+		<text name="beacon_width_label" tool_tip="ビーコン(標識)の幅">
+			幅:
+		</text>
+		<text name="label_objects">
+			対象オブジェクト:
+		</text>
+		<check_box label="物理的" name="physical"/>
+		<check_box label="スクリプト" name="scripted"/>
+		<check_box label="触れる" name="touch_only"/>
+		<check_box label="音源" name="sounds"/>
+		<check_box label="パーティクル源" name="particles"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml
index 49348aaa1059cef7d5704f72884695a88229bcb9..8b5e88fa7f499c981fe9268a894046621e3ff299 100644
--- a/indra/newview/skins/default/xui/ja/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml
@@ -1,8 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="グリッドのオプション">
-	<spinner label="グリッド単位(メートル)" name="GridResolution" />
-	<spinner label="グリッド範囲(メートル)" name="GridDrawSize" />
-	<check_box label="サブユニット・スナッピングを有効化" name="GridSubUnit" />
-	<check_box label="断面を表示" name="GridCrossSection" />
-	<slider label="グリッドの不透明度" name="GridOpacity" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="build options floater" title="グリッドのオプション">
+	<spinner label="グリッドユニット(メートル)" name="GridResolution"/>
+	<spinner label="グリッド範囲(メートル)" name="GridDrawSize"/>
+	<check_box label="サブユニットにスナップ" name="GridSubUnit"/>
+	<check_box label="横断面を表示" name="GridCrossSection"/>
+	<text name="grid_opacity_label" tool_tip="グリッドの透明度">
+		透明度:
+	</text>
+	<slider label="グリッドの不透明度" name="GridOpacity"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
index 6ee90038fb7aa624e90ea7f10ad00a3a4b450b5c..b86a3647fe3609148efd2af73ee1a25f3abb4af6 100644
--- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
@@ -1,44 +1,53 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="コンテンツ権限の一括変更">
-	<text name="applyto">
-		コンテンツの種類
-	</text>
-	<check_box label="アニメーション" name="check_animation"/>
-	<check_box label="身体部位" name="check_bodypart"/>
-	<check_box label="服" name="check_clothing"/>
-	<check_box label="ジェスチャー" name="check_gesture"/>
-	<check_box label="ランドマーク" name="check_landmark"/>
-	<check_box label="ノートカード" name="check_notecard"/>
-	<check_box label="オブジェクト" name="check_object"/>
-	<check_box label="スクリプト" name="check_script"/>
-	<check_box label="サウンド" name="check_sound"/>
-	<check_box label="テクスチャー" name="check_texture"/>
-	<button label="全て選択" label_selected="全て" name="check_all"/>
-	<button label="全て解除" label_selected="なし" name="check_none"/>
-	<text name="newperms">
-		新しい権限
-	</text>
-	<check_box label="グループで共同管理" name="share_with_group"/>
-	<check_box label="誰に対してもコピーを許可" name="everyone_copy"/>
-	<text name="NextOwnerLabel">
-		次のオーナーができる操作:
-	</text>
-	<check_box label="修正" name="next_owner_modify"/>
-	<check_box label="コピー" name="next_owner_copy"/>
-	<check_box label="再販/プレゼント" name="next_owner_transfer"/>
-	<button label="ヘルプ" name="help"/>
-	<button label="適用" name="apply"/>
-	<button label="閉じる" name="close"/>
-	<string name="nothing_to_modify_text">
-		選択した中に編集できないコンテンツが含まれています
-	</string>
-	<string name="status_text">
-		[NAME]に権限を設定中です。
-	</string>
-	<string name="start_text">
-		権限変更リクエストをしています
-	</string>
-	<string name="done_text">
-		権限変更リクエストが完了しました
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floaterbulkperms" title="コンテンツ権限を編集">
+	<floater.string name="nothing_to_modify_text">
+		選択した中に編集できないコンテンツが含まれています
+	</floater.string>
+	<floater.string name="status_text">
+		[NAME]に権限を設定中です。
+	</floater.string>
+	<floater.string name="start_text">
+		権限変更リクエストをしています
+	</floater.string>
+	<floater.string name="done_text">
+		権限変更リクエストが完了しました
+	</floater.string>
+	<check_box label="アニメーション" name="check_animation"/>
+	<icon name="icon_animation" tool_tip="アニメーション"/>
+	<check_box label="身体部位" name="check_bodypart"/>
+	<icon name="icon_bodypart" tool_tip="身体部位"/>
+	<check_box label="服" name="check_clothing"/>
+	<icon name="icon_clothing" tool_tip="衣類"/>
+	<check_box label="ジェスチャー" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="ジェスチャー"/>
+	<check_box label="ノートカード" name="check_notecard"/>
+	<icon name="icon_notecard" tool_tip="ノートカード"/>
+	<check_box label="オブジェクト" name="check_object"/>
+	<icon name="icon_object" tool_tip="オブジェクト"/>
+	<check_box label="スクリプト" name="check_script"/>
+	<icon name="icon_script" tool_tip="スクリプト"/>
+	<check_box label="サウンド" name="check_sound"/>
+	<icon name="icon_sound" tool_tip="サウンド"/>
+	<check_box label="テクスチャー" name="check_texture"/>
+	<button label="√ すべて" label_selected="全て" name="check_all"/>
+	<button label="クリア" label_selected="なし" name="check_none"/>
+	<text name="newperms">
+		新しいコンテンツ権限
+	</text>
+	<text name="GroupLabel">
+		グループ:
+	</text>
+	<check_box label="共有" name="share_with_group"/>
+	<text name="AnyoneLabel">
+		すべての人:
+	</text>
+	<check_box label="コピー" name="everyone_copy"/>
+	<text name="NextOwnerLabel">
+		次の所有者:
+	</text>
+	<check_box label="修正" name="next_owner_modify"/>
+	<check_box label="コピー" name="next_owner_copy"/>
+	<check_box initial_value="true" label="再販/プレゼント" name="next_owner_transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販することができます"/>
+	<button label="OK" name="apply"/>
+	<button label="キャンセル" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
index 1b5dd8b9794adac8b92e9c7ee4744476aae9eb07..fc0418f8088061bb5cf44394128a940a8e8ef67e 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="オブジェクトのコピーを購入">
-	<text name="contents_text">
-		およびそのコンテンツ:
-	</text>
-	<text name="buy_text">
-		[NAME]からL$[AMOUNT]で購入しますか?
-	</text>
-	<button label="取消" label_selected="取消" name="cancel_btn" />
-	<button label="購入" label_selected="購入" name="buy_btn" />
-	<text name="title_buy_text">
-		購入
-	</text>
-	<string name="title_buy_copy_text">
-		次のものを買う
-	</string>
-	<text name="no_copy_text">
-		(コピーなし)
-	</text>
-	<text name="no_modify_text">
-		(修正なし)
-	</text>
-	<text name="no_transfer_text">
-		(転送なし)
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="contents" title="オブジェクトのコピーを購入">
+	<text name="contents_text">
+		内容:
+	</text>
+	<text name="buy_text">
+		[NAME]からL$[AMOUNT]で購入しますか?
+	</text>
+	<button label="取消" label_selected="取消" name="cancel_btn"/>
+	<button label="購入" label_selected="購入" name="buy_btn"/>
+	<text name="title_buy_text">
+		購入
+	</text>
+	<string name="title_buy_copy_text">
+		次のものを買う
+	</string>
+	<text name="no_copy_text">
+		(コピーなし)
+	</text>
+	<text name="no_modify_text">
+		(修正なし)
+	</text>
+	<text name="no_transfer_text">
+		(転送なし)
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index bb87b194a474608a623c9e7d9a1ee3aeab4b6020..06e42a29d9b0224cbfeb2e731fdbf86216353a8e 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -1,16 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="camera_floater">
-	<floater.string name="rotate_tooltip">
-		フォーカスを中心にカメラを回転
-	</floater.string>
-	<floater.string name="zoom_tooltip">
-		フォーカスに向けてカメラをズーム
-	</floater.string>
-	<floater.string name="move_tooltip">
-		カメラを上下左右に移動
-	</floater.string>
-	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に移動"/>
-		<joystick_zoom name="zoom" tool_tip="フォーカスに向けてカメラをズーム"/>
-	</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		フォーカスを中心にカメラを回転
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		フォーカスに向けてカメラをズーム
+	</floater.string>
+	<floater.string name="move_tooltip">
+		カメラを上下左右に移動
+	</floater.string>
+	<panel name="controls">
+		<joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に移動"/>
+		<joystick_zoom name="zoom" tool_tip="向いてる方法にカメラをズーム"/>
+		<joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="orbit_btn" tool_tip="カメラを旋回"/>
+		<button label="" name="pan_btn" tool_tip="カメラを水平・垂直移動"/>
+		<button label="" name="avatarview_btn" tool_tip="アバター視点"/>
+		<button label="" name="freecamera_btn" tool_tip="オブジェクトを見る"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml
index 8047e49b756b7c3f9d5149d1609feae25f195c3e..cd871f721432a5833cbf203a1d581b06182eaf76 100644
--- a/indra/newview/skins/default/xui/ja/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/ja/floater_color_picker.xml
@@ -1,31 +1,31 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="カラー・ピッカー">
-	<text name="r_val_text">
-		赤:
-	</text>
-	<text name="g_val_text">
-		緑:
-	</text>
-	<text name="b_val_text">
-		青:
-	</text>
-	<text name="h_val_text">
-		色相:
-	</text>
-	<text name="s_val_text">
-		色調:
-	</text>
-	<text name="l_val_text">
-		輝度:
-	</text>
-	<check_box label="ただちに適用" name="apply_immediate" />
-	<button label="" label_selected="" name="color_pipette" />
-	<button label="取り消し" label_selected="取り消し" name="cancel_btn" />
-	<button label="選択" label_selected="選択" name="select_btn" />
-	<text name="Current color:">
-		現在の色:
-	</text>
-	<text name="(Drag below to save.)">
-		ドラッグして保存
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ColorPicker" title="カラー・ピッカー">
+	<text name="r_val_text">
+		赤:
+	</text>
+	<text name="g_val_text">
+		緑:
+	</text>
+	<text name="b_val_text">
+		青:
+	</text>
+	<text name="h_val_text">
+		色相:
+	</text>
+	<text name="s_val_text">
+		色調:
+	</text>
+	<text name="l_val_text">
+		輝度:
+	</text>
+	<check_box label="今すぐ適用" name="apply_immediate"/>
+	<button label="" label_selected="" name="color_pipette"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
+	<button label="OK" label_selected="選択" name="select_btn"/>
+	<text name="Current color:">
+		現在の色:
+	</text>
+	<text name="(Drag below to save.)">
+		ドラッグして保存
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
index 5c258df9fd07cd898edc3f63d852caf68a3bdef5..f189acf1011f1b1fb7650136bd26f9f5ff58e0c1 100644
--- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_device_settings" title="ボイスチャット機器の設定" />
\ No newline at end of file
+<floater name="floater_device_settings" title="ボイスチャット機器の設定" />
diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
index 8fe41a823a9506160b4e431442198e1a2cfdb0ac..e21b06988c3158fc5de9463bb87176ed1a698a8d 100644
--- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
@@ -1,144 +1,97 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="ゴッド・ツール">
-	<tab_container name="GodTools Tabs">
-		<panel label="グリッド" name="grid">
-			<button label="すべてのユーザーを追い出す"
-			     label_selected="すべてのユーザーを追い出す"
-			     name="Kick all users" />
-			<button label="この地域の地図の表示キャッシュを消去"
-			     label_selected="この地域の地図の表示キャッシュを消去"
-			     name="Flush This Region&apos;s Map Visibility Caches" />
-		</panel>
-		<panel label="地域" name="region">
-			<text name="Sim Name:">
-				シム名:
-			</text>
-			<check_box label="準備" name="check prelude"
-			     tool_tip="この設定により、この地域の準備をします。" />
-			<check_box label="太陽固定" name="check fixed sun"
-			     tool_tip="太陽位置を固定([地域/不動産]>[地形]の場合と同様)" />
-			<check_box label="テレポートのホームをリセット" name="check reset home"
-			     tool_tip="住人がテレポートで去ったとき、彼らのホームを目的地にリセットする。" />
-			<check_box label="可視" name="check visible"
-			     tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。" />
-			<check_box label="ダメージ" name="check damage"
-			     tool_tip="この設定により、この地域内でダメージを有効化します。" />
-			<check_box label="トラフィック・トラッキングをブロック"
-			     name="block dwell"
-			     tool_tip="この設定により、この地域内のトラフィック計算をオフにします。" />
-			<check_box label="土地整備をブロック" name="block terraform"
-			     tool_tip="この設定により、この地域内での土地整備を禁止" />
-			<check_box label="サンドボックス" name="is sandbox"
-			     tool_tip="これがサンドボックス地域でも切り替え" />
-			<button label="地形を構築する" label_selected="地形を構築する"
-			     name="Bake Terrain"
-			     tool_tip="現在の地形をデフォルトとして保存します。" />
-			<button label="地形を元に戻す" label_selected="地形を元に戻す"
-			     name="Revert Terrain"
-			     tool_tip="現在の地形をデフォルトに置換します。" />
-			<button label="地形を交換" label_selected="地形を交換" name="Swap Terrain"
-			     tool_tip="現在の地形をデフォルトと入れ替えます。" />
-			<text name="estate id">
-				不動産ID:
-			</text>
-			<text name="parent id">
-				親ID:
-			</text>
-			<line_editor name="parentestate" tool_tip="これは、この地域の親不動産です。" />
-			<text name="Grid Pos: ">
-				グリッド位置:
-			</text>
-			<line_editor name="gridposx"
-			     tool_tip="これは、この地域のグリッドxの位置です。" />
-			<line_editor name="gridposy"
-			     tool_tip="これは、この地域のグリッドyの位置です。" />
-			<text name="Redirect to Grid: ">
-				グリッドにリダイレクト:
-			</text>
-			<text name="billable factor text">
-				請求率:
-			</text>
-			<text name="land cost text">
-				平方メートル当たりL$:
-			</text>
-			<button label="æ›´æ–°" label_selected="æ›´æ–°" name="Refresh"
-			     tool_tip="上記の情報を更新するには、ここをクリックします。" />
-			<button label="適用" label_selected="適用" name="Apply"
-			     tool_tip="上記の変更を適用するには、ここをクリックします。" />
-			<button label="地域を選択" label_selected="地域を選択" name="Select Region"
-			     tool_tip="土地ツールで地域全体を選択してください。" />
-			<button label="ただちに自動保存する"
-			     label_selected="ただちに自動保存する" name="Autosave now"
-			     tool_tip="Gzip状態を自動保存ディレクトリに保存します。" />
-		</panel>
-		<panel label="オブジェクト" name="objects">
-			<text name="Sim Name:">
-				シム名:
-			</text>
-			<text name="region name">
-				ウェルシュ
-			</text>
-			<check_box label="スクリプトを無効化" name="disable scripts"
-			     tool_tip="この設定により、この地域内のスクリプトをすべて無効化" />
-			<check_box label="衝突を無効化" name="disable collisions"
-			     tool_tip="この設定により、この地域内の非エージェント衝突を無効化" />
-			<check_box label="物理作用を無効化" name="disable physics"
-			     tool_tip="この設定により、この地域内の物理的作用をすべて無効化" />
-			<button label="適用" label_selected="適用" name="Apply"
-			     tool_tip="上記の変更を適用するには、ここをクリックします。" />
-			<button label="対象の設定" label_selected="対象の設定" name="Set Target"
-			     tool_tip="オブジェクト削除の対象となるアバターを設定してください。" />
-			<text name="target_avatar_name">
-				(対象なし)
-			</text>
-			<button
-			     label="他の土地における対象のスクリプト・オブジェクトを削除"
-			     label_selected="他の土地における対象のスクリプト・オブジェクトを削除"
-			     name="Delete Target&apos;s Scripted Objects On Others Land"
-			     tool_tip="この地域において対象が所有していないスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button
-			     label="「すべての」土地における対象のスクリプト・オブジェクトを削除"
-			     label_selected="「すべての」土地における対象のスクリプト・オブジェクトを削除"
-			     name="Delete Target&apos;s Scripted Objects On *Any* Land"
-			     tool_tip="この地域において対象が所有しているスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button label="対象のオブジェクトを「すべて」削除"
-			     label_selected="対象のオブジェクトを「すべて」削除"
-			     name="Delete *ALL* Of Target&apos;s Objects"
-			     tool_tip="この地域において対象が所有しているオブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。" />
-			<button label="トップ・コライダーを取得"
-			     label_selected="トップ・コライダーを取得"
-			     name="Get Top Colliders"
-			     tool_tip="最も段階の狭いコールバックが発生したオブジェクトのリストを取得します。" />
-			<button label="トップ・スクリプトを取得"
-			     label_selected="トップ・スクリプトを取得"
-			     name="Get Top Scripts"
-			     tool_tip="スクリプトの起動に最も時間を費やしているオブジェクトのリストを取得します。" />
-			<button label="スクリプト・ダイジェスト"
-			     label_selected="スクリプト・ダイジェスト" name="Scripts digest"
-			     tool_tip="すべてのスクリプトとそれらの使用回数のリストを取得します。" />
-		</panel>
-		<panel label="要求" name="request">
-			<text name="Destination:">
-				目的地:
-			</text>
-			<combo_box name="destination">
-				<combo_box.item name="item1" label="選択"/>
-				<combo_box.item name="item2" label="エージェント地域"/>
-			</combo_box>
-			<text name="Request:">
-				要求:
-			</text>
-			<combo_box name="request">
-				<combo_box.item name="item1" label="コライダー<ステップ>"/>
-				<combo_box.item name="item2" label="スクリプト<回数>、<オプション・パターン>"/>
-				<combo_box.item name="item3" label="オブジェクト<パターン>"/>
-				<combo_box.item name="item4" label="rez <asset_id>"/>
-			</combo_box>
-			<text name="Parameter:">
-				パラメーター:
-			</text>
-			<button label="リクエストする" label_selected="リクエストする"
-			     name="Make Request" />
-		</panel>
-	</tab_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="godtools floater" title="ゴッド・ツール">
+	<tab_container name="GodTools Tabs">
+		<panel label="グリッド" name="grid">
+			<button label="すべてのユーザーを追い出す" label_selected="すべてのユーザーを追い出す" name="Kick all users"/>
+			<button label="この地域の地図の表示キャッシュを消去" label_selected="この地域の地図の表示キャッシュを消去" name="Flush This Region&apos;s Map Visibility Caches"/>
+		</panel>
+		<panel label="地域" name="region">
+			<text name="Sim Name:">
+				シム名:
+			</text>
+			<check_box label="準備" name="check prelude" tool_tip="この設定により、この地域の準備をします。"/>
+			<check_box label="太陽固定" name="check fixed sun" tool_tip="太陽位置を固定([地域/不動産]>[地形]の場合と同様)"/>
+			<check_box label="テレポートのホームをリセット" name="check reset home" tool_tip="住人がテレポートで去ったとき、彼らのホームを目的地にリセットする。"/>
+			<check_box label="可視" name="check visible" tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。"/>
+			<check_box label="ダメージ" name="check damage" tool_tip="この設定により、この地域内でダメージを有効化します。"/>
+			<check_box label="トラフィック・トラッキングをブロック" name="block dwell" tool_tip="この設定により、この地域内のトラフィック計算をオフにします。"/>
+			<check_box label="土地整備をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/>
+			<check_box label="サンドボックス" name="is sandbox" tool_tip="これがサンドボックス地域でも切り替え"/>
+			<button label="地形を構築する" label_selected="地形を構築する" name="Bake Terrain" tool_tip="現在の地形をデフォルトとして保存します。"/>
+			<button label="地形を元に戻す" label_selected="地形を元に戻す" name="Revert Terrain" tool_tip="現在の地形をデフォルトに置換します。"/>
+			<button label="地形を交換" label_selected="地形を交換" name="Swap Terrain" tool_tip="現在の地形をデフォルトと入れ替えます。"/>
+			<text name="estate id">
+				不動産ID:
+			</text>
+			<text name="parent id">
+				親ID:
+			</text>
+			<line_editor name="parentestate" tool_tip="これは、この地域の親不動産です。"/>
+			<text name="Grid Pos: ">
+				グリッド位置:
+			</text>
+			<line_editor name="gridposx" tool_tip="これは、この地域のグリッドxの位置です。"/>
+			<line_editor name="gridposy" tool_tip="これは、この地域のグリッドyの位置です。"/>
+			<text name="Redirect to Grid: ">
+				グリッドにリダイレクト:
+			</text>
+			<text name="billable factor text">
+				請求率:
+			</text>
+			<text name="land cost text">
+				平方メートル当たりL$:
+			</text>
+			<button label="更新" label_selected="更新" name="Refresh" tool_tip="上記の情報を更新するには、ここをクリックします。"/>
+			<button label="適用" label_selected="適用" name="Apply" tool_tip="上記の変更を適用するには、ここをクリックします。"/>
+			<button label="地域を選択" label_selected="地域を選択" name="Select Region" tool_tip="土地ツールで地域全体を選択してください。"/>
+			<button label="ただちに自動保存する" label_selected="ただちに自動保存する" name="Autosave now" tool_tip="Gzip状態を自動保存ディレクトリに保存します。"/>
+		</panel>
+		<panel label="オブジェクト" name="objects">
+			<panel.string name="no_target">
+				(ターゲットなし)
+			</panel.string>
+			<text name="Sim Name:">
+				シム名:
+			</text>
+			<text name="region name">
+				ウェルシュ
+			</text>
+			<check_box label="スクリプトを無効化" name="disable scripts" tool_tip="この設定により、この地域内のスクリプトをすべて無効化"/>
+			<check_box label="衝突を無効化" name="disable collisions" tool_tip="この設定により、この地域内の非エージェント衝突を無効化"/>
+			<check_box label="物理作用を無効化" name="disable physics" tool_tip="この設定により、この地域内の物理的作用をすべて無効化"/>
+			<button label="適用" label_selected="適用" name="Apply" tool_tip="上記の変更を適用するには、ここをクリックします。"/>
+			<button label="対象の設定" label_selected="対象の設定" name="Set Target" tool_tip="オブジェクト削除の対象となるアバターを設定してください。"/>
+			<text name="target_avatar_name">
+				(対象なし)
+			</text>
+			<button label="他の土地における対象のスクリプト・オブジェクトを削除" label_selected="他の土地における対象のスクリプト・オブジェクトを削除" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="この地域において対象が所有していないスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="「すべての」土地における対象のスクリプト・オブジェクトを削除" label_selected="「すべての」土地における対象のスクリプト・オブジェクトを削除" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="この地域において対象が所有しているスクリプト・オブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="対象のオブジェクトを「すべて」削除" label_selected="対象のオブジェクトを「すべて」削除" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="この地域において対象が所有しているオブジェクトをすべて削除します。 (コピー禁止)オブジェクトは返却されます。"/>
+			<button label="トップ・コライダーを取得" label_selected="トップ・コライダーを取得" name="Get Top Colliders" tool_tip="最も段階の狭いコールバックが発生したオブジェクトのリストを取得します。"/>
+			<button label="トップ・スクリプトを取得" label_selected="トップ・スクリプトを取得" name="Get Top Scripts" tool_tip="スクリプトの起動に最も時間を費やしているオブジェクトのリストを取得します。"/>
+			<button label="スクリプト・ダイジェスト" label_selected="スクリプト・ダイジェスト" name="Scripts digest" tool_tip="すべてのスクリプトとそれらの使用回数のリストを取得します。"/>
+		</panel>
+		<panel label="要求" name="request">
+			<text name="Destination:">
+				目的地:
+			</text>
+			<combo_box name="destination">
+				<combo_box.item label="選択" name="item1"/>
+				<combo_box.item label="エージェント地域" name="item2"/>
+			</combo_box>
+			<text name="Request:">
+				要求:
+			</text>
+			<combo_box name="request">
+				<combo_box.item label="コライダー<ステップ>" name="item1"/>
+				<combo_box.item label="スクリプト<回数>、<オプション・パターン>" name="item2"/>
+				<combo_box.item label="オブジェクト<パターン>" name="item3"/>
+				<combo_box.item label="rez <asset_id>" name="item4"/>
+			</combo_box>
+			<text name="Parameter:">
+				パラメーター:
+			</text>
+			<button label="リクエストする" label_selected="リクエストする" name="Make Request"/>
+		</panel>
+	</tab_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
index 67d105c2a44561df8af7f8d22952a6ce40e5c81a..309a35a2a283465aef0afd134d5a76ab505a8f68 100644
--- a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
@@ -1,32 +1,28 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="ハードウェア設定">
-	<text name="Filtering:">
-		フィルタリング:
-	</text>
-	<check_box
-	     label="異方的フィルタリング(有効にすると速度が低下します)"
-	     name="ani" />
-	<text name="Antialiasing:">
-		アンチエイリアシング:
-	</text>
-	<combo_box label="アンチエイリアシング" name="fsaa">
-		<combo_box.item name="FSAADisabled" label="無効" />
-		<combo_box.item name="2x" label="2x" />
-		<combo_box.item name="4x" label="4x" />
-		<combo_box.item name="8x" label="8x" />
-		<combo_box.item name="16x" label="16x" />
-	</combo_box>
-	<spinner label="ガンマ:" name="gamma" />
-	<text name="(brightness, lower is brighter)">
-		(輝度:低い=高輝度、0=デフォルト値)
-	</text>
-	<text name="Enable VBO:">
-		VBO を有効化:
-	</text>
-	<check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo"
-	     tool_tip="最新のハードウェアでこの設定を有効にすると、パフォーマンスが向上します。  しかし、旧型のハードウェアでは VBO の実装が貧弱な場合が多く、この設定を有効にすることでクラッシュにつながるおそれがあります。" />
-	<slider label="テクスチャメモリ(MB):" name="GrapicsCardTextureMemory"
-	     tool_tip="テクスチャーに割り当てるメモリの合計。 ビデオ・カード・メモリをデフォルトにします。 この数値を減らすと、パフォーマンスが改善されますが、テクスチャーがぼやけた感じになる場合があります。" />
-	<spinner label="フォグの距離比率:" name="fog" />
-	<button label="OK" label_selected="OK" name="OK" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Hardware Settings Floater" title="ハードウェア設定">
+	<text name="Filtering:">
+		フィルタリング:
+	</text>
+	<check_box label="異方的フィルタリング(有効にすると速度が低下します)" name="ani"/>
+	<text name="Antialiasing:">
+		アンチエイリアシング:
+	</text>
+	<combo_box label="アンチエイリアシング" name="fsaa">
+		<combo_box.item label="無効" name="FSAADisabled"/>
+		<combo_box.item label="2x" name="2x"/>
+		<combo_box.item label="4x" name="4x"/>
+		<combo_box.item label="8x" name="8x"/>
+		<combo_box.item label="16x" name="16x"/>
+	</combo_box>
+	<spinner label="ガンマ:" name="gamma"/>
+	<text name="(brightness, lower is brighter)">
+		(0 でデフォルト、低いほど明るい)
+	</text>
+	<text name="Enable VBO:">
+		VBO を有効化:
+	</text>
+	<check_box label="OpenGL Vertex Buffer Objectsを有効化" name="vbo" tool_tip="最新のハードウェアでこの設定を有効にすると、パフォーマンスが向上します。  しかし、旧型のハードウェアでは VBO の実装が貧弱な場合が多く、この設定を有効にすることでクラッシュにつながるおそれがあります。"/>
+	<slider label="テクスチャメモリ(MB):" name="GrapicsCardTextureMemory" tool_tip="テクスチャーに割り当てるメモリの合計。 ビデオ・カード・メモリをデフォルトにします。 この数値を減らすと、パフォーマンスが改善されますが、テクスチャーがぼやけた感じになる場合があります。"/>
+	<spinner label="フォグの距離比率:" name="fog"/>
+	<button label="OK" label_selected="OK" name="OK"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml
index fae9c87da481fb861f1c3480e5d57b69a7505ab6..42a4a2fd7f8d6cdcca35133f32566e89e78c92ba 100644
--- a/indra/newview/skins/default/xui/ja/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_image_preview.xml
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Image Preview" title="">
-	<text name="name_label">
-		名前:
-	</text>
-	<text name="description_label">
-		説明:
-	</text>
-	<text name="preview_label">
-		イメージのプレビュー:
-	</text>
-	<combo_box label="服の種類" name="clothing_type_combo">
-		<combo_box.item name="Image" label="画像" />
-		<combo_box.item name="Hair" label="髪" />
-		<combo_box.item name="FemaleHead" label="女性の頭" />
-		<combo_box.item name="FemaleUpperBody" label="女性の上半身" />
-		<combo_box.item name="FemaleLowerBody" label="女性の下半身" />
-		<combo_box.item name="MaleHead" label="男性の頭" />
-		<combo_box.item name="MaleUpperBody" label="男性の上半身" />
-		<combo_box.item name="MaleLowerBody" label="男性の下半身" />
-		<combo_box.item name="Skirt" label="スカート" />
-		<combo_box.item name="SculptedPrim" label="変形されたプリム" />
-	</combo_box>
-	<text name="bad_image_text">
-		イメージを読み取れません。
-
-24bitTarga(.tga)でイメージを保存してください。
-	</text>
-	<check_box label="ロスのない圧縮を使用" name="lossless_check" />
-	<button label="取り消し" name="cancel_btn" />
-	<button label="アップロードL$[AMOUNT]" name="ok_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Image Preview" title="">
+	<text name="name_label">
+		名前:
+	</text>
+	<text name="description_label">
+		説明:
+	</text>
+	<text name="preview_label">
+		イメージのプレビュー:
+	</text>
+	<combo_box label="服の種類" name="clothing_type_combo">
+		<combo_box.item label="画像" name="Image"/>
+		<combo_box.item label="髪" name="Hair"/>
+		<combo_box.item label="女性の頭" name="FemaleHead"/>
+		<combo_box.item label="女性の上半身" name="FemaleUpperBody"/>
+		<combo_box.item label="女性の下半身" name="FemaleLowerBody"/>
+		<combo_box.item label="男性の頭" name="MaleHead"/>
+		<combo_box.item label="男性の上半身" name="MaleUpperBody"/>
+		<combo_box.item label="男性の下半身" name="MaleLowerBody"/>
+		<combo_box.item label="スカート" name="Skirt"/>
+		<combo_box.item label="スカルプトプリム" name="SculptedPrim"/>
+	</combo_box>
+	<text name="bad_image_text">
+		イメージを読み取れません。
+
+24bitTarga(.tga)でイメージを保存してください。
+	</text>
+	<check_box label="ロスのない圧縮を使用" name="lossless_check"/>
+	<button label="取り消し" name="cancel_btn"/>
+	<button label="アップロードL$[AMOUNT]" name="ok_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
index 8588ee1a96669a6a589f628837bb91809a95497e..bc34878fde0e8a78534f8907abb3bb5fa715a0e8 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
@@ -1,81 +1,67 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="持ち物アイテムのプロパティ">
-	<text name="LabelItemNameTitle">
-		名前:
-	</text>
-	<text name="LabelItemDescTitle">
-		説明:
-	</text>
-	<text name="LabelCreatorTitle">
-		クリエーター
-	</text>
-	<text name="LabelCreatorName">
-		Nicole Linden
-	</text>
-	<button label="情報" label_selected="" name="BtnCreator" />
-	<text name="LabelOwnerTitle">
-		オーナー:
-	</text>
-	<text name="LabelOwnerName">
-		Thrax Linden
-	</text>
-	<button label="情報" label_selected="" name="BtnOwner" />
-	<text name="LabelAcquiredTitle">
-		入手日時:
-	</text>
-	<text name="LabelAcquiredDate">
-		2006年5月24日水曜日12:50:46
-	</text>
-	<text name="OwnerLabel">
-		できること:
-	</text>
-	<check_box label="修正" name="CheckOwnerModify" />
-	<check_box label="コピー" name="CheckOwnerCopy" />
-	<check_box label="再販/プレゼント" name="CheckOwnerTransfer" />
-	<text name="BaseMaskDebug">
-		B:
-	</text>
-	<text name="OwnerMaskDebug">
-		O:
-	</text>
-	<text name="GroupMaskDebug">
-		G:
-	</text>
-	<text name="EveryoneMaskDebug">
-		E:
-	</text>
-	<text name="NextMaskDebug">
-		N:
-	</text>
-	<check_box label="グループ分担" name="CheckShareWithGroup" />
-	<check_box label="誰に対してもコピーを許可" name="CheckEveryoneCopy" />
-	<text name="NextOwnerLabel" width="158">
-		次のオーナーができること:
-	</text>
-	<check_box label="修正" name="CheckNextOwnerModify" />
-	<check_box label="コピー" name="CheckNextOwnerCopy" />
-	<check_box label="再販/プレゼント" name="CheckNextOwnerTransfer" />
-	<text name="SaleLabel">
-		アイテムにマーク:
-	</text>
-	<check_box label="売り出し中" name="CheckPurchase" />
-	<radio_group name="RadioSaleType">
-		<radio_item name="radio" label="オリジナル" />
-		<radio_item name="radio2" label="コピー" />
-	</radio_group>
-	<text name="TextPrice">
-		料金:L$
-	</text>
-	<text name="unknown">
-		(不明)
-	</text>
-	<text name="public">
-		(公共)
-	</text>
-	<text name="you_can">
-		できること:
-	</text>
-	<text name="owner_can">
-		オーナーは次のことができます:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="item properties" title="持ち物アイテムのプロパティ">
+	<floater.string name="unknown">
+		(不明)
+	</floater.string>
+	<floater.string name="public">
+		(公共)
+	</floater.string>
+	<floater.string name="you_can">
+		できること:
+	</floater.string>
+	<floater.string name="owner_can">
+		オーナーは次のことができます:
+	</floater.string>
+	<text name="LabelItemNameTitle">
+		名前:
+	</text>
+	<text name="LabelItemDescTitle">
+		説明:
+	</text>
+	<text name="LabelCreatorTitle">
+		クリエーター
+	</text>
+	<text name="LabelCreatorName">
+		Nicole Linden
+	</text>
+	<button label="情報" label_selected="" name="BtnCreator"/>
+	<text name="LabelOwnerTitle">
+		オーナー:
+	</text>
+	<text name="LabelOwnerName">
+		Thrax Linden
+	</text>
+	<button label="情報" label_selected="" name="BtnOwner"/>
+	<text name="LabelAcquiredTitle">
+		入手日時:
+	</text>
+	<text name="LabelAcquiredDate">
+		2006年5月24日水曜日12:50:46
+	</text>
+	<text name="OwnerLabel">
+		あなた:
+	</text>
+	<check_box label="編集" name="CheckOwnerModify"/>
+	<check_box label="コピー" name="CheckOwnerCopy"/>
+	<check_box label="再販・プレゼント" name="CheckOwnerTransfer"/>
+	<text name="AnyoneLabel">
+		全員:
+	</text>
+	<check_box label="コピー" name="CheckEveryoneCopy"/>
+	<text name="GroupLabel">
+		グループ:
+	</text>
+	<check_box label="共有" name="CheckShareWithGroup"/>
+	<text name="NextOwnerLabel" width="158">
+		次の所有者:
+	</text>
+	<check_box label="編集" name="CheckNextOwnerModify"/>
+	<check_box label="コピー" name="CheckNextOwnerCopy"/>
+	<check_box label="再販・プレゼント" name="CheckNextOwnerTransfer"/>
+	<check_box label="売り出し中" name="CheckPurchase"/>
+	<combo_box name="combobox sale copy">
+		<combo_box.item label="コピー" name="Copy"/>
+		<combo_box.item label="オリジナル" name="Original"/>
+	</combo_box>
+	<spinner label="価格: L$" name="Edit Cost"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
index d4037487b70413e84baa7eabd7b599495a8b3cf5..220080992508f7c8f7e9b3633baca4987565b6ee 100644
--- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="inventory_recent_items">
+<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS">
 	<check_box label="アニメーション" name="check_animation" />
 	<check_box label="コーリング・カード" name="check_calling_card" />
 	<check_box label="服" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
index cb87dafb49f2688e9723009806c98005ff1d2468..49a42a716585c9c811240ee41c0ade28d97912ae 100644
--- a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="自分の土地">
-	<scroll_list name="parcel list">
-		<column label="区画名" name="name"/>
-		<column label="地域(リージョン)" name="location"/>
-		<column label="種類" name="type"/>
-		<column label="面積" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポート"/>
-	<button label="地図上に表示" label_selected="地図上に表示" name="Show on Map" tool_tip="この土地を世界地図に表示します。"/>
-	<text name="contrib_label">
-		あなたのグループへの貢献:
-	</text>
-	<scroll_list name="grant list">
-		<column label="グループ名" name="group"/>
-		<column label="面積" name="area"/>
-	</scroll_list>
-	<text name="allowed_label">
-		現在の支払いプランでの許可された保有地:
-	</text>
-	<text name="allowed_text">
-		[AREA]平方メートル
-	</text>
-	<text name="current_label">
-		現在の保有地:
-	</text>
-	<text name="current_text">
-		[AREA]平方メートル
-	</text>
-	<text name="available_label">
-		土地購入可:
-	</text>
-	<text name="available_text">
-		[AREA]平方メートル
-	</text>
-	<string name="area_string">
-		[AREA]平方メートル
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="land holdings floater" title="自分の土地">
+	<scroll_list name="parcel list">
+		<column label="区画" name="name"/>
+		<column label="地域(リージョン)" name="location"/>
+		<column label="種類" name="type"/>
+		<column label="面積" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポート"/>
+	<button label="地図" label_selected="地図" name="Show on Map" tool_tip="この土地を世界地図に表示します。"/>
+	<text name="contrib_label">
+		あなたのグループへの貢献:
+	</text>
+	<scroll_list name="grant list">
+		<column label="グループ名" name="group"/>
+		<column label="面積" name="area"/>
+	</scroll_list>
+	<text name="allowed_label">
+		現在の支払いプランでの許可された保有地:
+	</text>
+	<text name="allowed_text">
+		[AREA]平方メートル
+	</text>
+	<text name="current_label">
+		現在の保有地:
+	</text>
+	<text name="current_text">
+		[AREA]平方メートル
+	</text>
+	<text name="available_label">
+		土地購入可:
+	</text>
+	<text name="available_text">
+		[AREA]平方メートル
+	</text>
+	<string name="area_string">
+		[AREA]平方メートル
+	</string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
index 79942738ea31c0579b446753af2e0fe9d7086c35..b108a3e70cabdf6f8671798140022bfd704a74c9 100644
--- a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
@@ -1,12 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="スクリプト:新しいスクリプト">
-	<button label="リセット" label_selected="リセット" name="Reset" />
-	<check_box label="実行中" name="running" />
-	<check_box label="Mono" name="mono" />
-	<text name="not_allowed">
-		あなたはこのスクリプトを見ることができません。
-	</text>
-	<string name="script_running">
-		実行中
-	</string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script ed float" title="スクリプト:新しいスクリプト">
+	<floater.string name="not_allowed">
+		このスクリプトは「コピー不可」のため、表示または編集することができません。 オブジェクト内のスクリプトの表示または編集には、全権限が必要です。
+	</floater.string>
+	<floater.string name="script_running">
+		実行中
+	</floater.string>
+	<floater.string name="Title">
+		スクリプト: [NAME]
+	</floater.string>
+	<button label="リセット" label_selected="リセット" name="Reset"/>
+	<check_box initial_value="true" label="実行中" name="running"/>
+	<check_box initial_value="true" label="Mono" name="mono"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
index 55eba966dcafa1a7449752424570ae4958124ea4..e535fc731f89218a9edff8b2c1da9bbc6ecf8b1a 100644
--- a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="カーソルを追う" name="lock_check" />
 	<combo_box label="ロック" name="history_combo" />
 	<button label="戻る" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml
index 3356d4948ac371fad1a9c7455ce607121c107ef4..aefe24ae48d693a6ebfb1c8751cb271278364f77 100644
--- a/indra/newview/skins/default/xui/ja/floater_map.xml
+++ b/indra/newview/skins/default/xui/ja/floater_map.xml
@@ -1,51 +1,54 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Map">
-	<floater.string name="mini_map_north">
-		北
-	</floater.string>
-	<floater.string name="mini_map_east">
-		東
-	</floater.string>
-	<floater.string name="mini_map_west">
-		西
-	</floater.string>
-	<floater.string name="mini_map_south">
-		南
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		南東
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		北東
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		南西
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		北西
-	</floater.string>
-	<text label="北" name="floater_map_north" text="北">
-		北
-	</text>
-	<text label="東" name="floater_map_east" text="東">
-		東
-	</text>
-	<text label="西" name="floater_map_west" text="西">
-		西
-	</text>
-	<text label="南" name="floater_map_south" text="南">
-		南
-	</text>
-	<text label="南東" name="floater_map_southeast" text="南東">
-		南東
-	</text>
-	<text label="北東" name="floater_map_northeast" text="北東">
-		北東
-	</text>
-	<text label="南西" name="floater_map_southwest" text="南西">
-		南西
-	</text>
-	<text label="北西" name="floater_map_northwest" text="北西">
-		北西
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+	<floater.string name="mini_map_north">
+		北
+	</floater.string>
+	<floater.string name="mini_map_east">
+		東
+	</floater.string>
+	<floater.string name="mini_map_west">
+		西
+	</floater.string>
+	<floater.string name="mini_map_south">
+		南
+	</floater.string>
+	<floater.string name="mini_map_southeast">
+		南東
+	</floater.string>
+	<floater.string name="mini_map_northeast">
+		北東
+	</floater.string>
+	<floater.string name="mini_map_southwest">
+		南西
+	</floater.string>
+	<floater.string name="mini_map_northwest">
+		北西
+	</floater.string>
+	<floater.string name="ToolTipMsg">
+		[AGENT][REGION] (ダブルクリックで地図を開く)
+	</floater.string>
+	<text label="北" name="floater_map_north" text="北">
+		北
+	</text>
+	<text label="東" name="floater_map_east" text="東">
+		東
+	</text>
+	<text label="西" name="floater_map_west" text="西">
+		西
+	</text>
+	<text label="南" name="floater_map_south" text="南">
+		南
+	</text>
+	<text label="南東" name="floater_map_southeast" text="南東">
+		南東
+	</text>
+	<text label="北東" name="floater_map_northeast" text="北東">
+		北東
+	</text>
+	<text label="南西" name="floater_map_southwest" text="南西">
+		南西
+	</text>
+	<text label="北西" name="floater_map_northwest" text="北西">
+		北西
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml
index 6877cc7f53299fc62a78d9198d8f3e6d6ddee690..5e60b9f1a2ef9dc91c72e1023ce1e78591d7179a 100644
--- a/indra/newview/skins/default/xui/ja/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/ja/floater_media_browser.xml
@@ -1,19 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="メディア・ブラウザ">
-	<layout_stack name="stack1">
-		<layout_panel name="nav_controls">
-			<button label="戻る" name="back" />
-			<button label="進む" name="forward" />
-			<button label="æ›´æ–°" name="reload" />
-			<button label="閲覧" name="go" />
-		</layout_panel>
-		<layout_panel name="parcel_owner_controls">
-			<button label="現在の URL を区画に送信" name="assign" />
-		</layout_panel>
-		<layout_panel name="external_controls">
-			<button label="外部ウェブ・ブラウザで開く" name="open_browser" />
-			<check_box label="常に外部のウェブ・ブラウザで開く" name="open_always" />
-			<button label="閉じる" name="close" />
-		</layout_panel>
-	</layout_stack>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="メディア・ブラウザ">
+	<floater.string name="home_page_url">
+		http://jp.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://jp.secondlife.com/support
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="戻る" name="back"/>
+			<button label="進む" name="forward"/>
+			<button label="æ›´æ–°" name="reload"/>
+			<button label="閲覧" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="巻き戻し" name="rewind"/>
+			<button label="停止" name="stop"/>
+			<button label="早送り" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="現在の URL を区画に送信" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="外部ウェブ・ブラウザで開く" name="open_browser"/>
+			<check_box label="常に外部のウェブ・ブラウザで開く" name="open_always"/>
+			<button label="閉じる" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
index 4d6b6ca70a7224712fe70f1ff78242edd280ffc2..1f7fcb949500401508390c654175a625280069bd 100644
--- a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="メモリ・リーク・シミュレーション">
-	<spinner label="リークスピード(1フレームごとのバイト数):"
-	     name="leak_speed"  label_width="244" />
-	<spinner label="リークした最大メモリ数(MB):" name="max_leak"  label_width="244" />
-	<text name="total_leaked_label">
-		現在のリークメモリサイズ: [SIZE] KB
-	</text>
-	<text name="note_label_1">
-		[NOTE1]
-	</text>
-	<text name="note_label_2">
-		[NOTE2]
-	</text>
-	<button label="開始" name="start_btn" />
-	<button label="停止" name="stop_btn" />
-	<button label="解放" name="release_btn" />
-	<button label="閉じる" name="close_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="MemLeak" title="メモリリークのシミュレート">
+	<spinner label="リークスピード(1フレームごとのバイト数):" label_width="244" name="leak_speed"/>
+	<spinner label="リークした最大メモリ数(MB):" label_width="244" name="max_leak"/>
+	<text name="total_leaked_label">
+		現在のリークメモリサイズ: [SIZE] KB
+	</text>
+	<text name="note_label_1">
+		[NOTE1]
+	</text>
+	<text name="note_label_2">
+		[NOTE2]
+	</text>
+	<button label="開始" name="start_btn"/>
+	<button label="停止" name="stop_btn"/>
+	<button label="解放" name="release_btn"/>
+	<button label="閉じる" name="close_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
index df6ae7bb61bd9a82cae7749458de2f55f8ea760a..e6aeccc517546927db5ebb0b1f318daf9a4bef85 100644
--- a/indra/newview/skins/default/xui/ja/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml
@@ -1,17 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="move_floater">
-<panel name="panel_actions">
-	<button label="" label_selected="" name="turn left btn" tool_tip="左に曲がる" />
-	<button label="" label_selected="" name="turn right btn" tool_tip="右に曲がる" />
-	<button label="" label_selected="" name="move up btn"
-	     tool_tip="ジャンプまたは上昇" />
-	<button label="" label_selected="" name="move down btn"
-	     tool_tip="しゃがむまたは下降" />
-	<button label="飛行" label_selected="飛行" name="fly btn"
-	     tool_tip="飛行を開始または停止" />
-	<joystick_slide name="slide left btn" tool_tip="左に移動" />
-	<joystick_slide name="slide right btn" tool_tip="右に移動" />
-	<joystick_turn name="forward btn" tool_tip="前に移動" />
-	<joystick_turn name="backward btn" tool_tip="後ろに移動" />
-</panel>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="move_floater">
+	<string name="walk_forward_tooltip">
+		前に進む(上矢印か W を押す)
+	</string>
+	<string name="walk_back_tooltip">
+		後ろに歩く(下矢印か S を押す)
+	</string>
+	<string name="run_forward_tooltip">
+		前に走る(上矢印か W を押す)
+	</string>
+	<string name="run_back_tooltip">
+		後ろに走る(下矢印か S を押す)
+	</string>
+	<string name="fly_forward_tooltip">
+		前に飛ぶ(上矢印か W を押す)
+	</string>
+	<string name="fly_back_tooltip">
+		後ろに飛ぶ(下矢印か S を押す)
+	</string>
+	<panel name="panel_actions">
+		<button label="" label_selected="" name="turn left btn" tool_tip="左を向く(左矢印か A を押す)"/>
+		<button label="" label_selected="" name="turn right btn" tool_tip="右を向く(右矢印か D を押す)"/>
+		<button label="" label_selected="" name="move up btn" tool_tip="飛ぶ・E を押す"/>
+		<button label="" label_selected="" name="move down btn" tool_tip="着地・C を押す"/>
+		<joystick_turn name="forward btn" tool_tip="前に進む(上矢印か W を押す)"/>
+		<joystick_turn name="backward btn" tool_tip="後ろに歩く(下矢印か S を押す)"/>
+	</panel>
+	<panel name="panel_modes">
+		<button label="" name="mode_walk_btn" tool_tip="歩行モード"/>
+		<button label="" name="mode_run_btn" tool_tip="走行モード"/>
+		<button label="" name="mode_fly_btn" tool_tip="飛行モード"/>
+		<button label="飛行停止" name="stop_fly_btn" tool_tip="飛行停止"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml
index 8702ab1e74ff45c858cdf30403273387116b7fed..d175009ef31da5eb87ec7ad71b6e0e8e54d48938 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay.xml
@@ -1,21 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<button label="L$1" label_selected="L$1" name="fastpay 1" />
-	<button label="L$5" label_selected="L$5" name="fastpay 5" />
-	<button label="L$10" label_selected="L$10" name="fastpay 10" />
-	<button label="L$20" label_selected="L$20" name="fastpay 20" />
-	<button label="支払い" label_selected="支払い" name="pay btn" />
-	<button label="取り消し" label_selected="取り消し" name="cancel btn" />
-	<text name="payee_label">
-		支払い先:
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="fastpay text">
-		一括払い:
-	</text>
-	<text name="amount text">
-		金額:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<text name="payee_label">
+		支払い:
+	</text>
+	<icon name="icon_person" tool_tip="住人"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
+	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
+	<button label="L$10" label_selected="L$10" name="fastpay 10"/>
+	<button label="L$20" label_selected="L$20" name="fastpay 20"/>
+	<text name="amount text">
+		金額の指定:
+	</text>
+	<button label="支払い" label_selected="支払い" name="pay btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
index 5f280ca5fae6384f007685b671d979fdfb400e94..5a3edb290866e4cf07a51d499c9126bce50a3213 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
@@ -1,30 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Give Money" title="">
-	<text name="payee_group">
-		グループへの支払い:
-	</text>
-	<text name="payee_resident">
-		住人への支払い:
-	</text>
-	<text name="payee_name">
-		[FIRST] [LAST]
-	</text>
-	<text name="object_name_label">
-		オブジェクトを介して:
-	</text>
-	<text name="object_name_text">
-		...
-	</text>
-	<text name="fastpay text">
-		一括払い:
-	</text>
-	<text name="amount text">
-		金額:
-	</text>
-	<button label="L$1" label_selected="L$1" name="fastpay 1" />
-	<button label="L$5" label_selected="L$5" name="fastpay 5" />
-	<button label="L$10" label_selected="L$10" name="fastpay 10" />
-	<button label="L$20" label_selected="L$20" name="fastpay 20" />
-	<button label="支払い" label_selected="支払い" name="pay btn" />
-	<button label="取り消し" label_selected="取り消し" name="cancel btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Give Money" title="">
+	<string name="payee_group">
+		グループへの支払い:
+	</string>
+	<string name="payee_resident">
+		住人への支払い:
+	</string>
+	<icon name="icon_person" tool_tip="住人"/>
+	<text name="payee_name">
+		[FIRST] [LAST]
+	</text>
+	<text name="object_name_label">
+		オブジェクトを介して:
+	</text>
+	<icon name="icon_object" tool_tip="オブジェクト"/>
+	<text name="object_name_text">
+		...
+	</text>
+	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
+	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
+	<button label="L$10" label_selected="L$10" name="fastpay 10"/>
+	<button label="L$20" label_selected="L$20" name="fastpay 20"/>
+	<text name="amount text">
+		金額を指定:
+	</text>
+	<button label="支払い" label_selected="支払い" name="pay btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
index 653674129cf6b2ab2a2b27538f39c83e15e0a99b..95cffd33f2c08ea301c21973997d1dadbd4290cb 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_anim">
-	<text name="desc txt">
-		説明:
-	</text>
-	<button label="世界で再生" label_selected="停止" name="Anim play btn"
-	     tool_tip="このアニメーションを他の人も見ることができるように再生します。" />
-	<button label="ローカルに再生" label_selected="停止" name="Anim audition btn"
-	     tool_tip="このアニメーションを自分専用に再生します。" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_anim">
+	<floater.string name="Title">
+		アニメーション: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="世界で再生" label_selected="停止" name="Anim play btn" tool_tip="このアニメーションを他の人も見ることができるように再生します。"/>
+	<button label="ローカルに再生" label_selected="停止" name="Anim audition btn" tool_tip="このアニメーションを自分専用に再生します。"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
index f0770b2ed5d8f194dee1ad9111fcdc0a8060cea4..48a64e28a6e21a401086dd3600e4eee50377c5bc 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="クラシファイド広告情報" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="classified_preview" title="クラシファイド広告情報">
+	<floater.string name="Title">
+		クラシファイド広告: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
index 9ecabfabb0dbe85675fb2e4840ee24b3b4b01d1c..61c17e2d3c966e815b0436eb2b45abb5f4610214 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
@@ -1,2 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="イベント情報" />
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="event_preview" title="イベント情報">
+	<floater.string name="Title">
+		イベント: [NAME]
+	</floater.string>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c996ed8591cf4222d52a871393aab2c774b12eb0
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c996ed8591cf4222d52a871393aab2c774b12eb0
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
index e7dd4d2c098fdc18bf8ad35348e51ae49e3e75ed..ba272bdffd0d813c5d1fbb46e3b7aa8a7d6e7276 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
@@ -1,16 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="メモ:">
-	<button label="保存" label_selected="保存" name="Save" />
-	<text name="desc txt">
-		説明:
-	</text>
-	<text_editor name="Notecard Editor">
-		ローディング...
-	</text_editor>
-	<text name="no_object">
-		このノートを含んだオブジェクトが見つかりません。
-	</text>
-	<text name="not_allowed">
-		あなたはこのノートを見ることができません。
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview notecard" title="メモ:">
+	<floater.string name="no_object">
+		このノートを含んだオブジェクトが見つかりません。
+	</floater.string>
+	<floater.string name="not_allowed">
+		このノートを見る権限がありません。
+	</floater.string>
+	<floater.string name="Title">
+		ノートカード: [NAME]
+	</floater.string>
+	<floater.string label="保存" label_selected="保存" name="Save">
+		保存
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<text_editor name="Notecard Editor">
+		ローディング...
+	</text_editor>
+	<button label="保存" label_selected="保存" name="Save"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
index 244ef13d13985ce3e1b6ca14c35e890a1a8b61f1..e52a3a4e9249c9425c2fc786f490ec64a637c9b1 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_sound">
-	<text name="desc txt">
-		説明:
-	</text>
-	<button label="世界で再生" label_selected="世界で再生" name="Sound play btn"
-	     tool_tip="このサウンドを他の人も聞くことができるように再生します。" />
-	<button label="ローカルに再生" label_selected="ローカルに再生"
-	     name="Sound audition btn"
-	     tool_tip="このサウンドを自分専用に再生します。" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_sound">
+	<floater.string name="Title">
+		サウンド: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="世界で再生" label_selected="世界で再生" name="Sound play btn" tool_tip="このサウンドを他の人も聞くことができるように再生します。"/>
+	<button label="ローカルに再生" label_selected="ローカルに再生" name="Sound audition btn" tool_tip="このサウンドを自分専用に再生します。"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
index ffd9e3bfbefa5768a02f4da7e8b45b02456df366..c83130f3bb01f21703aa38b3ee1a2cab43a7ee25 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
@@ -1,9 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview_texture">
-	<text name="desc txt">
-		説明:
-	</text>
-	<text name="dimensions">
-		寸法:[HEIGHT]x[WIDTH]
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_texture">
+	<floater.string name="Title">
+		テクスチャ: [NAME]
+	</floater.string>
+	<floater.string name="Copy">
+		持ち物にコピー
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+	<button label="保存" name="Keep"/>
+	<button label="削除" name="Discard"/>
+	<text name="dimensions">
+		[WIDTH]px x [HEIGHT]px
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
index 6eae7613b347c5ab5a7266d4aed6b26809ce517f..2b07deb10329bfc5bb31544f81d21104eff0e752 100644
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -1,143 +1,103 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="嫌がらせの報告">
-	<texture_picker label="" name="screenshot"/>
-	<check_box label="スクリーンショットを含める" name="screen_check"/>
-	<text name="reporter_title">
-		報告者:
-	</text>
-	<text name="reporter_field">
-		Loremipsum Dolorsitamut
-	</text>
-	<text name="sim_title">
-		地域:
-	</text>
-	<text name="sim_field">
-		地域名
-	</text>
-	<text name="pos_title">
-		位置:
-	</text>
-	<text name="pos_field">
-		{128.1, 128.1, 15.4}
-	</text>
-	<text name="select_object_label">
-		ボタンを使ってオブジェクトを選択:
-	</text>
-	<button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/>
-	<text name="object_name_label">
-		名前:
-	</text>
-	<text name="object_name">
-		Consetetur Sadipscing
-	</text>
-	<text name="owner_name_label">
-		オーナー:
-	</text>
-	<text name="owner_name">
-		Hendrerit Vulputate
-	</text>
-	<combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください">
-		<combo_box.item name="Select_category" label="カテゴリーを選択"
-		/>
-		<combo_box.item name="Age__Age_play" label="年齢>年齢偽証"
-		/>
-		<combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="年齢>成人の住人がTeen Second Life上にいる"
-		/>
-		<combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="年齢>未成年な住人がTeen Second Lifeの外にいる"
-		/>
-		<combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="攻撃>コンバット・サンドボックス/危険なエリア"
-		/>
-		<combo_box.item name="Assault__Safe_area" label="攻撃>安全なエリア"
-		/>
-		<combo_box.item name="Assault__Weapons_testing_sandbox" label="攻撃>武器テスト用サンドボックス"
-		/>
-		<combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="商取引>製品またはサービスの提供が行われない"
-		/>
-		<combo_box.item name="Disclosure__Real_world_information" label="開示>リアルワールドの情報"
-		/>
-		<combo_box.item name="Disclosure__Remotely_monitoring chat" label="開示>離れたところからチャットをモニターしている"
-		/>
-		<combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="開示>Second Lifeの情報/チャット/IM"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="平穏を乱す行為>地域リソースの使用が不公平"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="平穏を乱す行為>スクリプト・オブジェクトの乱用"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Object_littering" label="平穏を乱す行為>オブジェクトの捨て置き"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="平穏を乱す行為>繰り返しスパム"
-		/>
-		<combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="平穏を乱す行為>不要な広告スパム"
-		/>
-		<combo_box.item name="Fraud__L$" label="詐欺> L$"
-		/>
-		<combo_box.item name="Fraud__Land" label="詐欺>土地"
-		/>
-		<combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="詐欺>マルチ商法またはチェーン・メール"
-		/>
-		<combo_box.item name="Fraud__US$" label="詐欺> US$"
-		/>
-		<combo_box.item name="Harassment__Advert_farms___visual_spam" label="嫌がらせ>広告委託/視覚的なスパム"
-		/>
-		<combo_box.item name="Harassment__Defaming_individuals_or_groups" label="嫌がらせ>個人またはグループの中傷"
-		/>
-		<combo_box.item name="Harassment__Impeding_movement" label="嫌がらせ>移動の妨害"
-		/>
-		<combo_box.item name="Harassment__Sexual_harassment" label="嫌がらせ>性的な嫌がらせ"
-		/>
-		<combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動"
-		/>
-		<combo_box.item name="Harassment__Verbal_abuse" label="嫌がらせ>暴言"
-		/>
-		<combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="わいせつ>著しく不快であると見なされるコンテンツまたは行為"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_avatar_name" label="わいせつ>不適切なアバター名"
-		/>
-		<combo_box.item name="Indecency__Mature_content_in_PG_region" label="わいせつ>PG地域での不適切なコンテンツまたは行為"
-		/>
-		<combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="わいせつ>Mature地域での不適切なコンテンツまたは行為"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_Content_Removal" label="知的財産の侵害>コンテンツの撤去"
-		/>
-		<combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="知的財産の侵害>コピーBot及び権限の悪用"
-		/>
-		<combo_box.item name="Intolerance" label="不寛容"
-		/>
-		<combo_box.item name="Land__Abuse_of_sandbox_resources" label="土地>サンドボックス・リソースの乱用"
-		/>
-		<combo_box.item name="Land__Encroachment__Objects_textures" label="土地>不法侵入>オブジェクト/テクスチャー"
-		/>
-		<combo_box.item name="Land__Encroachment__Particles" label="土地>不法侵入>パーティクル"
-		/>
-		<combo_box.item name="Land__Encroachment__Trees_plants" label="土地>不法侵入>樹木/植物"
-		/>
-		<combo_box.item name="Wagering_gambling" label="賭け/ギャンブル"
-		/>
-		<combo_box.item name="Other" label="その他"
-		/>
-	</combo_box>
-	<text name="abuser_name_title">
-		迷惑ユーザーの名前:
-	</text>
-	<button label="住人を選択" label_selected="" name="select_abuser" tool_tip="嫌がらせをした人の名前をリストから選択してください。"/>
-	<check_box label="嫌がらせをした人の名前が不明" name="omit_abuser_name" tool_tip="嫌がらせをした人の名前を提供できないかについて、これを確認"/>
-	<text name="abuser_name_title2">
-		嫌がらせの起きた場所:
-	</text>
-	<text name="sum_title">
-		概要:
-	</text>
-	<text name="dscr_title">
-		詳細:
-	</text>
-	<text name="bug_aviso">
-		日付、場所、嫌がらせの特徴、関連する会話/IMテキス
-トに関し明確に記入し、可能であればオブジェクトを選
-択してください。
-	</text>
-	<text name="incomplete_title">
-		注意:不完全なレポートは調査されません。
-	</text>
-	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
-	<button label="嫌がらせの報告" label_selected="嫌がらせの報告" name="send_btn"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_report_abuse" title="嫌がらせの報告">
+	<floater.string name="Screenshot">
+		スクリーンショット
+	</floater.string>
+	<check_box label="このスクリーンショットを使用" name="screen_check"/>
+	<text name="reporter_title">
+		報告者:
+	</text>
+	<text name="reporter_field">
+		Loremipsum Dolorsitamut
+	</text>
+	<text name="sim_title">
+		地域:
+	</text>
+	<text name="sim_field">
+		地域名
+	</text>
+	<text name="pos_title">
+		位置:
+	</text>
+	<text name="pos_field">
+		{128.1, 128.1, 15.4}
+	</text>
+	<text name="select_object_label">
+		ボタンをクリック。悪意のあるオブジェクト:
+	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/>
+	<text name="object_name_label">
+		オブジェクト:
+	</text>
+	<text name="object_name">
+		Consetetur Sadipscing
+	</text>
+	<text name="owner_name_label">
+		オーナー:
+	</text>
+	<text name="owner_name">
+		Hendrerit Vulputate
+	</text>
+	<combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください">
+		<combo_box.item label="カテゴリーを選択" name="Select_category"/>
+		<combo_box.item label="年齢>年齢偽証" name="Age__Age_play"/>
+		<combo_box.item label="年齢>成人の住人がTeen Second Life上にいる" name="Age__Adult_resident_on_Teen_Second_Life"/>
+		<combo_box.item label="年齢>未成年な住人がTeen Second Lifeの外にいる" name="Age__Underage_resident_outside_of_Teen_Second_Life"/>
+		<combo_box.item label="攻撃>コンバット・サンドボックス/危険なエリア" name="Assault__Combat_sandbox___unsafe_area"/>
+		<combo_box.item label="攻撃>安全なエリア" name="Assault__Safe_area"/>
+		<combo_box.item label="攻撃>武器テスト用サンドボックス" name="Assault__Weapons_testing_sandbox"/>
+		<combo_box.item label="商取引>製品またはサービスの提供が行われない" name="Commerce__Failure_to_deliver_product_or_service"/>
+		<combo_box.item label="開示>リアルワールドの情報" name="Disclosure__Real_world_information"/>
+		<combo_box.item label="開示>離れたところからチャットをモニターしている" name="Disclosure__Remotely_monitoring chat"/>
+		<combo_box.item label="開示>Second Lifeの情報/チャット/IM" name="Disclosure__Second_Life_information_chat_IMs"/>
+		<combo_box.item label="平穏を乱す行為>地域リソースの使用が不公平" name="Disturbing_the_peace__Unfair_use_of_region_resources"/>
+		<combo_box.item label="平穏を乱す行為>スクリプト・オブジェクトの乱用" name="Disturbing_the_peace__Excessive_scripted_objects"/>
+		<combo_box.item label="平穏を乱す行為>オブジェクトの捨て置き" name="Disturbing_the_peace__Object_littering"/>
+		<combo_box.item label="平穏を乱す行為>繰り返しスパム" name="Disturbing_the_peace__Repetitive_spam"/>
+		<combo_box.item label="平穏を乱す行為>不要な広告スパム" name="Disturbing_the_peace__Unwanted_advert_spam"/>
+		<combo_box.item label="詐欺> L$" name="Fraud__L$"/>
+		<combo_box.item label="詐欺>土地" name="Fraud__Land"/>
+		<combo_box.item label="詐欺>マルチ商法またはチェーン・メール" name="Fraud__Pyramid_scheme_or_chain_letter"/>
+		<combo_box.item label="詐欺> US$" name="Fraud__US$"/>
+		<combo_box.item label="嫌がらせ>広告委託/視覚的なスパム" name="Harassment__Advert_farms___visual_spam"/>
+		<combo_box.item label="嫌がらせ>個人またはグループの中傷" name="Harassment__Defaming_individuals_or_groups"/>
+		<combo_box.item label="嫌がらせ>移動の妨害" name="Harassment__Impeding_movement"/>
+		<combo_box.item label="嫌がらせ>性的な嫌がらせ" name="Harassment__Sexual_harassment"/>
+		<combo_box.item label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動" name="Harassment__Solicting_inciting_others_to_violate_ToS"/>
+		<combo_box.item label="嫌がらせ>暴言" name="Harassment__Verbal_abuse"/>
+		<combo_box.item label="わいせつ>著しく不快であると見なされるコンテンツまたは行為" name="Indecency__Broadly_offensive_content_or_conduct"/>
+		<combo_box.item label="わいせつ>不適切なアバター名" name="Indecency__Inappropriate_avatar_name"/>
+		<combo_box.item label="わいせつ>PG地域での不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="わいせつ>Mature地域での不適切なコンテンツまたは行為" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="知的財産の侵害>コンテンツの撤去" name="Intellectual_property_infringement_Content_Removal"/>
+		<combo_box.item label="知的財産の侵害>コピーBot及び権限の悪用" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
+		<combo_box.item label="不寛容" name="Intolerance"/>
+		<combo_box.item label="土地>サンドボックス・リソースの乱用" name="Land__Abuse_of_sandbox_resources"/>
+		<combo_box.item label="土地>不法侵入>オブジェクト/テクスチャー" name="Land__Encroachment__Objects_textures"/>
+		<combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/>
+		<combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/>
+		<combo_box.item label="賭け/ギャンブル" name="Wagering_gambling"/>
+		<combo_box.item label="その他" name="Other"/>
+	</combo_box>
+	<text name="abuser_name_title">
+		迷惑ユーザーの名前:
+	</text>
+	<button label="選択" label_selected="" name="select_abuser" tool_tip="嫌がらせをした人の名前をリストから選択してください。"/>
+	<text name="abuser_name_title2">
+		嫌がらせの起きた場所:
+	</text>
+	<text name="sum_title">
+		概要:
+	</text>
+	<text name="dscr_title">
+		詳細:
+	</text>
+	<text name="bug_aviso">
+		できるだけ具体的にお願いします。
+	</text>
+	<text name="incomplete_title">
+		注意:不完全なレポートは調査されません。
+	</text>
+	<button label="嫌がらせの報告" label_selected="嫌がらせの報告" name="send_btn"/>
+	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug.xml b/indra/newview/skins/default/xui/ja/floater_script_debug.xml
index dd934e3592fb60ecda8db4e663c4c8f4fee8601d..0ac7a988e04839a7e32b6cc80065c5f8402ca873 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="スクリプト警告/エラー">
 	<tab_container name="Preview Tabs">
-		<floater label="スクリプト" name="all_scripts" title="[All scripts]" />
+		<floater label="スクリプト" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc805e879b8f9d1abe82601c3a784f0f8cf19a0f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="script" short_title="[All scripts]" title="[All scripts]"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml
index ef729e0f6fd31a7a368123772502def548e9af36..583a2f8b91adb822601cde4d971c3f43a5508899 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_preview.xml
@@ -1,6 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="スクリプト:回転スクリプト">
-	<text name="desc txt">
-		説明:
-	</text>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview lsl text" title="スクリプト:回転スクリプト">
+	<floater.string name="Title">
+		スクリプト: [NAME]
+	</floater.string>
+	<text name="desc txt">
+		説明:
+	</text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_script_queue.xml b/indra/newview/skins/default/xui/ja/floater_script_queue.xml
index 7c4979a033684a686277f0c5de649646f45b6ef7..5e059b91caa192feb762fef36ed13cbfd7378166 100644
--- a/indra/newview/skins/default/xui/ja/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/ja/floater_script_queue.xml
@@ -1,4 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="進捗のリセット">
-	<button label="閉じる" label_selected="閉じる" name="close" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="queue" title="進捗のリセット">
+	<floater.string name="Starting">
+		[COUNT] アイテムの [START] を開始します。
+	</floater.string>
+	<floater.string name="Done">
+		完了。
+	</floater.string>
+	<floater.string name="Resetting">
+		リセット中
+	</floater.string>
+	<floater.string name="Running">
+		実行中
+	</floater.string>
+	<floater.string name="NotRunning">
+		実行されていません
+	</floater.string>
+	<button label="閉じる" label_selected="閉じる" name="close"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml
index 5193e5bba186ebd9f913af1ee1864b9ffde0cb3d..f373a7215e029a3574acd39473c1f72e2eb528ed 100644
--- a/indra/newview/skins/default/xui/ja/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_sell_land.xml
@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="土地を販売" height="496" min_height="496" >
-    <scroll_container name="profile_scroll">
-    <panel name="scroll_content_panel">
-	<text name="info_parcel_label">
-		区画:
-	</text>
-	<text name="info_parcel">
-		区画名
-	</text>
-	<text name="info_size_label">
-		サイズ:
-	</text>
-	<text name="info_size">
-		[AREA]平方メートル
-	</text>
-	<text name="info_action" bottom_delta="-57">
-		この区画を販売す
-るには:
-	</text>
-	<icon bottom_delta="-86" name="step_price" />
-	<text name="price_label">
-		価格を設定:
-	</text>
-	<text name="price_text">
-		この土地に対する適切な価格を選択してください
-	</text>
-	<text name="price_ld">
-		L$
-	</text>
-	<text name="price_per_m" width="230" left_delta="106">
-		(1平方メートル当たりL$ [PER_METER])
-	</text>
-	<text name="sell_to_label">
-		土地の販売先:
-	</text>
-	<text name="sell_to_text" right="-6">
-		誰にでも販売するか、特定の人にのみ販売するかを選択してください
-	</text>
-	<combo_box name="sell_to">
-		<combo_box.item name="--selectone--" label="1つ選択--" />
-		<combo_box.item name="Anyone" label="誰でも" />
-		<combo_box.item name="Specificuser:" label="特定ユーザー:" />
-	</combo_box>
-	<button label="選択..." name="sell_to_select_agent" />
-	<text name="sell_objects_label">
-		土地と共にオブジェクトを販売しますか?
-	</text>
-	<text name="sell_objects_text">
-		区画上にある譲渡可能なオブジェクトは所有権が変更されます
-	</text>
-	<radio_group name="sell_objects" height="72" bottom_delta="-76">
-		<radio_item name="no">
-			いいえ、オブジェクト所有権
-を保持します
-		</radio_item>
-		<radio_item name="yes" bottom="-56">
-			はい、土地と一緒にオブジェ
-クトを売ります
-		</radio_item>
-	</radio_group>
-	<button label="オブジェクトを表示" name="show_objects" width="138"/>
-	<text name="nag_message_label">
-		注意:返品や交換はできません
-	</text>
-	<button label="販売を決定" name="sell_btn" bottom="-489"/>
-	<button label="取り消し" name="cancel_btn" />
-    </panel>
-    </scroll_container>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater height="496" min_height="496" name="sell land" title="土地を販売">
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="info_parcel_label">
+				区画:
+			</text>
+			<text name="info_parcel">
+				区画名
+			</text>
+			<text name="info_size_label">
+				サイズ:
+			</text>
+			<text name="info_size">
+				[AREA]平方メートル
+			</text>
+			<text bottom_delta="-57" name="info_action">
+				この区画を販売す
+るには:
+			</text>
+			<icon bottom_delta="-86" name="step_price"/>
+			<text name="price_label">
+				価格を設定:
+			</text>
+			<text name="price_text">
+				適正価格を選んでください。
+			</text>
+			<text name="price_ld">
+				L$
+			</text>
+			<text left_delta="106" name="price_per_m" width="230">
+				(1平方メートル当たりL$ [PER_METER])
+			</text>
+			<text name="sell_to_label">
+				土地の販売先:
+			</text>
+			<text name="sell_to_text" right="-6">
+				誰にでも販売するか、特定の人にのみ販売するかを選択してください
+			</text>
+			<combo_box name="sell_to">
+				<combo_box.item label="1つ選択--" name="--selectone--"/>
+				<combo_box.item label="誰でも" name="Anyone"/>
+				<combo_box.item label="特定の人:" name="Specificuser:"/>
+			</combo_box>
+			<button label="選択..." name="sell_to_select_agent"/>
+			<text name="sell_objects_label">
+				土地と共にオブジェクトを販売しますか?
+			</text>
+			<text name="sell_objects_text">
+				区画上にある譲渡可能なオブジェクトは所有権が変更されます
+			</text>
+			<radio_group bottom_delta="-76" height="72" name="sell_objects">
+				<radio_item name="no">
+					いいえ、オブジェクト所有権
+を保持します
+				</radio_item>
+				<radio_item bottom="-56" name="yes">
+					はい、土地と一緒にオブジェ
+クトを売ります
+				</radio_item>
+			</radio_group>
+			<button label="オブジェクトを表示" name="show_objects" width="138"/>
+			<text name="nag_message_label">
+				注意:返品や交換はできません
+			</text>
+			<button bottom="-489" label="販売を決定" name="sell_btn"/>
+			<button label="取り消し" name="cancel_btn"/>
+		</panel>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
index 133a8ce2cd38c0e5c8c8b5990a9bb11d192ac1be..6ad4976b1c3665800380c3f575799349015998ab 100644
--- a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="settings_debug" title="デバッグ設定">
-	<combo_box name="boolean_combo">
-		<combo_box.item name="TRUE" label="æ­£" />
-		<combo_box.item name="FALSE" label="誤" />
-	</combo_box>
-	<color_swatch label="色" name="color_swatch" />
-	<spinner label="x" name="val_spinner_1" />
-	<spinner label="x" name="val_spinner_2" />
-	<spinner label="x" name="val_spinner_3" />
-	<spinner label="x" name="val_spinner_4" />
-	<button label="デフォルトにリセット" name="default_btn" />
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="settings_debug" title="デバッグ設定">
+	<combo_box name="boolean_combo">
+		<combo_box.item label="TRUE" name="TRUE"/>
+		<combo_box.item label="FALSE" name="FALSE"/>
+	</combo_box>
+	<color_swatch label="色" name="val_color_swatch"/>
+	<spinner label="x" name="val_spinner_1"/>
+	<spinner label="x" name="val_spinner_2"/>
+	<spinner label="x" name="val_spinner_3"/>
+	<spinner label="x" name="val_spinner_4"/>
+	<button label="デフォルトにリセット" name="default_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
index b24791438992c83aabd64c66ac84eea92fa7cf5d..d5109fe539c48521f3f792a8ca07fbd40f3310fd 100644
--- a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		名前:
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml
new file mode 100644
index 0000000000000000000000000000000000000000..698beccb071afda917ca444bcb7de287608e843a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_stats.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Statistics" title="統計バー">
+	<scroll_container name="statistics_scroll">
+		<container_view name="statistics_view">
+			<stat_view label="ベーシック" name="basic">
+				<stat_bar label="FPS" name="fps"/>
+				<stat_bar label="帯域幅" name="bandwidth"/>
+				<stat_bar label="パケットロス" name="packet_loss"/>
+				<stat_bar label="シムの Ping" name="ping"/>
+			</stat_view>
+			<stat_view label="詳細" name="advanced">
+				<stat_view label="レンダリング" name="render">
+					<stat_bar label="KTris の描画" name="ktrisframe"/>
+					<stat_bar label="KTris の描画" name="ktrissec"/>
+					<stat_bar label="オブジェクト合計" name="objs"/>
+					<stat_bar label="新しいオブジェクト" name="newobjs"/>
+				</stat_view>
+				<stat_view label="テクスチャ" name="texture">
+					<stat_bar label="カウント" name="numimagesstat"/>
+					<stat_bar label="未処理のカウント" name="numrawimagesstat"/>
+					<stat_bar label="GL メモリ" name="gltexmemstat"/>
+					<stat_bar label="フォーマット済メモリ" name="formattedmemstat"/>
+					<stat_bar label="未処理のメモリ" name="rawmemstat"/>
+					<stat_bar label="統合メモリ" name="glboundmemstat"/>
+				</stat_view>
+				<stat_view label="ネットワーク" name="network">
+					<stat_bar label="パケットイン" name="packetsinstat"/>
+					<stat_bar label="パケットアウト" name="packetsoutstat"/>
+					<stat_bar label="オブジェクト" name="objectkbitstat"/>
+					<stat_bar label="テクスチャ" name="texturekbitstat"/>
+					<stat_bar label="アセット" name="assetkbitstat"/>
+					<stat_bar label="レイヤー" name="layerskbitstat"/>
+					<stat_bar label="実際の受信" name="actualinkbitstat"/>
+					<stat_bar label="実際の送信" name="actualoutkbitstat"/>
+					<stat_bar label="VFS 保留中の操作" name="vfspendingoperations"/>
+				</stat_view>
+			</stat_view>
+			<stat_view label="シミュレーター" name="sim">
+				<stat_bar label="時間の遅れ" name="simtimedilation"/>
+				<stat_bar label="シム FPS" name="simfps"/>
+				<stat_bar label="物理的作用 FPS" name="simphysicsfps"/>
+				<stat_view label="物理的作用の詳細" name="physicsdetail">
+					<stat_bar label="ピン留めオブジェクト" name="physicspinnedtasks"/>
+					<stat_bar label="低 LOD オブジェクト" name="physicslodtasks"/>
+					<stat_bar label="メモリ配分" name="physicsmemoryallocated"/>
+					<stat_bar label="エージェントの更新/秒" name="simagentups"/>
+					<stat_bar label="メインエージェント" name="simmainagents"/>
+					<stat_bar label="チャイルドエージェント" name="simchildagents"/>
+					<stat_bar label="オブジェクト" name="simobjects"/>
+					<stat_bar label="アクティブなオブジェクト" name="simactiveobjects"/>
+					<stat_bar label="アクティブなスクリプト" name="simactivescripts"/>
+					<stat_bar label="スクリプトイベント" name="simscripteps"/>
+					<stat_bar label="パケットイン" name="siminpps"/>
+					<stat_bar label="パケットアウト" name="simoutpps"/>
+					<stat_bar label="保留中のダウンロード" name="simpendingdownloads"/>
+					<stat_bar label="保留中のアップロード" name="simpendinguploads"/>
+					<stat_bar label="未送信バイト合計" name="simtotalunackedbytes"/>
+				</stat_view>
+				<stat_view label="時間(ms)" name="simperf">
+					<stat_bar label="フレーム時間合計" name="simframemsec"/>
+					<stat_bar label="総時間数" name="simnetmsec"/>
+					<stat_bar label="物理的作用時間" name="simsimphysicsmsec"/>
+					<stat_bar label="シミュレーション時間" name="simsimothermsec"/>
+					<stat_bar label="エージェント時間" name="simagentmsec"/>
+					<stat_bar label="イメージ時間" name="simimagesmsec"/>
+					<stat_bar label="スクリプト時間" name="simscriptmsec"/>
+				</stat_view>
+			</stat_view>
+		</container_view>
+	</scroll_container>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 5840773dbdd45af72f9354f9c24e10088a58ae5a..880f42840cfd03b647687556b255fc9a8a32f59c 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -1,511 +1,477 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="制作">
-	<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
-	<button label="" label_selected="" name="button move" tool_tip="動かす"/>
-	<button label="" label_selected="" name="button edit" tool_tip="編集"/>
-	<button label="" label_selected="" name="button create" tool_tip="作成"/>
-	<button label="" label_selected="" name="button land" tool_tip="土地"/>
-	<radio_group name="focus_radio_group">
-		<radio_item label="ズーム" name="radio zoom"/>
-		<radio_item label="軌跡(Ctrl)" name="radio orbit"/>
-		<radio_item label="パン(Ctrl+Shift)" name="radio pan"/>
-	</radio_group>
-	<radio_group name="move_radio_group">
-		<radio_item label="移動" name="radio move"/>
-		<radio_item label="持ち上げる(Ctrl)" name="radio lift"/>
-		<radio_item label="スピン(Ctrl+Shift)" name="radio spin"/>
-	</radio_group>
-	<radio_group name="edit_radio_group">
-		<radio_item label="位置" name="radio position"/>
-		<radio_item label="回転(Ctrl)" name="radio rotate"/>
-		<radio_item label="引伸ばす(Ctrl+Shift)" name="radio stretch"/>
-		<radio_item label="テクスチャーを選択" name="radio select face"/>
-	</radio_group>
-	<check_box label="リンク部位を編集" name="checkbox edit linked parts"/>
-	<text name="text ruler mode" width="88">
-		ルーラー:
-	</text>
-	<combo_box left_delta="60" name="combobox grid mode" width="76">
-		<combo_box.item name="World" label="世界"/>
-		<combo_box.item name="Local" label="ローカル"/>
-		<combo_box.item name="Reference" label="リファレンス"/>
-	</combo_box>
-	<check_box label="両側を引伸ばす" left="116" name="checkbox uniform"/>
-	<check_box label="テクスチャーを引伸ばす" name="checkbox stretch textures"/>
-	<check_box label="グリッド使用" left_delta="27" name="checkbox snap to grid"/>
-	<button label="オプション" label_selected="オプション" name="Options..."/>
-	<text name="text status">
-		移動するにはドラッグ、コピーするにはShiftキーを押しながらドラッグ
-	</text>
-	<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
-	<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
-	<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
-	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="4面体"/>
-	<button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/>
-	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="半円柱"/>
-	<button label="" label_selected="" name="ToolCone" tool_tip="円錐"/>
-	<button label="" label_selected="" name="ToolHemiCone" tool_tip="半円錐"/>
-	<button label="" label_selected="" name="ToolSphere" tool_tip="球形"/>
-	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="半球"/>
-	<button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/>
-	<button label="" label_selected="" name="ToolTube" tool_tip="チューブ"/>
-	<button label="" label_selected="" name="ToolRing" tool_tip="リング"/>
-	<button label="" label_selected="" name="ToolTree" tool_tip="樹木"/>
-	<button label="" label_selected="" name="ToolGrass" tool_tip="草地"/>
-	<check_box label="選択したものを保持" name="checkbox sticky"/>
-	<check_box label="選択したものをコピー" name="checkbox copy selection"/>
-	<check_box label="中央に位置" name="checkbox copy centers"/>
-	<check_box label="回転" name="checkbox copy rotates"/>
-	<radio_group name="land_radio_group">
-		<radio_item label="土地を選択" name="radio select land"/>
-		<radio_item label="ならす" name="radio flatten"/>
-		<radio_item label="隆起" name="radio raise"/>
-		<radio_item label="低くする" name="radio lower"/>
-		<radio_item label="滑らかにする" name="radio smooth"/>
-		<radio_item label="凸凹にする" name="radio noise"/>
-		<radio_item label="元に戻す" name="radio revert"/>
-	</radio_group>
-	<button label="適用" label_selected="適用" name="button apply to selection" tool_tip="選択した土地を修正"/>
-	<text name="Bulldozer:">
-		ブルドーザー:
-	</text>
-	<text name="Dozer Size:">
-		サイズ
-	</text>
-	<text name="Strength:">
-		強度
-	</text>
-	<text name="obj_count">
-		選択済オブジェクト:[COUNT]
-	</text>
-	<text name="prim_count">
-		プリム:[COUNT]
-	</text>
-	<tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30">
-		<panel label="一般" name="General">
-			<text name="Name:">
-				名前:
-			</text>
-			<text name="Description:">
-				説明:
-			</text>
-			<text name="Creator:">
-				クリエーター
-			</text>
-			<text name="Creator Name">
-				Thrax Linden
-			</text>
-			<button label="情報..." label_selected="情報..." name="button creator profile"/>
-			<text name="Owner:">
-				オーナー:
-			</text>
-			<text name="Owner Name">
-				Thrax Linden
-			</text>
-			<button label="情報..." label_selected="情報..." name="button owner profile"/>
-			<text name="Group:">
-				グループ:
-			</text>
-			<text name="Group Name Proxy">
-				Linden家
-			</text>
-			<button label="設定..." label_selected="設定..." name="button set group"/>
-			<text name="Permissions:">
-				権限
-			</text>
-
-			<check_box label="グループで共同管理" name="checkbox share with group" tool_tip="設定したグループに属するすべてのメンバーとこのオブジェクトの権限を共有します。 役割制限を有効にするには、譲渡する必要があります。"/>
-			<string name="text deed continued">
-				譲渡...
-			</string>
-			<string name="text deed">
-				譲渡
-			</string>
-			<button label="譲渡..." label_selected="譲渡..." name="button deed" tool_tip="グループ共有のオブジェクトは、グループ・オフィサーにより譲渡可能です。"/>
-			<check_box label="誰に対しても移動を許可" name="checkbox allow everyone move"/>
-			<check_box label="誰に対してもコピーを許可" name="checkbox allow everyone copy"/>
-			<check_box label="検索に表示" name="search_check" tool_tip="検索結果で、このオブジェクトを人に見せる"/>
-			<check_box label="売り出し中" name="checkbox for sale"/>
-			<text name="Cost">
-				価格:  L$
-			</text>
-			<combo_box name="sale type">
-				<combo_box.item label="コピー"  name="Copy"/>
-				<combo_box.item label="コンテンツ" name="Contents"/>
-				<combo_box.item label="オリジナル" name="Original"/>
-			</combo_box>
-
-			<text name="label click action">
-				左クリックすると:
-			</text>
-			<combo_box name="clickaction">
-				<combo_box.item name="Touch/grab(default)" label="触る/つかむ (デフォルト)"/>
-				<combo_box.item name="Sitonobject" label="オブジェクトに座る"/>
-				<combo_box.item name="Buyobject" label="オブジェクトを購入"/>
-				<combo_box.item name="Payobject" label="オブジェクトへの支払い"/>
-				<combo_box.item name="Open" label="開く"/>
-				<combo_box.item name="Play" label="区画メディアを再生"/>
-				<combo_box.item name="Opemmedia" label="区画メディアを開く"/>
-			</combo_box>
-		<panel name="perms_build">
-			<text name="perm_modify">
-				このオブジェクトは修正できます。
-			</text>
-			<text name="B:">
-				B:
-			</text>
-			<text name="O:">
-				O:
-			</text>
-			<text name="G:">
-				G:
-			</text>
-			<text name="E:">
-				E:
-			</text>
-			<text name="N:">
-				N:
-			</text>
-			<text name="F:">
-				F:
-			</text>
-			<text name="Next owner can:">
-				次のオーナーが実行できる操作:
-			</text>
-			<check_box label="修正" name="checkbox next owner can modify"/>
-			<check_box label="コピー" name="checkbox next owner can copy"/>
-			<check_box name="checkbox next owner can transfer"/>
-		</panel>
-			<string name="text modify info 1">
-				このオブジェクトは修正できます。
-			</string>
-			<string name="text modify info 2">
-				これらのオブジェクトは修正できます。
-			</string>
-			<string name="text modify info 3">
-				このオブジェクトは修正できません。
-			</string>
-			<string name="text modify info 4">
-				これらのオブジェクトは修正できません。
-			</string>
-			<string name="text modify warning">
-				権限を設定するには、オブジェクト全体を選択する必要があります。
-			</string>
-			<string name="Cost Default">
-				価格: L$
-			</string>
-			<string name="Cost Total">
-				合計価格: L$
-			</string>
-			<string name="Cost Per Unit">
-				単価: L$
-			</string>
-			<string name="Cost Mixed">
-				混合価格
-			</string>
-			<string name="Sale Mixed">
-				混合販売
-			</string>
-		</panel>
-		<panel label="形状" name="Object">
-			<text name="select_single">
-				プリムを1つだけ選択して編集してください
-			</text>
-			<text name="edit_object">
-				オブジェクトのパラメーターを編集:
-			</text>
-			<check_box label="ロック済み" name="checkbox locked" tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。"/>
-			<check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にする"/>
-			<check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="作成1分後にオブジェクトを削除"/>
-			<check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避"/>
-			<text name="label position">
-				位置(メートル)
-			</text>
-			<spinner label="X" name="Pos X"/>
-			<spinner label="Y" name="Pos Y"/>
-			<spinner label="Z" name="Pos Z"/>
-			<text name="label size">
-				サイズ(メートル)
-			</text>
-			<spinner label="X" name="Scale X"/>
-			<spinner label="Y" name="Scale Y"/>
-			<spinner label="Z" name="Scale Z"/>
-			<text name="label rotation">
-				回転(度)
-			</text>
-			<spinner label="X" name="Rot X"/>
-			<spinner label="Y" name="Rot Y"/>
-			<spinner label="Z" name="Rot Z"/>
-			<text name="label material">
-				素材
-			</text>
-			<combo_box name="material">
-				<combo_box.item name="Stone" label="石材"/>
-				<combo_box.item name="Metal" label="金属"/>
-				<combo_box.item name="Glass" label="ガラス"/>
-				<combo_box.item name="Wood" label="木材"/>
-				<combo_box.item name="Flesh" label="肌"/>
-				<combo_box.item name="Plastic" label="プラスチック"/>
-				<combo_box.item name="Rubber" label="ゴム"/>
-			</combo_box>
-			<text name="label basetype">
-				建造物ブロック・タイプ
-			</text>
-			<combo_box name="comboBaseType">
-				<combo_box.item name="Box" label="ボックス"/>
-				<combo_box.item name="Cylinder" label="シリンダー"/>
-				<combo_box.item name="Prism" label="プリズム"/>
-				<combo_box.item name="Sphere" label="球形"/>
-				<combo_box.item name="Torus" label="トーラス"/>
-				<combo_box.item name="Tube" label="チューブ"/>
-				<combo_box.item name="Ring" label="リング"/>
-				<combo_box.item name="Sculpted" label="スカルプト"/>
-			</combo_box>
-			<text name="text cut">
-				パス・カットの始点と終点
-			</text>
-			<spinner label="B" name="cut begin"/>
-			<spinner label="E" name="cut end"/>
-			<text name="text hollow">
-				中空(空洞)
-			</text>
-			<text name="text skew">
-				傾斜
-			</text>
-			<text name="Hollow Shape">
-				中空(空洞)の形
-			</text>
-			<combo_box name="hole">
-				<combo_box.item name="Default" label="デフォルト"/>
-				<combo_box.item name="Circle" label="サークル"/>
-				<combo_box.item name="Square" label="正方形"/>
-				<combo_box.item name="Triangle" label="三角形"/>
-			</combo_box>
-			<text name="text twist">
-				ひねりの始まりと終わり
-			</text>
-			<spinner label="B" name="Twist Begin"/>
-			<spinner label="E" name="Twist End"/>
-			<text name="scale_taper">
-				テーパー
-			</text>
-			<text name="scale_hole">
-				穴寸法
-			</text>
-			<spinner label="X" name="Taper Scale X"/>
-			<spinner label="Y" name="Taper Scale Y"/>
-			<text name="text topshear">
-				上部層
-			</text>
-			<spinner label="X" name="Shear X"/>
-			<spinner label="Y" name="Shear Y"/>
-			<text name="advanced_cut">
-				プロフィール・カットの始点と終点
-			</text>
-			<text name="advanced_dimple">
-				くぼみの始点と終点
-			</text>
-			<text name="advanced_slice">
-				切り取りの始点と終点
-			</text>
-			<spinner label="B" name="Path Limit Begin"/>
-			<spinner label="E" name="Path Limit End"/>
-			<text name="text taper2">
-				テーパー
-			</text>
-			<spinner label="X" name="Taper X"/>
-			<spinner label="Y" name="Taper Y"/>
-			<text name="text radius delta">
-				半径
-			</text>
-			<text name="text revolutions">
-				回転体
-			</text>
-			<texture_picker label="スカルプトテクスチャー" name="sculpt texture control" tool_tip="クリックして写真を選択してください。"/>
-			<check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトされたプリムをX軸上で反転"/>
-			<check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトされたプリムのノーマルを逆転させ、裏返しに表示"/>
-			<text name="label sculpt type">
-				縫い目のタイプ
-			</text>
-			<combo_box name="sculpt type control">
-				<combo_box.item name="None" label="(なし)"/>
-				<combo_box.item name="Sphere" label="球形"/>
-				<combo_box.item name="Torus" label="トーラス"/>
-				<combo_box.item name="Plane" label="平面"/>
-				<combo_box.item name="Cylinder" label="シリンダー"/>
-			</combo_box>
-		</panel>
-		<panel label="特徴" name="Features">
-			<text name="select_single">
-				プリムを1つだけ選択して編集してください
-			</text>
-			<text name="edit_object">
-				オブジェクトの特徴を編集:
-			</text>
-			<check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸を中心とするオブジェクトの折れ曲がりを有効にする (クライアント側のみ)"/>
-			<spinner label="柔軟性" name="FlexNumSections" width="135" label_width="72"/>
-			<spinner label="重力" name="FlexGravity" width="135" label_width="72"/>
-			<spinner label="ドラッグ" name="FlexFriction" width="135" label_width="72"/>
-			<spinner label="風" name="FlexWind" width="135" label_width="72"/>
-			<spinner label="ç·Šå¼µ" name="FlexTension" width="135" label_width="72"/>
-			<spinner label="X軸方向の力" name="FlexForceX" width="135" label_width="72"/>
-			<spinner label="Y軸方向の力" name="FlexForceY" width="135" label_width="72"/>
-			<spinner label="Z軸方向の力" name="FlexForceZ" width="135" label_width="72"/>
-			<check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光"/>
-			<text name="label color">
-				色
-			</text>
-			<color_swatch label="" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く" left_delta="74"/>
-			<spinner label="輝度" name="Light Intensity" width="135" label_width="72"/>
-			<spinner label="半径" name="Light Radius" width="135" label_width="72"/>
-			<spinner label="弱まる" name="Light Falloff" width="135" label_width="72"/>
-		</panel>
-		<panel label="材質" name="Texture">
-			<texture_picker label="テクスチャー" name="texture control" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
-			<text name="color trans">
-				透過度 %
-			</text>
-			<text name="glow label">
-				グロー
-			</text>
-			<check_box label="明るさ全開" name="checkbox fullbright"/>
-			<text name="tex gen">
-				マッピング
-			</text>
-			<combo_box name="combobox texgen">
-				<combo_box.item name="Default" label="デフォルト"/>
-				<combo_box.item name="Planar" label="平面"/>
-			</combo_box>
-			<text name="label shininess">
-				輝き
-			</text>
-			<combo_box name="combobox shininess">
-				<combo_box.item name="None" label="なし"/>
-				<combo_box.item name="Low" label="低"/>
-				<combo_box.item name="Medium" label="中"/>
-				<combo_box.item name="High" label="高"/>
-			</combo_box>
-			<text name="label bumpiness">
-				凹凸
-			</text>
-			<combo_box name="combobox bumpiness">
-				<combo_box.item name="None" label="なし"/>
-				<combo_box.item name="Brightness" label="明るさ"/>
-				<combo_box.item name="Darkness" label="暗さ"/>
-				<combo_box.item name="woodgrain" label="木目調"/>
-				<combo_box.item name="bark" label="木の皮"/>
-				<combo_box.item name="bricks" label="レンガ"/>
-				<combo_box.item name="checker" label="チェッカー"/>
-				<combo_box.item name="concrete" label="コンクリート"/>
-				<combo_box.item name="crustytile" label="クラスティ・タイル"/>
-				<combo_box.item name="cutstone" label="カットストーン"/>
-				<combo_box.item name="discs" label="ディスク"/>
-				<combo_box.item name="gravel" label="砂利"/>
-				<combo_box.item name="petridish" label="ペトリ"/>
-				<combo_box.item name="siding" label="羽目板"/>
-				<combo_box.item name="stonetile" label="ストーン・タイル"/>
-				<combo_box.item name="stucco" label="しっくい"/>
-				<combo_box.item name="suction" label="吸い込み"/>
-				<combo_box.item name="weave" label="織目"/>
-			</combo_box>
-			<text name="tex scale">
-				面ごとに繰り返す
-			</text>
-			<spinner label="水平(U)" name="TexScaleU"/>
-			<check_box label="反転" name="checkbox flip s"/>
-			<spinner label="垂直(V)" name="TexScaleV"/>
-			<check_box label="反転" name="checkbox flip t"/>
-			<text name="tex rotate">
-				回転(度)
-			</text>
-			<string name="string repeats per meter">
-				メートルごとに繰返す
-			</string>
-			<string name="string repeats per face">
-				面ごとに繰り返す
-			</string>
-			<text name="rpt">
-				メートルごとに繰返す
-			</text>
-			<button label="適用" label_selected="適用" name="button apply"/>
-			<text name="tex offset">
-				ずれ
-			</text>
-			<spinner label="水平(U)" name="TexOffsetU"/>
-			<spinner label="垂直(V)" name="TexOffsetV"/>
-			<text name="textbox autofix" width="190">
-				メディア・テクスチャーを揃える
-(最初にロードすること)
-			</text>
-			<button bottom="-365" label="揃える" label_selected="揃える" left="155" name="button align"/>
-		</panel>
-		<panel label="中身" name="Contents">
-			<button label="新しいスクリプト" label_selected="新しいスクリプト" name="button new script" width="120"/>
-			<button label="権限" name="button permissions" left_delta="130" width="80"/>
-		</panel>
-	</tab_container>
-	<panel name="land info panel">
-		<text name="label_parcel_info">
-			区画情報
-		</text>
-		<text name="label_area_price" width="200">
-			価格:[AREA]平方メートルあたりL$[PRICE]
-		</text>
-		<text name="label_area" width="200">
-			面積:[AREA]平方メートル
-		</text>
-		<button label="土地情報..." label_selected="土地情報..." name="button about land"/>
-		<check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別に区画を色分けします: &#10;&#10;緑 = あなたの土地 &#10;アクア = あなたのグループ所有地 &#10;赤 = 他人が所有する土地 &#10;黄色 = 売り出し中 &#10;紫 = オークション &#10;グレー = パブリック"/>
-		<button label="?" label_selected="?" name="button show owners help" left_delta="114"/>
-		<text name="label_parcel_modify">
-			区画の編集
-		</text>
-		<button label="再分割" label_selected="再分割" name="button subdivide land"/>
-		<button label="統合する" label_selected="統合する" name="button join land"/>
-		<text name="label_parcel_trans">
-			土地取引
-		</text>
-		<button label="土地を購入" label_selected="土地を購入" name="button buy land"/>
-		<button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/>
-	</panel>
-	<floater.string name="status_rotate">
-		色の付いたバンドをドラッグしてオブジェクトを回転
-	</floater.string>
-	<floater.string name="status_scale">
-		選択した側をクリックし、ドラッグして引き伸ばす
-	</floater.string>
-	<floater.string name="status_move">
-		移動:ドラッグ、コピー:Shiftを押しながらドラッグ
-	</floater.string>
-	<floater.string name="status_modifyland">
-		土地をクリックし、ボタンを押したまま入力して修正変更
-	</floater.string>
-	<floater.string name="status_camera">
-		クリックしドラッグして視界を調整
-	</floater.string>
-	<floater.string name="status_grab">
-		移動:ドラッグ、持ち上げ:Ctrl、回転:Ctrl+Shift
-	</floater.string>
-	<floater.string name="status_place">
-		インワールドでクリックして作成
-	</floater.string>
-	<floater.string name="status_selectland">
-		土地をクリックし、ドラッグして選択
-	</floater.string>
-	<floater.string name="grid_screen_text">
-		画面
-	</floater.string>
-	<floater.string name="grid_local_text">
-		ローカル
-	</floater.string>
-	<floater.string name="grid_world_text">
-		世界
-	</floater.string>
-	<floater.string name="grid_reference_text">
-		参照
-	</floater.string>
-	<floater.string name="grid_attachment_text">
-		アタッチメント
-	</floater.string>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="toolbox floater" short_title="制作ツール" title="">
+	<floater.string name="status_rotate">
+		色の付いたバンドをドラッグしてオブジェクトを回転
+	</floater.string>
+	<floater.string name="status_scale">
+		選択した側をクリックし、ドラッグして引き伸ばす
+	</floater.string>
+	<floater.string name="status_move">
+		移動:ドラッグ、コピー:Shiftを押しながらドラッグ
+	</floater.string>
+	<floater.string name="status_modifyland">
+		土地をクリックし、ボタンを押したまま入力して修正変更
+	</floater.string>
+	<floater.string name="status_camera">
+		クリック・ドラッグで視界を移動
+	</floater.string>
+	<floater.string name="status_grab">
+		移動:ドラッグ、持ち上げ:Ctrl、回転:Ctrl+Shift
+	</floater.string>
+	<floater.string name="status_place">
+		インワールドでクリックして作成
+	</floater.string>
+	<floater.string name="status_selectland">
+		土地をクリックし、ドラッグして選択
+	</floater.string>
+	<floater.string name="grid_screen_text">
+		画面
+	</floater.string>
+	<floater.string name="grid_local_text">
+		ローカル
+	</floater.string>
+	<floater.string name="grid_world_text">
+		世界
+	</floater.string>
+	<floater.string name="grid_reference_text">
+		参照
+	</floater.string>
+	<floater.string name="grid_attachment_text">
+		アタッチメント
+	</floater.string>
+	<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
+	<button label="" label_selected="" name="button move" tool_tip="動かす"/>
+	<button label="" label_selected="" name="button edit" tool_tip="編集"/>
+	<button label="" label_selected="" name="button create" tool_tip="作成"/>
+	<button label="" label_selected="" name="button land" tool_tip="土地"/>
+	<text name="text status">
+		移動するにはドラッグ、コピーするにはShiftキーを押しながらドラッグ
+	</text>
+	<radio_group name="focus_radio_group">
+		<radio_item label="ズーム" name="radio zoom"/>
+		<radio_item label="軌跡(Ctrl)" name="radio orbit"/>
+		<radio_item label="パン(Ctrl+Shift)" name="radio pan"/>
+	</radio_group>
+	<radio_group name="move_radio_group">
+		<radio_item label="移動" name="radio move"/>
+		<radio_item label="持ち上げる(Ctrl)" name="radio lift"/>
+		<radio_item label="スピン(Ctrl+Shift)" name="radio spin"/>
+	</radio_group>
+	<radio_group name="edit_radio_group">
+		<radio_item label="移動" name="radio position"/>
+		<radio_item label="回転(Ctrl)" name="radio rotate"/>
+		<radio_item label="引伸ばす(Ctrl+Shift)" name="radio stretch"/>
+		<radio_item label="テクスチャーを選択" name="radio select face"/>
+	</radio_group>
+	<check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
+	<check_box label="両側を引伸ばす" left="116" name="checkbox uniform"/>
+	<check_box initial_value="true" label="テクスチャーを引伸ばす" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="グリッドポイントにスナップ" left_delta="27" name="checkbox snap to grid"/>
+	<combo_box left_delta="60" name="combobox grid mode" width="76">
+		<combo_box.item label="ワールドルーラ" name="World"/>
+		<combo_box.item label="ローカルルーラ" name="Local"/>
+		<combo_box.item label="レファレンスルーラ" name="Reference"/>
+	</combo_box>
+	<button label="オプション" label_selected="オプション" name="Options..." tool_tip="グリッドオプションを設定"/>
+	<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
+	<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
+	<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
+	<button label="" label_selected="" name="ToolTetrahedron" tool_tip="4面体"/>
+	<button label="" label_selected="" name="ToolCylinder" tool_tip="シリンダー"/>
+	<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="半円柱"/>
+	<button label="" label_selected="" name="ToolCone" tool_tip="円錐"/>
+	<button label="" label_selected="" name="ToolHemiCone" tool_tip="半円錐"/>
+	<button label="" label_selected="" name="ToolSphere" tool_tip="球形"/>
+	<button label="" label_selected="" name="ToolHemiSphere" tool_tip="半球"/>
+	<button label="" label_selected="" name="ToolTorus" tool_tip="トーラス"/>
+	<button label="" label_selected="" name="ToolTube" tool_tip="チューブ"/>
+	<button label="" label_selected="" name="ToolRing" tool_tip="リング"/>
+	<button label="" label_selected="" name="ToolTree" tool_tip="樹木"/>
+	<button label="" label_selected="" name="ToolGrass" tool_tip="草地"/>
+	<check_box label="選択したものを保持" name="checkbox sticky"/>
+	<check_box label="選択したものをコピー" name="checkbox copy selection"/>
+	<check_box initial_value="true" label="中央にコピー" name="checkbox copy centers"/>
+	<check_box label="回転させてコピー" name="checkbox copy rotates"/>
+	<radio_group name="land_radio_group">
+		<radio_item label="土地を選択" name="radio select land"/>
+		<radio_item label="ならす" name="radio flatten"/>
+		<radio_item label="隆起" name="radio raise"/>
+		<radio_item label="低くする" name="radio lower"/>
+		<radio_item label="滑らかにする" name="radio smooth"/>
+		<radio_item label="凸凹にする" name="radio noise"/>
+		<radio_item label="元に戻す" name="radio revert"/>
+	</radio_group>
+	<text name="Bulldozer:">
+		ブルドーザー:
+	</text>
+	<text name="Dozer Size:">
+		サイズ
+	</text>
+	<text name="Strength:">
+		強度
+	</text>
+	<button label="適用" label_selected="適用" name="button apply to selection" tool_tip="選択した土地を修正"/>
+	<text name="obj_count">
+		オブジェクト: [COUNT]
+	</text>
+	<text name="prim_count">
+		プリム: [COUNT]
+	</text>
+	<tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30">
+		<panel label="一般" name="General">
+			<panel.string name="text deed continued">
+				譲渡
+			</panel.string>
+			<panel.string name="text deed">
+				譲渡
+			</panel.string>
+			<panel.string name="text modify info 1">
+				このオブジェクトは修正できます。
+			</panel.string>
+			<panel.string name="text modify info 2">
+				これらのオブジェクトは修正できます。
+			</panel.string>
+			<panel.string name="text modify info 3">
+				このオブジェクトは修正できません。
+			</panel.string>
+			<panel.string name="text modify info 4">
+				これらのオブジェクトは修正できません。
+			</panel.string>
+			<panel.string name="text modify warning">
+				オブジェクト全体を選択して権限の設定を行ってください。
+			</panel.string>
+			<panel.string name="Cost Default">
+				価格: L$
+			</panel.string>
+			<panel.string name="Cost Total">
+				合計価格: L$
+			</panel.string>
+			<panel.string name="Cost Per Unit">
+				単価: L$
+			</panel.string>
+			<panel.string name="Cost Mixed">
+				混合価格
+			</panel.string>
+			<panel.string name="Sale Mixed">
+				混合販売
+			</panel.string>
+			<text name="Name:">
+				名前:
+			</text>
+			<text name="Description:">
+				説明:
+			</text>
+			<text name="Creator:">
+				クリエーター
+			</text>
+			<text name="Creator Name">
+				Thrax Linden
+			</text>
+			<text name="Owner:">
+				オーナー:
+			</text>
+			<text name="Owner Name">
+				Thrax Linden
+			</text>
+			<text name="Group:">
+				グループ:
+			</text>
+			<button label="設定..." label_selected="設定..." name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択"/>
+			<name_box initial_value="ローディング..." name="Group Name Proxy"/>
+			<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると次の所有者の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます。"/>
+			<check_box label="共有" name="checkbox share with group" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 役割制限を有効にするには、譲渡する必要があります。"/>
+			<text name="label click action">
+				クリックで:
+			</text>
+			<combo_box name="clickaction">
+				<combo_box.item label="触れる(デフォルト)" name="Touch/grab(default)"/>
+				<combo_box.item label="オブジェクトに座る" name="Sitonobject"/>
+				<combo_box.item label="オブジェクトを購入" name="Buyobject"/>
+				<combo_box.item label="オブジェクトへの支払い" name="Payobject"/>
+				<combo_box.item label="開く" name="Open"/>
+			</combo_box>
+			<check_box label="販売中:" name="checkbox for sale"/>
+			<combo_box name="sale type">
+				<combo_box.item label="コピー" name="Copy"/>
+				<combo_box.item label="コンテンツ" name="Contents"/>
+				<combo_box.item label="オリジナル" name="Original"/>
+			</combo_box>
+			<spinner label="価格: L$" name="Edit Cost"/>
+			<check_box label="検索に表示" name="search_check" tool_tip="検索結果で、このオブジェクトを人に見せる"/>
+			<panel name="perms_build">
+				<text name="perm_modify">
+					このオブジェクトを修正できます
+				</text>
+				<text name="Anyone can:">
+					全員:
+				</text>
+				<check_box label="コピー" name="checkbox allow everyone copy"/>
+				<text name="Next owner can:">
+					次の所有者:
+				</text>
+				<check_box label="修正" name="checkbox next owner can modify"/>
+				<check_box label="コピー" name="checkbox next owner can copy"/>
+				<check_box label="再販・プレゼント" name="checkbox next owner can transfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販することができます"/>
+				<text name="B:">
+					B:
+				</text>
+				<text name="O:">
+					O:
+				</text>
+				<text name="G:">
+					G:
+				</text>
+				<text name="E:">
+					E:
+				</text>
+				<text name="N:">
+					N:
+				</text>
+				<text name="F:">
+					F:
+				</text>
+			</panel>
+		</panel>
+		<panel label="形状" name="Object">
+			<check_box label="ロック済み" name="checkbox locked" tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。"/>
+			<check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にする"/>
+			<check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="作成1分後にオブジェクトを削除"/>
+			<check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避"/>
+			<text name="label position">
+				位置(メートル)
+			</text>
+			<spinner label="X" name="Pos X"/>
+			<spinner label="Y" name="Pos Y"/>
+			<spinner label="Z" name="Pos Z"/>
+			<text name="label size">
+				サイズ(メートル)
+			</text>
+			<spinner label="X" name="Scale X"/>
+			<spinner label="Y" name="Scale Y"/>
+			<spinner label="Z" name="Scale Z"/>
+			<text name="label rotation">
+				回転(度)
+			</text>
+			<spinner label="X" name="Rot X"/>
+			<spinner label="Y" name="Rot Y"/>
+			<spinner label="Z" name="Rot Z"/>
+			<combo_box name="comboBaseType">
+				<combo_box.item label="ボックス" name="Box"/>
+				<combo_box.item label="シリンダー" name="Cylinder"/>
+				<combo_box.item label="プリズム" name="Prism"/>
+				<combo_box.item label="球形" name="Sphere"/>
+				<combo_box.item label="トーラス" name="Torus"/>
+				<combo_box.item label="チューブ" name="Tube"/>
+				<combo_box.item label="リング" name="Ring"/>
+				<combo_box.item label="スカルプト" name="Sculpted"/>
+			</combo_box>
+			<combo_box name="material">
+				<combo_box.item label="石材" name="Stone"/>
+				<combo_box.item label="金属" name="Metal"/>
+				<combo_box.item label="ガラス" name="Glass"/>
+				<combo_box.item label="木材" name="Wood"/>
+				<combo_box.item label="肌" name="Flesh"/>
+				<combo_box.item label="プラスチック" name="Plastic"/>
+				<combo_box.item label="ゴム" name="Rubber"/>
+			</combo_box>
+			<text name="text cut">
+				パスカット(始点/終点)
+			</text>
+			<spinner label="B" name="cut begin"/>
+			<spinner label="E" name="cut end"/>
+			<text name="text hollow">
+				中空(空洞)
+			</text>
+			<text name="text skew">
+				傾斜
+			</text>
+			<text name="Hollow Shape">
+				中空(空洞)の形
+			</text>
+			<combo_box name="hole">
+				<combo_box.item label="デフォルト" name="Default"/>
+				<combo_box.item label="サークル" name="Circle"/>
+				<combo_box.item label="正方形" name="Square"/>
+				<combo_box.item label="三角形" name="Triangle"/>
+			</combo_box>
+			<text name="text twist">
+				ひねり(始点/終点)
+			</text>
+			<spinner label="B" name="Twist Begin"/>
+			<spinner label="E" name="Twist End"/>
+			<text name="scale_taper">
+				テーパー
+			</text>
+			<text name="scale_hole">
+				穴寸法
+			</text>
+			<spinner label="X" name="Taper Scale X"/>
+			<spinner label="Y" name="Taper Scale Y"/>
+			<text name="text topshear">
+				上部層
+			</text>
+			<spinner label="X" name="Shear X"/>
+			<spinner label="Y" name="Shear Y"/>
+			<text name="advanced_cut">
+				プロフィール・カット(始点/終点)
+			</text>
+			<text name="advanced_dimple">
+				くぼみ(始点/終点)
+			</text>
+			<text name="advanced_slice">
+				切り取り(始点/終点)
+			</text>
+			<spinner label="B" name="Path Limit Begin"/>
+			<spinner label="E" name="Path Limit End"/>
+			<text name="text taper2">
+				テーパー
+			</text>
+			<spinner label="X" name="Taper X"/>
+			<spinner label="Y" name="Taper Y"/>
+			<text name="text radius delta">
+				半径
+			</text>
+			<text name="text revolutions">
+				回転体
+			</text>
+			<texture_picker label="スカルプトテクスチャー" name="sculpt texture control" tool_tip="クリックして写真を選択してください。"/>
+			<check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトされたプリムをX軸上で反転"/>
+			<check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトされたプリムのノーマルを逆転させ、裏返しに表示"/>
+			<text name="label sculpt type">
+				縫い目のタイプ
+			</text>
+			<combo_box name="sculpt type control">
+				<combo_box.item label="(なし)" name="None"/>
+				<combo_box.item label="球形" name="Sphere"/>
+				<combo_box.item label="トーラス" name="Torus"/>
+				<combo_box.item label="平面" name="Plane"/>
+				<combo_box.item label="シリンダー" name="Cylinder"/>
+			</combo_box>
+		</panel>
+		<panel label="特徴" name="Features">
+			<text name="select_single">
+				プリムを1つだけ選択して編集してください
+			</text>
+			<text name="edit_object">
+				オブジェクトの特徴を編集:
+			</text>
+			<check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z軸を中心とするオブジェクトの折れ曲がりを有効にする (クライアント側のみ)"/>
+			<spinner label="柔軟性" label_width="72" name="FlexNumSections" width="135"/>
+			<spinner label="重力" label_width="72" name="FlexGravity" width="135"/>
+			<spinner label="ドラッグ" label_width="72" name="FlexFriction" width="135"/>
+			<spinner label="風" label_width="72" name="FlexWind" width="135"/>
+			<spinner label="ç·Šå¼µ" label_width="72" name="FlexTension" width="135"/>
+			<spinner label="X軸方向の力" label_width="72" name="FlexForceX" width="135"/>
+			<spinner label="Y軸方向の力" label_width="72" name="FlexForceY" width="135"/>
+			<spinner label="Z軸方向の力" label_width="72" name="FlexForceZ" width="135"/>
+			<check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光"/>
+			<color_swatch label="" left_delta="74" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
+			<spinner label="輝度" label_width="72" name="Light Intensity" width="135"/>
+			<spinner label="半径" label_width="72" name="Light Radius" width="135"/>
+			<spinner label="弱まる" label_width="72" name="Light Falloff" width="135"/>
+		</panel>
+		<panel label="材質" name="Texture">
+			<panel.string name="string repeats per meter">
+				メートルごとに繰返す
+			</panel.string>
+			<panel.string name="string repeats per face">
+				面ごとに繰り返す
+			</panel.string>
+			<texture_picker label="テクスチャー" name="texture control" tool_tip="写真をクリックして選択"/>
+			<color_swatch label="色" name="colorswatch" tool_tip="カラー・ピッカーをクリックして開く"/>
+			<text name="color trans">
+				透過度 %
+			</text>
+			<text name="glow label">
+				グロー
+			</text>
+			<check_box label="明るさ全開" name="checkbox fullbright"/>
+			<text name="tex gen">
+				マッピング
+			</text>
+			<combo_box name="combobox texgen">
+				<combo_box.item label="デフォルト" name="Default"/>
+				<combo_box.item label="平面" name="Planar"/>
+			</combo_box>
+			<text name="label shininess">
+				輝き
+			</text>
+			<combo_box name="combobox shininess">
+				<combo_box.item label="なし" name="None"/>
+				<combo_box.item label="低" name="Low"/>
+				<combo_box.item label="中" name="Medium"/>
+				<combo_box.item label="高" name="High"/>
+			</combo_box>
+			<text name="label bumpiness">
+				凹凸
+			</text>
+			<combo_box name="combobox bumpiness">
+				<combo_box.item label="なし" name="None"/>
+				<combo_box.item label="明るさ" name="Brightness"/>
+				<combo_box.item label="暗さ" name="Darkness"/>
+				<combo_box.item label="木目調" name="woodgrain"/>
+				<combo_box.item label="木の皮" name="bark"/>
+				<combo_box.item label="レンガ" name="bricks"/>
+				<combo_box.item label="チェッカー" name="checker"/>
+				<combo_box.item label="コンクリート" name="concrete"/>
+				<combo_box.item label="クラスティ・タイル" name="crustytile"/>
+				<combo_box.item label="カットストーン" name="cutstone"/>
+				<combo_box.item label="ディスク" name="discs"/>
+				<combo_box.item label="砂利" name="gravel"/>
+				<combo_box.item label="ペトリ" name="petridish"/>
+				<combo_box.item label="羽目板" name="siding"/>
+				<combo_box.item label="ストーン・タイル" name="stonetile"/>
+				<combo_box.item label="しっくい" name="stucco"/>
+				<combo_box.item label="吸い込み" name="suction"/>
+				<combo_box.item label="織目" name="weave"/>
+			</combo_box>
+			<text name="tex scale">
+				面ごとに繰り返す
+			</text>
+			<spinner label="水平(U)" name="TexScaleU"/>
+			<check_box label="反転" name="checkbox flip s"/>
+			<spinner label="垂直(V)" name="TexScaleV"/>
+			<check_box label="反転" name="checkbox flip t"/>
+			<button label="適用" label_selected="適用" name="button apply"/>
+			<text name="tex offset">
+				Texture Offset
+			</text>
+			<spinner label="水平(U)" name="TexOffsetU"/>
+			<spinner label="垂直(V)" name="TexOffsetV"/>
+		</panel>
+		<panel label="中身" name="Contents">
+			<button label="新しいスクリプト" label_selected="新しいスクリプト" name="button new script" width="120"/>
+			<button label="権限" left_delta="130" name="button permissions" width="80"/>
+		</panel>
+	</tab_container>
+	<panel name="land info panel">
+		<text name="label_parcel_info">
+			区画情報
+		</text>
+		<text name="label_area_price" width="200">
+			価格:[AREA]平方メートルあたりL$[PRICE]
+		</text>
+		<text name="label_area" width="200">
+			面積:[AREA]平方メートル
+		</text>
+		<button label="土地情報..." label_selected="土地情報..." name="button about land"/>
+		<check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有権別に区画を色分けします: 
+
+緑 = あなたの土地 
+アクア = あなたのグループ所有地 
+赤 = 他人が所有する土地 
+黄色 = 売り出し中 
+紫 = オークション 
+グレー = パブリック"/>
+		<text name="label_parcel_modify">
+			区画の編集
+		</text>
+		<button label="再分割" label_selected="再分割" name="button subdivide land"/>
+		<button label="統合する" label_selected="統合する" name="button join land"/>
+		<text name="label_parcel_trans">
+			土地取引
+		</text>
+		<button label="土地を購入" label_selected="土地を購入" name="button buy land"/>
+		<button label="土地を放棄" label_selected="土地を放棄" name="button abandon land"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/inspect_avatar.xml b/indra/newview/skins/default/xui/ja/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7d2cbee043a7e80e2cfb761d12f99467e5528d4
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/inspect_avatar.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[ACCTTYPE]、[PAYMENTINFO]
+プロフィール: [SL_PROFILE]
+	</string>
+	<slider name="volume_slider" tool_tip="ボイス音量" value="0.5"/>
+	<button label="フレンドを追加" name="add_friend_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b3287a1a35157d7e0ea72a1ed259ddb5852f6ef5
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="プロフィールを表示..." name="Show Profile"/>
+	<menu_item_call label="IMを送信..." name="Send IM"/>
+	<menu_item_call label="フレンドを追加..." name="Add Friend"/>
+	<menu_item_call label="フレンドを削除..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fbaa33035fc5afd9ed473bc6c2e4a5a83da6c5e2
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="テレポート" name="Teleport To Landmark"/>
+	<menu_item_call label="ランドマークを表示・編集" name="Landmark Open"/>
+	<menu_item_call label="SLurl をコピー" name="Copy slurl"/>
+	<menu_item_call label="地図に表示" name="Show On Map"/>
+	<menu_item_call label="コピー" name="Landmark Copy"/>
+	<menu_item_call label="貼り付け" name="Landmark Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..762f9f616d9bb3dc7d3c72e30263c75808264526
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="グループに参加..." name="item_join"/>
+	<menu_item_call label="新しいグループ..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index 37c52f173cfe6b845f218b7c2f56a199748729f9..e3420c0c1555c8accc8a6bb456647a4e882c0273 100644
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -1,66 +1,76 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Popup">
-	<menu_item_call label="購入" name="Task Buy"/>
-	<menu_item_call label="開く" name="Task Open"/>
-	<menu_item_call label="再生" name="Task Play"/>
-	<menu_item_call label="プロパティ" name="Task Properties"/>
-	<menu_item_call label="名前の変更" name="Task Rename"/>
-	<menu_item_call label="削除" name="Task Remove"/>
-	<menu_item_call label="ゴミ箱を空にする" name="Empty Trash"/>
-	<menu_item_call label="遺失物フォルダを空にする" name="Empty Lost And Found"/>
-	<menu_item_call label="新しいフォルダ" name="New Folder"/>
-	<menu_item_call label="新しいスクリプト" name="New Script"/>
-	<menu_item_call label="新しいノート" name="New Note"/>
-	<menu_item_call label="新しいジェスチャー" name="New Gesture"/>
-	<menu name="New Clothes">
-		<menu_item_call label="新しいシャツ" name="New Shirt"/>
-		<menu_item_call label="新しいズボン" name="New Pants"/>
-		<menu_item_call label="新しい靴" name="New Shoes"/>
-		<menu_item_call label="新しい靴下" name="New Socks"/>
-		<menu_item_call label="新しいジャケット" name="New Jacket"/>
-		<menu_item_call label="新しいスカート" name="New Skirt"/>
-		<menu_item_call label="新しい手袋" name="New Gloves"/>
-		<menu_item_call label="新しい下着" name="New Undershirt"/>
-		<menu_item_call label="新しいパンツ" name="New Underpants"/>
-	</menu>
-	<menu name="New Body Parts">
-		<menu_item_call label="新しいシェイプ(体型)" name="New Shape"/>
-		<menu_item_call label="新しいスキン" name="New Skin"/>
-		<menu_item_call label="新しい髪" name="New Hair"/>
-		<menu_item_call label="新しい眼" name="New Eyes"/>
-	</menu>
-	<menu_item_call label="テレポート" name="Landmark Open"/>
-	<menu_item_call label="開く" name="Animation Open"/>
-	<menu_item_call label="開く" name="Sound Open"/>
-	<menu_item_call label="アイテムを除外" name="Purge Item"/>
-	<menu_item_call label="アイテムを復元" name="Restore Item"/>
-	<menu_item_call label="開く" name="Open"/>
-	<menu_item_call label="プロパティ" name="Properties"/>
-	<menu_item_call label="名前の変更" name="Rename"/>
-	<menu_item_call label="UUIDをコピー" name="Copy Asset UUID"/>
-	<menu_item_call label="コピー" name="Copy"/>
-	<menu_item_call label="貼り付け" name="Paste"/>
-	<menu_item_call label="削除" name="Delete"/>
-	<menu_item_call label="アイテムを取り外す" name="Take Off Items"/>
-	<menu_item_call label="服装に追加" name="Add To Outfit"/>
-	<menu_item_call label="服装を置換" name="Replace Outfit"/>
-	<menu_item_call label="会議チャット開始" name="Conference Chat Folder"/>
-	<menu_item_call label="再生" name="Sound Play"/>
-	<menu_item_call label="ランドマーク情報" name="Teleport To Landmark"/>
-	<menu_item_call label="世界で再生" name="Animation Play"/>
-	<menu_item_call label="ローカルに再生" name="Animation Audition"/>
-	<menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message"/>
-	<menu_item_call label="テレポートを贈る..." name="Offer Teleport..."/>
-	<menu_item_call label="会議チャット開始" name="Conference Chat"/>
-	<menu_item_call label="アクティブ" name="Activate"/>
-	<menu_item_call label="非アクティブ" name="Deactivate"/>
-	<menu_item_call label="自分から取り外す" name="Detach From Yourself"/>
-	<menu_item_call label="前回あった位置に戻す" name="Restore to Last Position"/>
-	<menu_item_call label="装着" name="Object Wear"/>
-	<menu label="装着先" name="Attach To"/>
-	<menu label="HUD装着先" name="Attach To HUD"/>
-	<menu_item_call label="編集" name="Wearable Edit"/>
-	<menu_item_call label="装着" name="Wearable Wear"/>
-	<menu_item_call label="取り外す" name="Take Off"/>
-	<menu_item_call label="--オプションなし--" name="--no options--"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="購入" name="Task Buy"/>
+	<menu_item_call label="開く" name="Task Open"/>
+	<menu_item_call label="再生" name="Task Play"/>
+	<menu_item_call label="プロパティ" name="Task Properties"/>
+	<menu_item_call label="名前の変更" name="Task Rename"/>
+	<menu_item_call label="削除" name="Task Remove"/>
+	<menu_item_call label="ゴミ箱を空にする" name="Empty Trash"/>
+	<menu_item_call label="遺失物フォルダを空にする" name="Empty Lost And Found"/>
+	<menu_item_call label="新しいフォルダ" name="New Folder"/>
+	<menu_item_call label="新しいスクリプト" name="New Script"/>
+	<menu_item_call label="新しいノート" name="New Note"/>
+	<menu_item_call label="新しいジェスチャー" name="New Gesture"/>
+	<menu label="新規衣類" name="New Clothes">
+		<menu_item_call label="新しいシャツ" name="New Shirt"/>
+		<menu_item_call label="新しいズボン" name="New Pants"/>
+		<menu_item_call label="新しい靴" name="New Shoes"/>
+		<menu_item_call label="新しい靴下" name="New Socks"/>
+		<menu_item_call label="新しいジャケット" name="New Jacket"/>
+		<menu_item_call label="新しいスカート" name="New Skirt"/>
+		<menu_item_call label="新しい手袋" name="New Gloves"/>
+		<menu_item_call label="新しい下着" name="New Undershirt"/>
+		<menu_item_call label="新しいパンツ" name="New Underpants"/>
+	</menu>
+	<menu label="新規身体部位" name="New Body Parts">
+		<menu_item_call label="新しいシェイプ(体型)" name="New Shape"/>
+		<menu_item_call label="新しいスキン" name="New Skin"/>
+		<menu_item_call label="新しい髪" name="New Hair"/>
+		<menu_item_call label="新しい眼" name="New Eyes"/>
+	</menu>
+	<menu label="種類を変更" name="Change Type">
+		<menu_item_call label="デフォルト" name="Default"/>
+		<menu_item_call label="手袋" name="Gloves"/>
+		<menu_item_call label="ジャケット" name="Jacket"/>
+		<menu_item_call label="パンツ" name="Pants"/>
+		<menu_item_call label="シェイプ" name="Shape"/>
+		<menu_item_call label="靴" name="Shoes"/>
+		<menu_item_call label="シャツ" name="Shirt"/>
+		<menu_item_call label="スカート" name="Skirt"/>
+		<menu_item_call label="下着パンツ" name="Underpants"/>
+		<menu_item_call label="下着シャツ" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="テレポート" name="Landmark Open"/>
+	<menu_item_call label="開く" name="Animation Open"/>
+	<menu_item_call label="開く" name="Sound Open"/>
+	<menu_item_call label="アイテムを除外" name="Purge Item"/>
+	<menu_item_call label="アイテムを復元" name="Restore Item"/>
+	<menu_item_call label="開く" name="Open"/>
+	<menu_item_call label="プロパティ" name="Properties"/>
+	<menu_item_call label="名前の変更" name="Rename"/>
+	<menu_item_call label="UUIDをコピー" name="Copy Asset UUID"/>
+	<menu_item_call label="コピー" name="Copy"/>
+	<menu_item_call label="貼り付け" name="Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+	<menu_item_call label="アイテムを取り外す" name="Take Off Items"/>
+	<menu_item_call label="服装に追加" name="Add To Outfit"/>
+	<menu_item_call label="服装を置換" name="Replace Outfit"/>
+	<menu_item_call label="会議チャット開始" name="Conference Chat Folder"/>
+	<menu_item_call label="再生" name="Sound Play"/>
+	<menu_item_call label="世界で再生" name="Animation Play"/>
+	<menu_item_call label="ローカルに再生" name="Animation Audition"/>
+	<menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message"/>
+	<menu_item_call label="テレポートを贈る..." name="Offer Teleport..."/>
+	<menu_item_call label="会議チャット開始" name="Conference Chat"/>
+	<menu_item_call label="アクティブ" name="Activate"/>
+	<menu_item_call label="非アクティブ" name="Deactivate"/>
+	<menu_item_call label="自分から取り外す" name="Detach From Yourself"/>
+	<menu_item_call label="装着" name="Object Wear"/>
+	<menu label="装着先" name="Attach To"/>
+	<menu label="HUD装着先" name="Attach To HUD"/>
+	<menu_item_call label="編集" name="Wearable Edit"/>
+	<menu_item_call label="装着" name="Wearable Wear"/>
+	<menu_item_call label="取り外す" name="Take Off"/>
+	<menu_item_call label="--オプションなし--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..778eb72e7012aca7dd456a6fde7a06cda4d4abd2
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="SLurl をコピー" name="copy"/>
+	<menu_item_call label="削除" name="delete"/>
+	<menu_item_call label="ピックを作成" name="pick"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
index c8828a50beffa58d6af5ee1104fd318854936293..f080647be27ae6285ac3ba68eec33e3a4345ddfa 100644
--- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="popup">
-	<menu_item_call label="ズーム(近)" name="Zoom Close"/>
-	<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
-	<menu_item_call label="ズーム(遠)" name="Zoom Far"/>
-	<menu_item_call label="追跡をやめる" name="Stop Tracking"/>
-	<menu_item_call label="プロフィール..." name="Profile"/>
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="popup">
+	<menu_item_call label="ズーム(近)" name="Zoom Close"/>
+	<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
+	<menu_item_call label="ズーム(遠)" name="Zoom Far"/>
+	<menu_item_call label="追跡をやめる" name="Stop Tracking"/>
+	<menu_item_call label="世界地図" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e10c436208db9b83bee1805ddcd24361b46351ab
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="座標を表示" name="Show Coordinates"/>
+	<menu_item_call label="ランドマーク" name="Landmark"/>
+	<menu_item_call label="切り取り" name="Cut"/>
+	<menu_item_call label="コピー" name="Copy"/>
+	<menu_item_call label="貼り付け" name="Paste"/>
+	<menu_item_call label="削除" name="Delete"/>
+	<menu_item_call label="すべて選択" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a0880bd555a07a37f16e06715b329467a4adcba9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="情報" name="pick_info"/>
+	<menu_item_call label="編集" name="pick_edit"/>
+	<menu_item_call label="テレポート" name="pick_teleport"/>
+	<menu_item_call label="地図" name="pick_map"/>
+	<menu_item_call label="削除" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01095387b4c274b44445f69553c7588334763023
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="ランドマークを作成" name="landmark"/>
+	<menu_item_call label="ピックを作成" name="pick"/>
+	<menu_item_call label="入場許可を購入" name="pass"/>
+	<menu_item_call label="編集" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml
index 6d15563382646e8665ddd47681cf705eab3fafdf..1be2954f3fe39435214b6d901f5c13a8ab1bc602 100644
--- a/indra/newview/skins/default/xui/ja/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="Popup">
-	<menu_item_call label="URLについて" name="about_url" />
-	<menu_item_call label="URLへテレポートする" name="teleport_to_url" />
-	<menu_item_call label="地図上に表示" name="show_on_map" />
-</menu>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="URLについて" name="about_url"/>
+	<menu_item_call label="URLへテレポートする" name="teleport_to_url"/>
+	<menu_item_call label="地図" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57e7931ce609b941197a49330c67ce008ea11866
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="住人のプロフィールを表示" name="show_agent"/>
+	<menu_item_call label="名前をクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2970256cfe1a34406b692c39980c8ad93c23b05d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="グループ情報を表示" name="show_group"/>
+	<menu_item_call label="グループをクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8abb5cead666f9e9ba71659abb6e63d272ff6bc0
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Web ページを開く" name="url_open"/>
+	<menu_item_call label="インターネットブラウザで開く" name="url_open_internal"/>
+	<menu_item_call label="外部ブラウザで開く" name="url_open_external"/>
+	<menu_item_call label="URLをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1746e163b6b5b4afa1948e3f0e52697a7d72d3e5
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="オブジェクトの情報を表示" name="show_object"/>
+	<menu_item_call label="オブジェクトの場所にテレポート" name="teleport_to_object"/>
+	<menu_item_call label="オブジェクト名をクリップボードにコピー" name="url_copy_label"/>
+	<menu_item_call label="SLurlをクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..05639f086e817d1b10346eec056f724d33b79311
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="区画情報を表示" name="show_parcel"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e66da8e9b9306c41ea3f71e07bffe54a203e3d98
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="場所の情報を表示" name="show_place"/>
+	<menu_item_call label="現地にテレポート" name="teleport_to_location"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0239e0e0e673728fdf5c30cf63f8c7075dc65b6d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="この場所にテレポート" name="teleport"/>
+	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 4d067d2823006cb60600c49ecf02a53ce053c8a7..ce50a33f1cdd657a55a43708af39839550edb83f 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1,3264 +1,2685 @@
-<?xml version="1.0" encoding="utf-8"?>
-<notifications>
-	<global name="skipnexttime">
-		今後は表示しない
-	</global>
-	<global name="alwayschoose">
-		常にこのオプションを選択
-	</global>
-	<global name="implicitclosebutton">
-		閉じる
-	</global>
-  <template name="okbutton">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-    </form>
-  </template>
-
-  <template name="okignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okcancelbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-    </form>
-  </template>
-
-  <template name="okcancelignore">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Cancel"
-       text="$notext"/>
-      <ignore text="$ignoretext"/>
-    </form>
-  </template>
-
-  <template name="okhelpbuttons">
-    <form>
-      <button
-       name="OK"
-       text="$yestext"/>
-      <button
-       name="Help"
-       text="$helptext"/>
-    </form>
-  </template>
-
-  <template name="yesnocancelbuttons">
-    <form>
-      <button
-       name="Yes"
-       text="$yestext"/>
-      <button
-       name="No"
-       text="$notext"/>
-      <button
-       name="Cancel"
-       text="$canceltext"/>
-    </form>
-  </template>
-	<notification functor="GenericAcknowledge" label="不明な警告メッセージ" name="MissingAlert">
-		あなたの [APP_NAME] のバージョンでは、
-今受け取った警告メッセージを表示することができません。
-
-エラー詳細: 「[_NAME]」という警告は notifications.xml にありませんでした。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="FloaterNotFound">
-		フロータ・エラー:下記のコントロールが見つかりませんでした:
-[CONTROLS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="TutorialNotFound">
-		現在利用可能なチュートリアルはありません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GenericAlert">
-		[MESSAGE]
-	</notification>
-	<notification name="GenericAlertYesCancel">
-		[MESSAGE]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="はい"/>
-	</notification>
-	<notification name="BadInstallation">
-		[APP_NAME] をアップデート中にエラーが発生しました。 secondlife.com から最新バージョンをダウンロードしてください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LoginFailedNoNetwork">
-		ネットワークエラー: 接続が確立できませんでした。 
-「[DIAGNOSTIC]」
-ネットワーク接続を確認してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MessageTemplateNotFound">
-		メッセージテンプレート [PATH] がありませんでした。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="WearableSave">
-		現在の衣服/ボディーパーツの変更を保存しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="CompileQueueSaveText">
-		次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 [REASON] 後でもう一度試してください。
-	</notification>
-	<notification name="CompileQueueSaveBytecode">
-		次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 [REASON]後でもう一度試してください。
-	</notification>
-	<notification name="WriteAnimationFail">
-		アニメーションデータの書き込みに問題があります。後でもう一度お試しください。
-	</notification>
-	<notification name="UploadAuctionSnapshotFail">
-		次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 [REASON]
-	</notification>
-	<notification name="UnableToViewContentsMoreThanOne">
-		一度に複数のアイテムのコンテンツは表示できません。
-選択するアイテムを1つだけにして、もう一度試してください。
-	</notification>
-	<notification name="SaveClothingBodyChanges">
-		衣服/身体部位に対する変更をすべて保存しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="すべて保存"/>
-	</notification>
-	<notification name="GrantModifyRights">
-		他の住人に変更権限を与えると、その人はあなたが所有している
-すべてのオブジェクトを変更、削除、または取得することができるようになります。この許可を与えるときは細心の注意を払ってください。
-[FIRST_NAME] [LAST_NAME]に対して変更権限を与えますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="GrantModifyRightsMultiple">
-		変更権限を与えると、その人はあなたが作成した全てのオブジェクトを変更することができます。
-この許可を与えるときには細心の注意を払ってください。
-選択した住人に変更権限を与えますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="RevokeModifyRights">
-		[FIRST_NAME] [LAST_NAME]に対して変更権限を取り消しますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="RevokeModifyRightsMultiple">
-		選択した住人から変更権限を取り下げますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="UnableToCreateGroup">
-		グループを作成できません。
-[MESSAGE]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PanelGroupApply">
-		[NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="変更を無視" yestext="変更を適用"/>
-	</notification>
-	<notification name="MustSpecifyGroupNoticeSubject">
-		グループ通知の送信には、件名の記入が必要です。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AddGroupOwnerWarning">
-		あなたは [ROLE_NAME]の役割にメンバーを与えようとしています。
-任命されたメンバーが自ら退任しない限り、
-彼らを役柄から削除できません。
-操作を続行しますか?
-		<usetemplate ignoretext="オーナーの役割にグループ・メンバーを加えるとき" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="AssignDangerousActionWarning">
-		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
-与えようとしています。
-
- *警告*
-この能力を持つ役割のメンバーは、
-自分と他のメンバーに現在より強力な権限を割り当て、
-自分をオーナーとほぼ同様の立場に
-任命することもできるようになります。 この行為の意味をよく理解してから
-実行してください。
-
-この能力を[ROLE_NAME]に割り当てますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="AssignDangerousAbilityWarning">
-		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
-与えようとしています。
-
- *警告*
-この能力をもつ役割のメンバーは、
-自分と他のメンバーにすべての能力を割り当て、
-自分をオーナーとほぼ同様の立場に任命できます。
-
-この能力を[ROLE_NAME]に割り当てますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="ClickPublishHelpLand">
-		「検索で公開」を選択
-このボックスにチェックすると表示:
-- 検索結果におけるこの区画
-- この区画のパブリック・オブジェクト
-- ウェブ検索におけるこの区画
-	</notification>
-	<notification name="ClickSoundHelpLand">
-		メディアと音楽はこの区画内でのみお楽しみいただけます。 サウンドとボイスは区画内限定か、各自のレーティング区分によっては区画外でも聞くことができます。 ナレッジベースを開いて設定の仕方を学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/区画上のメディア_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="ClickSearchHelpAll">
-		検索結果は今見ているタブ、あなたのレーティング区分、選択したカテゴリその他を元に編成されています。 詳細はナレッジベースをご覧ください。
-		<url name="url">
-			http://wiki.secondlife.com/wiki/検索に関するよくある質問集_(KB)
-		</url>
-		<usetemplate name="okcancelbuttons" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="ClickPublishHelpLandDisabled">
-		この区画は検索を禁ずる地域にあるため、
-この区画を検索に表示することはできません。
-	</notification>
-	<notification name="ClickPublishHelpAvatar">
-		「検索に表示」を選択すると表示:
-- 検索結果における自分のプロフィール
-- 公開グループ・ページにおける自分のプロフィールへのリンク
-	</notification>
-	<notification name="ClickPartnerHelpAvatar">
-		[SECOND_LIFE]のウェブ・サイトから、
-他の住人へのプロポーズ、パートナー解消手続きができます。
-
-ウェブ・サイトに行って パートナーに関する情報を取得しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ClickUploadHelpPermissions">
-		あなたの持つデフォルトの権限は古い地域では使えません。
-	</notification>
-	<notification name="ClickWebProfileHelpAvatar">
-		この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です。
- * 「ロード」をクリックし、このウェブ・タブ内でページを表示
- * 「ロード」>「外部ブラウザ」 をクリックし、ディフォルトのウェブ・ブラウザでページを表示
- * 「ロード」>「ホームURL」 をクリックし、他のページからこの住人のウェブ・プロフィールに戻る
-
-自分のプロフィールに任意のURLを入力しOKをクリックして、ウェブ・プロフィールとして設定することができます。
-それを見た他の住人がそのサイトを訪れることができます。
-	</notification>
-	<notification name="JoinGroupCanAfford">
-		このグループに参加するには、L$[COST]かかります。
-続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="参加"/>
-	</notification>
-	<notification name="JoinGroupCannotAfford">
-		このグループに加入するには、L$[COST]必要です。
-L$が不足しているのでこのグループに参加することができません。
-	</notification>
-	<notification name="LandBuyPass">
-		L$[COST]で [TIME]時間この土地[PARCEL_NAME]に入ることができます。
-入場許可を購入しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SalePriceRestriction">
-		不特定の人に売却する場合には、
-売却価格はL$0以上に設定する必要があります。
-売却価格をL$0に設定する場合は、
-売却する個人を選択してください。
-	</notification>
-	<notification name="ConfirmLandSaleChange">
-		選択された[LAND_SIZE]平方メートルの土地は、売り出し中に設定されています。
-売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmLandSaleToAnyoneChange">
-		注:「誰にでも売却する」をクリックすると、
-あなたの土地は[SECOND_LIFE] のコミュニティのどこからでも
-(この地域にないコミュニティを含む)購入できるようになります。
-
-選択された[LAND_SIZE]平方メートルの土地は、
-売り出し中に設定されています。
-売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsDeededToGroup">
-		この区画のグループ[NAME]共有のすべてのオブジェクトを、以前のオーナーの持ち物に戻そうとしています。
-操作を続行しますか?
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedByUser">
-		この区画で、
-住人[NAME]が所有する全てのオブジェクトを
-彼らの持ち物に本当に返却してもよいですか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsOwnedBySelf">
-		この土地区画内にある、あなたが所有するすべてのオブジェクトを、
-あなたの持ち物に戻そうとしています。操作を続行しますか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedBySelf">
-		この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、
-それぞれのオーナーの持ち物に戻そうとしています。
-操作を続行しますか?
-グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByUser">
-		この土地区画内にある、
-[NAME]以外による所有のオブジェクトをすべてそれぞれのオーナーの持ち物に返却しようとしています。
-操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
-
-*警告* これにより、
-グループに譲渡された譲渡不可能なオブジェクトは削除されます!
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnAllTopObjects">
-		全てのリストされたオブジェクトを所有者に本当に返却しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DisableAllTopObjects">
-		この地域内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ReturnObjectsNotOwnedByGroup">
-		この土地の区画上のオブジェクトのうち、グループ[NAME]
-との間で共有していないオブジェクトをオーナーに返却しますか?
-
-オブジェクト: [N]
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="UnableToDisableOutsideScripts">
-		スクリプトを無効にできません。
-この地域全体が「ダメージ有効」に設定されています。
-武器を使用するにはスクリプトの実行を許可する必要があります。
-	</notification>
-	<notification name="MustBeInParcel">
-		着地点を設定するには、この区画の内側に
-立ってください。
-	</notification>
-	<notification name="PromptRecipientEmail">
-		受信者の有効なEメールアドレスを入力してください。
-	</notification>
-	<notification name="PromptSelfEmail">
-		あなたのEメール・アドレスを入力してください。
-	</notification>
-	<notification name="PromptMissingSubjMsg">
-		デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ErrorProcessingSnapshot">
-		スナップショット・データの処理エラー
-	</notification>
-	<notification name="ErrorEncodingSnapshot">
-		スナップショットのエンコード化でエラーが出ました!
-	</notification>
-	<notification name="ErrorUploadingPostcard">
-		次の理由で、スナップショットの送信時に問題が起こりました: [REASON]
-	</notification>
-	<notification name="ErrorUploadingReportScreenshot">
-		次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON]
-	</notification>
-	<notification name="MustAgreeToLogIn">
-		[SECOND_LIFE] へのログインを続けるには、利用規約に同意してください。
-	</notification>
-	<notification name="CouldNotPutOnOutfit">
-		服装を装着できません。
-服装フォルダに衣服、身体部位、付属品がありません。
-	</notification>
-	<notification name="CannotWearTrash">
-		ゴミ箱にある服やボディーパーツの着用はできません。
-	</notification>
-	<notification name="CannotWearInfoNotComplete">
-		まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
-	</notification>
-	<notification name="MustHaveAccountToLogIn">
-		おっと! 記入漏れがありますよ。
-アバターのファーストネームとラストネームの両方を入力する必要があります。
-
-[SECOND_LIFE]に入るには、アカウントが必要です。 アカウントを作成しますか?
-		<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
-	</notification>
-	<notification name="AddClassified">
-		検索ディレクトリの「クラシファイド」セクションに、
-クラシファイド広告が1週間掲載されます。
-広告を記入後、「公開」をクリックし、ディレクトリに
-追加します。
-「公開」をクリックすると、支払金額を尋ねられます。
-多く払うほど、広告がクラシファイド・リストとキーワード検索
-の上位に表示されます。
-		<usetemplate ignoretext="新しいクラシファイド広告を加えるとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DeleteClassified">
-		クラシファイド広告[NAME]の削除をしますか?
-支払い済みの料金は返金されません。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ClassifiedSave">
-		クラシファイド広告[NAME]への変更を保存しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="DeleteAvatarPick">
-		ピック[PICK]を削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="PromptGoToEventsPage">
-		[SECOND_LIFE]イベント・ウェブ・ページに移動しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SelectProposalToView">
-		表示する提案を選択してください。
-	</notification>
-	<notification name="SelectHistoryItemToView">
-		表示する履歴アイテムを選択してください。
-	</notification>
-	<notification name="ResetShowNextTimeDialogs">
-		これらのポップアップ全てを再度有効化しますか?(以前「今後は表示しない」と指定しています)
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SkipShowNextTimeDialogs">
-		スキップ可能なポップアップ全てを無効化しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CacheWillClear">
-		[APP_NAME]の再起動後にキャッシュがクリアされます。
-	</notification>
-	<notification name="CacheWillBeMoved">
-		[APP_NAME]の再起動後にキャッシュが移動されます。
-注意:これによりキャッシュがクリアされます。
-	</notification>
-	<notification name="ChangeConnectionPort">
-		ポートの設定は、[APP_NAME]の再起動後に有効になります。
-	</notification>
-	<notification name="ChangeSkin">
-		新しいスキンは[APP_NAME]を再起動すると現れます
-	</notification>
-	<notification name="GoToAuctionPage">
-		[SECOND_LIFE]ウェブ・ページに移動し、 入札あるいはオークションの詳細を確認しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SaveChanges">
-		変更を保存しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
-	</notification>
-	<notification name="GestureSaveFailedTooManySteps">
-		ジェスチャーの保存に失敗しました。
-ステップが多すぎます。
-ステップをいくつか削除してから再保存してください
-	</notification>
-	<notification name="GestureSaveFailedTryAgain">
-		ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。
-	</notification>
-	<notification name="GestureSaveFailedObjectNotFound">
-		ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="GestureSaveFailedReason">
-		次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="SaveNotecardFailObjectNotFound">
-		ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="SaveNotecardFailReason">
-		次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="ScriptCannotUndo">
-		あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。
-サーバーの最新保存バージョンをロードしますか?
-(**警告**:この操作後元に戻すことはできません)
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="SaveScriptFailReason">
-		次の理由で、スクリプトの保存に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="SaveScriptFailObjectNotFound">
-		スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。
-オブジェクトは範囲外か、または削除されているかもしれません。
-	</notification>
-	<notification name="SaveBytecodeFailReason">
-		次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
-	</notification>
-	<notification name="CouldNotStartStopScript">
-		スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。
-オブジェクトが範囲内に存在しないか、または削除された可能性があります。
-	</notification>
-	<notification name="CannotDownloadFile">
-		ファイルをダウンロードできません。
-	</notification>
-	<notification name="CannotWriteFile">
-		ファイル[[FILE]]を書き込めません。
-	</notification>
-	<notification name="UnsupportedHardware">
-		警告: あなたのシステムは [APP_NAME] を使用するために必要な必須動作環境の条件を満たしていません。
-[APP_NAME] をこのままご使用になると、不十分なパフォーマンスしか得られないおそれがあります。
-また、サポート外のシステム構成でご使用の場合、テクニカルサポートをご利用いただくことができません。
-
- 必須動作環境の条件
-[_URL] にアクセスして、さらに詳しい情報をご覧になりますか?
-		<url name="url" option="0">
-			http://secondlife.com/support/sysreqs.php?lang=ja
-		</url>
-		<usetemplate ignoretext="サポート外のハードウェアの検出時" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="UnknownGPU">
-		お使いのシステムには、現時点では不明なグラフィック・カードが搭載されています。
-これは、当社による動作テストが行われていない新しいハードウェアが使用されている場合がほとんどです。
-[APP_NAME] はほぼ間違いなく正常に動作しますが、
-必要に応じたグラフィック設定の調整が必要になる場合があります。
-(「編集」>「環境設定」>「表示」)
-		<form name="form">
-			<ignore name="ignore" text="不明なグラフィック・カードの検出時"/>
-		</form>
-	</notification>
-	<notification name="DisplaySettingsNoShaders">
-		[APP_NAME] は、
-グラフィック・ドライバの初期化中にクラッシュしました。
-一般的なドライバ・エラーを回避するため、「品質およびパフォーマンス」は「低」に設定されます。
-これにより、いくつかのグラフィックス機能は無効になります。
-グラフィックカード・ドライバのアップデートをお勧めします。
-「グラフィックの品質」は「環境設定」>「表示」から上げることができます。
-	</notification>
-	<notification name="RegionNoTerraforming">
-		この地域[REGION] は、テラフォーミングができません。
-	</notification>
-	<notification name="CannotCopyWarning">
-		あなたはこのアイテムのコピーを
-許されていないので、人にあげると
-持ち物から失われます。 本当に
-これをあげたいですか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CannotGiveItem">
-		持ち物のアイテムを渡せません。
-	</notification>
-	<notification name="TransactionCancelled">
-		取引がキャンセルされました。
-	</notification>
-	<notification name="TooManyItems">
-		一度のインベントリ交換で、42以上のアイテムは送れません。
-	</notification>
-	<notification name="NoItems">
-		選択したアイテムを譲渡できる権限がありません。
-	</notification>
-	<notification name="CannotCopyCountItems">
-		あなたは選択したアイテムの[COUNT]のコピーを
-許されていません。
-これらのアイテムはあなたの持ち物から失われます。
-本当にアイテムをあげたいですか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CannotGiveCategory">
-		選択したフォルダを譲渡できる権限がありません
-	</notification>
-	<notification name="FreezeAvatar">
-		このアバターをフリーズしますか?
-アバターは一時的に動けなくなり、
-チャットなど、この世界に対する関わりを持つことができなくなります。
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
-	</notification>
-	<notification name="FreezeAvatarFullname">
-		[AVATAR_NAME]をフリーズしますか?
-フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
-	</notification>
-	<notification name="EjectAvatarFullname">
-		あなたの土地から[AVATAR_NAME]を追放しますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="追放と禁止" yestext="追放"/>
-	</notification>
-	<notification name="EjectAvatarNoBan">
-		このアバターをあなたの土地から追放しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
-	</notification>
-	<notification name="EjectAvatarFullnameNoBan">
-		[AVATAR_NAME] をあなたの土地から追放しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
-	</notification>
-	<notification name="AcquireErrorTooManyObjects">
-		取得エラー:選択したオブジェクトの数が多すぎます。
-	</notification>
-	<notification name="AcquireErrorObjectSpan">
-		取得エラー:
-オブジェクトが複数の地域にまたがって存在しています。
-取得するオブジェクトは、
-すべて同じ地域内に移動させてください。
-	</notification>
-	<notification name="PromptGoToCurrencyPage">
-		[EXTRA]
-
-[_URL]に移動して貨幣購入に関する情報を確認しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="UnableToLinkObjects">
-		これらの[COUNT]オブジェクトをリンクできません。
-最大[MAX]オブジェクトをリンクすることができます。
-	</notification>
-	<notification name="CannotLinkIncompleteSet">
-		セットとして揃っているオブジェクトのみリンクできます。複数の
-オブジェクトを選択してください。
-	</notification>
-	<notification name="CannotLinkModify">
-		すべてのオブジェクトに対する修正許可があなたにないため、
-リンクできません。
-
-オブジェクトがすべてロックされておらず、あなたのものであることを確認してください。
-	</notification>
-	<notification name="CannotLinkDifferentOwners">
-		所有者が異なるため、すべてのオブジェクトを
-リンクできません。
-
-自分が所有しているオブジェクトだけを選択してください。
-	</notification>
-	<notification name="NoFileExtension">
-		ファイル「[FILE]」の拡張子が無効です。
-
-このファイルの拡張子が正しいかどうかを確認してください。
-	</notification>
-	<notification name="InvalidFileExtension">
-		ファイル拡張子[EXTENSION]は無効です
-正しい拡張子:[VALIDS]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotUploadSoundFile">
-		読み込みのためにアップロードされたサウンドファイルを開けません:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotRIFF">
-		ファイルがRIFF WAVEファイルとして認識されません:
-[FILE]
-	</notification>
-	<notification name="SoundFileNotPCM">
-		ファイルがPCM WAVEオーディオ・ファイルとして認識されません:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidChannelCount">
-		ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidSampleRate">
-		ファイルのサンプル・レートがサポート外です(44.1kを指定する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidWordSize">
-		ファイルのワード・サイズがサポート外です(8または16ビットを指定する必要があります):
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidHeader">
-		WAVヘッダーにデータ・チャンクが見つかりません:
-[FILE]
-	</notification>
-	<notification name="SoundFileInvalidTooLong">
-		オーディオ・ファイルが長すぎます。(最大10秒):
-[FILE]
-	</notification>
-	<notification name="ProblemWithFile">
-		ファイル[FILE]にエラーがあります。
-
-[ERROR]
-	</notification>
-	<notification name="CannotOpenTemporarySoundFile">
-		書き込み用の一時圧縮サウンド・ファイルを開くことができません:[FILE]
-	</notification>
-	<notification name="UnknownVorbisEncodeFailure">
-		未知のVorbis 暗号化に失敗: [FILE]
-	</notification>
-	<notification name="CannotEncodeFile">
-		次のファイルのエンコードができません: [FILE]
-	</notification>
-	<notification name="CorruptResourceFile">
-		破損したリソースファイル: [FILE]
-	</notification>
-	<notification name="UnknownResourceFileVersion">
-		未知のlindenリソースファイルのバージョン: [FILE]
-	</notification>
-	<notification name="UnableToCreateOutputFile">
-		服装ファイルを作成できません: [FILE]
-	</notification>
-	<notification name="DoNotSupportBulkAnimationUpload">
-		アニメーションファイルのバルクアップロードは現在サポートされていません。
-	</notification>
-	<notification name="CannotUploadReason">
-		次の理由で、[FILE] をアップロードできません: [REASON]
-あとでもう一度試してください。
-	</notification>
-	<notification name="CannotCreateLandmarkNotOwner">
-		土地の所有者が許可していないため、
-ランドマークを作成することはできません。
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoScripts">
-		再編集は不可能です。
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotRecompileSelectObjectsNoPermission">
-		「再編集」は不可能です。
-
-変更修正権限のある
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotResetSelectObjectsNoScripts">
-		「再設定」を行うことができません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotResetSelectObjectsNoPermission">
-		「再設定」を行うことができません。
-
-変更修正権限のある
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotSetRunningSelectObjectsNoScripts">
-		スクリプトの「実行」の設定ができません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
-		スクリプトを「実行しない」に設定できません。
-
-スクリプト化されたオブジェクトを選択してください。
-	</notification>
-	<notification name="NoFrontmostFloater">
-		保存すべきfrontmostフロータがありません。
-	</notification>
-	<notification name="SeachFilteredOnShortWords">
-		指定した検索クエリは変更され、短すぎる語句は取り除かれています。
-
-検索語句: [FINALQUERY]
-	</notification>
-	<notification name="SeachFilteredOnShortWordsEmpty">
-		指定した検索語句が短すぎたため、検索は行われませんでした。
-	</notification>
-	<notification name="CouldNotTeleportReason">
-		テレポートに失敗しました。
-[REASON]
-	</notification>
-	<notification name="invalid_tport">
-		テレポート・リクエストの処理中に問題が発生しました。テレポートするには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-	</notification>
-	<notification name="invalid_region_handoff">
-		地域間の移動の処理中に問題が発生しました。地域間を移動するには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-	</notification>
-	<notification name="blocked_tport">
-		申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
-やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
-	</notification>
-	<notification name="nolandmark_tport">
-		残念ながら、システムはランドマーク目的地を探せませんでした。
-	</notification>
-	<notification name="timeout_tport">
-		申し訳ございません。システムはテレポート接続を完了できませんでした。
-もう少し後でやり直してください。
-	</notification>
-	<notification name="noaccess_tport">
-		残念ながら、そのテレポート目的地へのアクセスがありません。
-	</notification>
-	<notification name="missing_attach_tport">
-		添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
-	</notification>
-	<notification name="too_many_uploads_tport">
-		この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
-数分後にやり直すか、または混雑していない他の地域をお試しください。
-	</notification>
-	<notification name="expired_tport">
-		申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
-	</notification>
-	<notification name="expired_region_handoff">
-		申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
-数分後にやり直してください。
-	</notification>
-	<notification name="no_host">
-		テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
-	</notification>
-	<notification name="no_inventory_host">
-		持ち物システムは現在利用できません。
-	</notification>
-	<notification name="CannotSetLandOwnerNothingSelected">
-		土地所有者設定ができません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotSetLandOwnerMultipleRegions">
-		複数の地域が選択されたため、
-土地の所有権を取得できません。
-選択する面積を小さくして、もう一度試してください。
-	</notification>
-	<notification name="ForceOwnerAuctionWarning">
-		この区画はオークションに出品されています。
-区画の所有権を取得するとオークションが無効になり、
-入札が開始していたら不満に思う住人が出てくるかもしれません。
-所有権を取得しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotContentifyNothingSelected">
-		コンテンツ化は不可能です:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotContentifyNoRegion">
-		コンテンツ化は不可能です:
-土地が選択されていません。
-	</notification>
-	<notification name="CannotReleaseLandNothingSelected">
-		土地を破棄することができません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotReleaseLandNoRegion">
-		土地を破棄できません:
-地域が見つかりません。
-	</notification>
-	<notification name="CannotBuyLandNothingSelected">
-		土地を購入できません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotBuyLandNoRegion">
-		土地を購入できません:
-この土地がある地域を見つけることができません
-	</notification>
-	<notification name="CannotCloseFloaterBuyLand">
-		[APP_NAME]による、
-この取引の見積りが完了するまで「土地を購入」ウィンドウを閉じることはできません。
-	</notification>
-	<notification name="CannotDeedLandNothingSelected">
-		土地を譲渡できません:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotDeedLandNoGroup">
-		土地を譲渡できません:
-グループが選択されていません。
-	</notification>
-	<notification name="CannotDeedLandNoRegion">
-		土地を譲渡できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotDeedLandMultipleSelected">
-		土地を譲渡できません:
-複数の区画が選択されています。
-
-これより1つの区画を選択してください。
-	</notification>
-	<notification name="ParcelCanPlayMedia">
-		ここではストリーミング・メディア再生が可能です。
-メディアのストリーミングには、高速なインターネット接続環境が必要です。
-
-利用可能になったら再生しますか?
-(このオプションは、「環境設定」>「音声とビデオ」で後からでも変更できます)
-		<usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアを再生"/>
-	</notification>
-	<notification name="CannotDeedLandWaitingForServer">
-		土地を譲渡できません:
-サーバーからの所有権情報を待っています。
-
-再度、試みてください。
-	</notification>
-	<notification name="CannotDeedLandNoTransfer">
-		土地を譲渡できません:
-この地域 [REGION] では土地の譲渡が許されていません。
-	</notification>
-	<notification name="CannotReleaseLandWatingForServer">
-		土地を破棄できません:
-サーバーが区画情報を更新するのを待っています。
-
-もう少し後でやり直してください。
-	</notification>
-	<notification name="CannotReleaseLandSelected">
-		土地を破棄できません:
-あなたは、選択したすべての区画を所有していません。
-
-1つの区画を選択してください。
-	</notification>
-	<notification name="CannotReleaseLandDontOwn">
-		土地を破棄できません:
-あなたはこの土地を手放すことを許可されていません。
-あなたの区画は緑色で表示されています。
-	</notification>
-	<notification name="CannotReleaseLandRegionNotFound">
-		土地を破棄できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotReleaseLandNoTransfer">
-		土地を破棄できません:
-この [REGION] では土地の譲渡が許されていません。
-	</notification>
-	<notification name="CannotReleaseLandPartialSelection">
-		土地を破棄できません:
-区画全体を選択して破棄する必要があります。
-
-区画全体を選択するか、または、まず最初に区画を分割してください。
-	</notification>
-	<notification name="ReleaseLandWarning">
-		あなたは、[AREA]平方メートルの土地を破棄しようとしています。
-この区画を破棄するとあなたの土地ではなくなりますが、
-L$は返金されません。
-
-土地を破棄しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNothingSelected">
-		土地を分割できません:
-
-区画が選定されていません。
-	</notification>
-	<notification name="CannotDivideLandPartialSelection">
-		土地を分割できません:
-
-区画全体が選択されています。
-区画の一部を選択してください。
-	</notification>
-	<notification name="LandDivideWarning">
-		この土地を分割すると、2つの区画に別れます。
-区画ごとの設定が可能になります。 この操作を行うと、一部の設定がデフォルトにリセットされます。
-
-土地の分割操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="CannotDivideLandNoRegion">
-		土地を分割できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotJoinLandNoRegion">
-		土地を統合できません:
-この土地がある地域が見つかりません。
-	</notification>
-	<notification name="CannotJoinLandNothingSelected">
-		土地を統合できませんでした:
-区画が選定されていません。
-	</notification>
-	<notification name="CannotJoinLandEntireParcelSelected">
-		土地を統合できません:
-1つの区画しか選択されていません。
-
-両方の区画をまたいで土地を選択してください。
-	</notification>
-	<notification name="CannotJoinLandSelection">
-		土地を統合できません:
-1つ以上の区画を選択する必要があります。
-
-両方の区画をまたいで土地を選択してください。
-	</notification>
-	<notification name="JoinLandWarning">
-		この土地を統合すると、選択された長方形に交差する
-全ての区画を基にして1つの大きな区画が作成されます。
-新しい区画の名前とオプションを再設定する必要があります。
-
-土地を統合しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ShowOwnersHelp">
-		オーナーを表示:
-区画に色を付けてオーナーの種類を表示
-
-緑 = あなたの土地
-アクア = あなたのグループ所有地
-赤 = 他人が所有する土地
-黄色 = 売り出し中
-紫 = オークション
-グレー = パブリック
-	</notification>
-	<notification name="ConfirmNotecardSave">
-		このアイテムをコピー、表示する前に、ノートカードの保存が必要です。 保存しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmItemCopy">
-		このアイテムをあなたの持ち物にコピーしますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="コピー"/>
-	</notification>
-	<notification name="ResolutionSwitchFail">
-		解像度を [RESX]x[RESY]に切り替えることができませんでした。
-	</notification>
-	<notification name="ErrorUndefinedGrasses">
-		エラー:未定義の植物:[SPECIES]
-	</notification>
-	<notification name="ErrorUndefinedTrees">
-		エラー:未定義の樹木:[SPECIES]
-	</notification>
-	<notification name="CannotSaveWearableOutOfSpace">
-		「[NAME]」を服のファイルに保存できません。  コンピューターの
-ディスクスペースを少し増やしてから、もう一度
-保存してみてください。
-	</notification>
-	<notification name="CannotSaveToAssetStore">
-		[NAME]を中央資産格納庫に保存できません。
-これは一時的な不具合です。
-服飾品などをカスタマイズし、数分後にもう一度保存してください。
-	</notification>
-	<notification name="YouHaveBeenLoggedOut">
-		あなたは[SECOND_LIFE]からログアウトされました。
-            [MESSAGE]
-「IMとチャットを表示」をクリックすると、
-現在あるIMとチャットを確認できます。
-確認しない場合は「終了」をクリックし、
-すぐに[APP_NAME]を終了してください。
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="IMとチャットを表示"/>
-	</notification>
-	<notification name="OnlyOfficerCanBuyLand">
-		グループ用の土地の購入ができません:
-あなたにはアクティブなグループのために土地を購入する権限がありません。
-	</notification>
-	<notification label="フレンドを追加" name="AddFriend">
-		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
-
-[NAME] にフレンドシップを送りますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="フレンドを追加" name="AddFriendWithMessage">
-		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
-
-[NAME] にフレンドシップのオファーをしますか?
-		<form name="form">
-			<input name="message">
-				フレンドとして登録してくれますか?
-			</input>
-			<button name="Offer" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="RemoveFromFriends">
-		[FIRST_NAME] [LAST_NAME]をフレンドリストから削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="RemoveMultipleFromFriends">
-		フレンドリストから複数のフレンドを削除しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのスクリプト・オブジェクトをこのシム内の他のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllScriptedObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのスクリプト・オブジェクトをこのシム内のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GodDeleteAllObjectsByUser">
-		**[AVATAR_NAME]**
-所有のすべてのオブジェクト(スクリプト・オブジェクトと非スクリプト・オブジェクト)を
-このシム内のすべての土地から削除しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BlankClassifiedName">
-		クラシファイドに名前を指定してください。
-	</notification>
-	<notification name="MinClassifiedPrice">
-		広告料の支払い金額は、Lと[MIN_PRICE]が下限です。
-
-金額を増やしてください。
-	</notification>
-	<notification name="ConfirmObjectDeleteLock">
-		選択したアイテムの1つ以上がロックされています。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopy">
-		選択したアイテムの1つ以上がコピーできません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoOwn">
-		選択したアイテムの1つ以上を、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopy">
-		一つ以上のオブジェクトがロックされています。
-一つ以上のオブジェクトがコピーできません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoOwn">
-		一つ以上のオブジェクトがロックされています。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
-		一つ以上のオブジェクトがコピーできません。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
-		一つ以上のオブジェクトがロックされています。
-一つ以上のオブジェクトがコピーできません。
-1つ以上のオブジェクトを、あなたは所有していません。
-
-本当にこれらのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLock">
-		一つ以上のオブジェクトがロックされています。
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeNoOwn">
-		取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
-あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
-そのため、将来、変更やコピーの能力が制限される可能性があります。
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmObjectTakeLockNoOwn">
-		1つ以上のオブジェクトがロックされています。
-取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
-あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
-そのため、将来、変更やコピーの能力が制限される可能性があります。
-この選択内容のままで続行することは可能ですが、
-
-これらのアイテムの取得を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CantBuyLandAcrossMultipleRegions">
-		複数の地域が選択されたため、土地を購入できません。
-
-選択する面積を小さくしてもう一度試してください。
-	</notification>
-	<notification name="DeedLandToGroup">
-		この区画の譲渡に際しては、
-このグループが十分な土地クレジットを保有および維持していることが必要です。
-土地の購入価格は、オーナーに返金されません。譲渡された区画が売れると、販売価格はグループ・メンバーに均等に分配されます。
-
-この[AREA]平方メートルの土地を、グループ
-「[GROUP_NAME]」に譲渡しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DeedLandToGroupWithContribution">
-		この区画の譲渡に際しては、このグループが
-十分な土地クレジットを保有および維持していることが必要です。
-この譲渡により、
-「[FIRST_NAME] [LAST_NAME]」から
-グループに対して土地が同時に提供されます。
-土地の購入価格は、オーナーに返金されません。
-譲渡された区画が売れると、販売料金はグループ・メンバーに均等に分配されます。
-
-この[AREA]平方メートルの土地を、グループ「[GROUP_NAME]」に譲渡しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="DisplaySetToSafe">
-		-safeオプションを指定したので、
-表示設定はセーフ・レベルに設定されています。
-	</notification>
-	<notification name="DisplaySetToRecommended">
-		表示設定は、あなたのシステム構成に
-基づいて推奨されたレベルに設定されています。
-	</notification>
-	<notification name="ErrorMessage">
-		[ERROR_MESSAGE]
-	</notification>
-	<notification name="AvatarMoved">
-		あなたが訪れたい[TYPE]のロケーションは現在ご利用できません。 [HELP]
-近くの地域に移動しました。
-	</notification>
-	<notification name="ClothingLoading">
-		あなたの服をダウンロード中です。
-通常どおりに[SECOND_LIFE]を使え、
-他のユーザーもあなたを正常に見ることができます。
-		<form name="form">
-			<ignore name="ignore" text="服のダウンロードに長い時間がかかる場合"/>
-		</form>
-	</notification>
-	<notification name="FirstRun">
-		[APP_NAME]のインストールが完了しました。
-
-[SECOND_LIFE] の使用が初めての方は、
-ログイン前にアカウントの作成が必要です。
-www.secondlife.comに移動し、新規アカウントの作成を行いますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="新規アカウント..."/>
-	</notification>
-	<notification name="LoginPacketNeverReceived">
-		接続に問題が生じています。 あなたのインターネット接続、または[SECOND_LIFE] サーバーに問題がある可能性があります。
-
-インターネット接続を確認して数分後にもう一度試みるか、「ヘルプ」をクリックして当社のサポートサイトに接続してください。または、「テレポート」をクリックしてホームにテレポートしてみてください。
-		<form name="form">
-			<button name="OK" text="OK"/>
-			<button name="Help" text="ヘルプ"/>
-			<button name="Teleport" text="テレポート"/>
-		</form>
-	</notification>
-	<notification name="WelcomeChooseSex">
-		まもなくあなたのアバターが表示されます。
-
-矢印キーを使用して歩きます。
-ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、
-F1キーを押してください。
-男性あるいは女性のアバターを選択してください。
-あなたの決定は後で変更できます。
-		<usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
-	</notification>
-	<notification name="NotEnoughCurrency">
-		[NAME] L$[PRICE] 残高不足のため実行不可です。
-	</notification>
-	<notification name="GrantedModifyRights">
-		あなたには、
-[FIRST_NAME] [LAST_NAME]
-のオブジェクトを修正する権限が与えられています。
-	</notification>
-	<notification name="RevokedModifyRights">
-		[FIRST_NAME] [LAST_NAME]
-のオブジェクトを修正する権限が取り消されました。
-	</notification>
-	<notification name="FlushMapVisibilityCaches">
-		この手順は、この地域の地図のキャッシュを消去します。
-これが便利なのはデバッグ時のみです。
-(作成中は5分間経つと、全員の地図が再度ログイン後に
-更新されます)
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyOneObjectOnly">
-		一度に一つ以上のオブジェクトをと買うことはできません。  オブジェクトを一つだけ選んでもう一度お試しください。
-	</notification>
-	<notification name="OnlyCopyContentsOfSingleItem">
-		一度に複数のアイテムのコンテンツはコピーできません。
-選択するオブジェクトを1つだけにして、もう一度試してください。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="KickUsersFromRegion">
-		この地域の全ての住人をホームにテレポートしますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="EstateObjectReturn">
-		[USER_NAME]が所有しているオブジェクトを返却しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="InvalidTerrainBitDepth">
-		地域テクスチャを設定できませんでした:
-地形テクスチャ[TEXTURE_NUM]は、無効のビット深度[TEXTURE_BIT_DEPTH]です。
-
-テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
-	</notification>
-	<notification name="InvalidTerrainSize">
-		地域テクスチャを設定できませんでした:
-地形テクスチャ[TEXTURE_NUM]は、[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]では大きすぎます。
-
-テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
-	</notification>
-	<notification name="RawUploadStarted">
-		アップロード開始。 接続速度によっては、
-最大2分間かかります。
-	</notification>
-	<notification name="ConfirmBakeTerrain">
-		現在の地形を構築しようとしています。
-この操作を行うと、現在の地形が上昇/下降の制限範囲の中心になり、「復帰」ツールのデフォルトになります。
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="MaxAllowedAgentOnRegion">
-		許可住人は [MAX_AGENTS] 人までです。
-	</notification>
-	<notification name="MaxBannedAgentsOnRegion">
-		禁止住人は[MAX_BANNED]人までです。
-	</notification>
-	<notification name="MaxAgentOnRegionBatch">
-		[NUM_ADDED] 個のエージェントを追加しようとして失敗しました: [MAX_AGENTS] [LIST_TYPE] 制限を [NUM_EXCESS] 個超過しています。
-	</notification>
-	<notification name="MaxAllowedGroupsOnRegion">
-		許可グループは[MAX_GROUPS]グループまでです。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="構築する"/>
-	</notification>
-	<notification name="MaxManagersOnRegion">
-		不動産マネージャーは[MAX_MANAGER]人までです。
-	</notification>
-	<notification name="OwnerCanNotBeDenied">
-		不動産オーナーを不動産「禁止住人」リストに追加できません。
-	</notification>
-	<notification name="CanNotChangeAppearanceUntilLoaded">
-		服および形がロードされるまで、容姿の変更はできません。
-	</notification>
-	<notification name="ClassifiedMustBeAlphanumeric">
-		クラシファイド広告の名前は、アルファベットか
-数字で始めます。  句読点では始められません。
-	</notification>
-	<notification name="CantSetBuyObject">
-		オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。
-販売対象のオブジェクトを設定し、もう一度試してください。
-	</notification>
-	<notification name="FinishedRawDownload">
-		未加工の地形ファイルを次へとダウンロードしました:
-[DOWNLOAD_PATH]。
-	</notification>
-	<notification name="DownloadWindowsMandatory">
-		[APP_NAME]の新しいバージョンが利用可能です。
-[MESSAGE]
-[APP_NAME]を使用するためには、
-このアップデートをダウンロードする必要があります。
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadWindows">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadWindowsReleaseForDownload">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMacMandatory">
-		[APP_NAME]の新しいバージョンが利用可能です。
-[MESSAGE]
-[APP_NAME]を使用するために、
-このアップデートをダウンロードする必要があります。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMac">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DownloadMacReleaseForDownload">
-		[APP_NAME]のアップデート・バージョンが利用可能です。
-[MESSAGE]
-このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
-
-アプリケーションがあるフォルダにダウンロードしますか?
-		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
-	</notification>
-	<notification name="DeedObjectToGroup">
-		このオブジェクトを譲渡するとグループは以下のことが可能です:
-* オブジェクトに支払われたL$を受領します。
-		<usetemplate ignoretext="オブジェクトをグループに譲渡するとき" name="okcancelignore" notext="取り消し" yestext="譲渡"/>
-	</notification>
-	<notification name="WebLaunchExternalTarget">
-		お使いのシステムのウェブ・ブラウザを開いて、この内容を表示しますか?
-		<usetemplate ignoretext="お使いのシステムのブラウザを開いてウェブ・ページを表示しようとしたとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchJoinNow">
-		www.secondlife.comに移動してアカウントを管理しますか?
-		<usetemplate ignoretext="アカウントを管理するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchSecurityIssues">
-		[SECOND_LIFE] Wikiで、
-セキュリティ問題を報告する方法をご覧ください。
-		<usetemplate ignoretext="セキュリティ問題Wikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchQAWiki">
-		[SECOND_LIFE] 品質保証関連Wikiをご覧ください。
-		<usetemplate ignoretext="品質保証関連Wikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchPublicIssue">
-		[SECOND_LIFE]のパブリック問題トラッカーで、
-バグやその他の問題を報告できます。
-		<usetemplate ignoretext="パブリック問題トラッカーを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
-	</notification>
-	<notification name="WebLaunchPublicIssueHelp">
-		[SECOND_LIFE] Wikiで、
-パブリック問題トラッカーの使用方法をご覧ください。
-		<usetemplate ignoretext="パブリック問題トラッカーWikiを閲覧するためにウェブ・ブラウザを起動するにあたって" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
-	</notification>
-	<notification name="WebLaunchSupportWiki">
-		Linden公式ブログで、最新のニュースや情報を入手してください。
-		<usetemplate ignoretext="ブログを表示するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLGuide">
-		スクリプトガイドを開いて、スクリプトのヘルプを参照しますか?
-		<usetemplate ignoretext="LSLガイドを表示するため、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="WebLaunchLSLWiki">
-		LSLポータルを開いてスクリプトのヘルプを参照しますか?
-		<usetemplate ignoretext="LSLポータルを表示するために、ウェブ・ブラウザを起動するとき" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ReturnToOwner">
-		選択したオブジェクトを、所有者に返却しますか?
-譲渡可能なオブジェクトは
-以前の所有者に返却されます。
-
-*警告* 移転が不可能の譲渡されたオブジェクトは削除されます!
-		<usetemplate ignoretext="オブジェクトを持ち主に返却するとき" name="okcancelignore" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="GroupLeaveConfirmMember">
-		現在あなたは [GROUP]のメンバーです。
-ここから抜けますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmKick">
-		すべてのユーザーをグリッド外にキックしようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="全てのユーザを追い出す"/>
-	</notification>
-	<notification name="MuteLinden">
-		残念ながらLindenを無視設定に入れることはできません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CannotStartAuctionAlreadyForSale">
-		既に売り出し中の区画なのでオークションにかけることはできません。  オークションにかけたい場合は売り出し設定を解除してから行ってください。
-	</notification>
-	<notification label="オブジェクトを名前でミュートできませんでした" name="MuteByNameFailed">
-		あなたはすでにこの名前をミュートしています。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RemoveItemWarn">
-		コンテンツを削除すると、許可があっても、オブジェクトにダメージを与えることがあります。
-そのアイテムの削除を続けますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferCallingCard">
-		現在コーリングカードを送れません。数分後にもう一度試してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="CantOfferFriendship">
-		現在フレンドシップを送れません。数分後に試してください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="BusyModeSet">
-		取り込み中に設定されました。
-チャットとインスタント・メッセージ(IM)が隠れます。
-相手は「取り込み中応答メッセージ」をIMで受け取ります。
-テレポートのオファーは全て拒否され、持ち物のオファーは全てゴミ箱に送られます。
-		<usetemplate ignoretext="取り込み中の設定をするとき" name="okignore" yestext="OK"/>
-	</notification>
-	<notification name="JoinedTooManyGroupsMember">
-		あなたは現在メンバーになっているグループが多すぎるため、
-他のグループに参加できません。少なくとも1つのグループを脱退してからこのグループに参加するか、この招待を断ってください。
-グループを抜けるには、編集メニューから「グループ...」オプションをを選択します。
-[NAME]は、あなたをメンバーとしてグループに招待しています。
-[INVITE]
-		<usetemplate name="okcancelbuttons" notext="辞退" yestext="参加"/>
-	</notification>
-	<notification name="KickUser">
-		どんなメッセージを表示して、このユーザーを追い出しますか?
-		<form name="form">
-			<input name="message">
-				あなたは管理者によりログオフされました。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="KickAllUsers">
-		どんなメッセージを表示して、グリッドにいる全員を追い出しますか?
-		<form name="form">
-			<input name="message">
-				あなたは管理者によりログオフされました。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="FreezeUser">
-		どんなメッセージを表示して、このユーザーをフリーズしますか?
-		<form name="form">
-			<input name="message">
-				あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="UnFreezeUser">
-		どんなメッセージを表示して、このユーザーのフリーズを解除しますか?
-		<form name="form">
-			<input name="message">
-				もうフリーズされていません。
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleport">
-		次のメッセージを添えてあなたが今いる場所へのテレポートを送りますか?
-		<form name="form">
-			<input name="message">
-				[REGION]に来ませんか?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="OfferTeleportFromGod">
-		ユーザーをゴッド・コールで呼び寄せますか?
-		<form name="form">
-			<input name="message">
-				[REGION]に来ませんか?
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="TeleportFromLandmark">
-		本当にテレポートしますか?
-		<usetemplate ignoretext="持ち物のランドマークからテレポートする時" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
-	</notification>
-	<notification label="あなたの不動産内の全員にメッセージを送信" name="MessageEstate">
-		今あなたの不動産にいる人全員に送る
-短いメッセージを入力してください。
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification label="Lindenの不動産を変更" name="ChangeLindenEstate">
-		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)を変更しようとしています。
-
-これはユーザーの経験を根本から揺るがしかねない「非常に危険な行為」です。これにより、メインランドで多数の地域が変更され、スペースサーバーに悪影響が生じます。
-
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="Lindenの不動産へのアクセスを変更" name="ChangeLindenAccess">
-		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)へのアクセスリストを変更しようとしています。
-
-この行為は「危険」であり、グリッドからオブジェクトやお金の転送をもたらすハッキングを引き起こす可能性があるため、完全にそれを意図した場合のみ行うべきものです。
-これにより多数の地域が変更され、スペースサーバーに悪影響が生じます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedAgentAdd">
-		この不動産の許可リストだけに追加しますか? それとも[ALL_ESTATES]のすべての許可リストに追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedAgentRemove">
-		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedGroupAdd">
-		この不動産のグループ許可リストだけに追加しますか? それとも[ALL_ESTATES]のグループ許可リストに追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateAllowedGroupRemove">
-		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateBannedAgentAdd">
-		この不動産についてのみアクセスを拒否しますか? それとも[ALL_ESTATE]へのアクセスを拒否しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateBannedAgentRemove">
-		この住人を、この不動産のみ、または[ALL_ESTATES]へとアクセスできるように、禁止リストから削除しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateManagerAdd">
-		この不動産のみ、または[ALL_ESTATES]に対して、不動産マネージャーを追加しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="不動産を選択" name="EstateManagerRemove">
-		不動産マネージャーを、この不動産のみ、または[ALL_ESTATES]から、削除しますか?
-		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
-	</notification>
-	<notification label="キックを確認" name="EstateKickUser">
-		この不動産から[EVIL_USER]を追い出しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="EstateChangeCovenant">
-		不動産約款を変更しようとしています。操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_KB">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって地域(リージョン)に入れないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Notify">
-		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
-	</notification>
-	<notification name="RegionEntryAccessBlocked_Change">
-		あなたのレーティング区分設定により、その地域(リージョン)へは入ることができません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-	<form name="form">
-      <button
-       name="OK"
-       text="設定の変更"/>
-      <button
-       default="true"
-       name="Cancel"
-       text="閉じる"/>
-       <ignore name="ignore" text="レーティング区分設定によって地域(リージョン)に入れないとき"/>
-    </form>
-	</notification>
-	<notification name="LandClaimAccessBlocked">
-		あなたのレーティング区分により、この土地を取得することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_KB">
-		あなたのレーティング区分により、この土地を取得することはできません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって土地を取得できないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="LandClaimAccessBlocked_Notify">
-		あなたのレーティング区分により、この土地を取得することはできません。
-	</notification>
-	<notification name="LandClaimAccessBlocked_Change">
-		あなたのレーティング区分設定により、この土地を取得することはできません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-		<usetemplate ignoretext="レーティング区分設定によって土地を取得できないとき" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked">
-		あなたのレーティング区分により、この土地を購入することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
-
-最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_KB">
-		あなたのレーティング区分により、この土地を購入することはできません。
-
-ナレッジベースを開きレーティング区分について学びますか?
-		<url name="url">
-			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
-		</url>
-		<usetemplate ignoretext="レーティング区分によって土地を購入できないとき" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
-	</notification>
-	<notification name="LandBuyAccessBlocked_Notify">
-		あなたのレーティング区分により、この土地を購入することはできません。
-	</notification>
-	<notification name="LandBuyAccessBlocked_Change">
-		あなたのレーティング区分設定により、この土地を購入することができません。
-
-「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
-あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
-		<usetemplate ignoretext="レーティング区分設定によって土地を購入できないとき" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
-	</notification>
-	<notification name="TooManyPrimsSelected">
-		選択したプリムが多すぎます。
-[MAX_PRIM_COUNT] を選択するか、
-プリム数を減らしてもう一度お試しください。
-	</notification>
-	<notification name="ProblemImportingEstateCovenant">
-		不動産約款のインポート時に問題発生。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ProblemAddingEstateManager">
-		新しい不動産マネージャーの追加に関する問題:
-1つ以上の不動産で、マネージャーリストが満杯になっています。
-	</notification>
-	<notification name="ProblemAddingEstateGeneric">
-		不動産リストの追加に関する問題:
-1つ以上の不動産で、リストが満杯になっています。
-	</notification>
-	<notification name="UnableToLoadNotecardAsset">
-		現在ノートカードの資産IDを読み込むことができません。
-	</notification>
-	<notification name="NotAllowedToViewNotecard">
-		要求された資産IDに関するノートカードを閲覧するには権限が不十分です。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MissingNotecardAssetID">
-		ノートカード用資産IDがデータベースに登録されていません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="PublishClassified">
-		注意:クラシファイド広告の料金は払い戻しされません。
-
-L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="SetClassifiedMature">
-		この広告にMatureコンテンツは含まれていますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="SetGroupMature">
-		この広告にMatureコンテンツは含まれていますか?
-		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification label="再起動を確認" name="ConfirmRestart">
-		この地域を2分後に再起動しようとしています。
-操作を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification label="この地域内の全員にメッセージを送信" name="MessageRegion">
-		この地域にいる人全員に送る
-短いメッセージを入力してください。
-		<form name="form">
-			<input name="message"/>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification label="土地整備をブロック" name="HelpRegionBlockTerraform">
-		このボックスがチェックされている場合、
-区画ごとの「領域を編集」の設定にかかわらず、土地オーナーは土地整備ができません。
-
-デフォルト:オフ
-	</notification>
-	<notification label="飛行をブロック" name="HelpRegionBlockFly">
-		このボックスをチェックすると、区画ごとの「飛行」設定に関わらず飛行ができなくなります。
-
-デフォルト:オフ
-	</notification>
-	<notification label="コンテンツ権限の一括変更" name="HelpBulkPermission">
-		権限の一括変更ツールでは、選択した複数のアイテムの権限を素早く変更することが可能です。
-しかし選択したオブジェクトのコンテンツの中身の権限設定をするだけで、オブジェクトそのものではないことにご注意ください。  
-
-また、権限は中にあるアイテムのその中身には適用されないこともご注意ください。  1段階層のアイテムのみへのリクエストとなります。
-
-「コンテンツの種類」にあるチェックリストを使って、修正するアイテムの種類を選択します。 テクスチャーを選択すると、スナップショットも含まれます。
-
-* このツールの使用は、
-あなたが変更することのできるアイテムにのみ有効です。
-* 次のオーナーの権限があなたにない場合は、適用されません。
-* 次のオーナーの権限は単にリクエストにすぎません。 どれか一つのアイテムでも新しい権限の設定を受け付けない場合、すべての権限の設定はそのまま維持されます。
-
-一括変更の準備ができたら、「適用」をクリックして結果が表示されるのをお待ちください。
-
-権限変更中に権限の一括変更ウィンドウを閉じた場合、処理は停止されます。
-	</notification>
-	<notification label="ダメージ許可" name="HelpRegionAllowDamage">
-		このボックスをチェックすると、
-各区画の個別の設定にかかわらず、全ての区画におけるヘルスシステムを有効にします。
-このボックスがチェックされていない場合でも、
-個別の区画のオーナーは、自分の区画に対するヘルスシステムを有効にできます。
-
-デフォルト: オフ
-	</notification>
-	<notification label="人物の制限" name="HelpRegionAgentLimit">
-		この地域に許可されるアバターの最大数を設定します。
-1つの地域にアバターが多いとパフォーマンスが
-低下する原因になるので注意してください。
-
-デフォルト: 40
-	</notification>
-	<notification label="物体ボーナス" name="HelpRegionObjectBonus">
-		オブジェクトボーナスは、区画において許可されているプリムの倍率数を意味します。
-認可されている範囲は1から10です。
-したがって、「1」に設定すると、512 m²の土地には、117のオブジェクトが許可されます。
-「2」に設定すると、同じ512 m²の土地には、1のときの2倍にあたる234のオブジェクトが許可され、3以降も同様に増えていきます。
-全地域の最高オブジェクト数は、オブジェクトボーナスの値に影響されず、
-15,000のまま変わりません。
-いったん決定した後でオブジェクトボーナスの値を下げると、オブジェクトが返却または削除される可能性がありますのでご注意ください。
-ディフォルト: 1.0
-	</notification>
-	<notification label="レーティング区分" name="HelpRegionMaturity">
-		住人のビューワ上部のメニューバーに表示される、地域(リージョン)のレーティング区分を設定します。
-世界地図上でカーソルをこの地域に乗せるとツールチップに表示されます。
-この設定はこの地域全体と検索結果に反映されます。
-他の住人は環境設定で選択したレーティング区分に合った地域に入ることができ、検索結果を見ることができます。
-
-地図にこの変更が反映するには数分かかることがあります。
-	</notification>
-	<notification label="プッシュを制限" name="HelpRegionRestrictPushObject">
-		このチェックボックスは、制限されたプッシュ権限を全地域に適用します。
-有効になっている場合、住人は自分自身でのプッシュ、
-あるいは区画の所有者によるプッシュだけに制限できます。
-(プッシュは、LSLの llPushObject() 機能を参照します。)
-
-デフォルト: オフ
-	</notification>
-	<notification label="区画統合/再分割" name="HelpParcelChanges">
-		このチェックボックスは、不動産オーナーが所有していない区画を統合または再分割できるかどうかを設定します。
-本オプションが無効な場合:
-*不動産オーナー、または管理者のみが、統合/再分割を行うことができます。
-*オーナー、または、適切な権限を持つグループに属する区画のみを
-統合/再分割することができます。
-本オプションが有効な場合:
-*全ての区画オーナーは、所有する区画の統合/再分割ができます。
-*グループ所有の区画は、適切な権限を持つグループに属する区画を統合/再分割することができます。
-
-デフォルト:チェックあり
-	</notification>
-	<notification label="検索で表示しない" name="HelpRegionSearch">
-		このボックスをチェックすると、区画のオーナーは、自分の区画が検索結果にリストされることを阻止できます。
-デフォルト:オフ
-	</notification>
-	<notification label="地域のレーティング区分指定変更済み" name="RegionMaturityChange">
-		この地域のレーティング区分指定がアップデートされました。
-この変更が地図に反映されるまでにはしばらく時間がかかります。
-	</notification>
-	<notification label="土地の再販" name="HelpRegionLandResell">
-		不動産のオーナーと管理者は、不動産オーナーの土地を販売することができます。
-このオプションをチェックしない場合、購入者が本地域における土地を再販することはできなくなります。
-このオプションをチェックした場合、購入者は本地域における土地を再販することができます。
-
-デフォルト:許可しない
-	</notification>
-	<notification label="スクリプトを無効化" name="HelpRegionDisableScripts">
-		スクリプトが原因でシムの状況が悪くなる場合があります。
-統計グラフをだして(Ctrl+Shift+1)、
-シミュレーターフィジックスFPSを見てください。
-45より数が低ければ、一番下に位置しているタイムパネルを開いてください。
-スクリプト時間が25ms以上であれば、
-「トップスクリプトを取得」ボタンをクリックします。
-悪影響を及ぼしているスクリプトの名前と位置が現れます。
-
-「スクリプトを無効にする」をチェックし「適用」をクリックすると、地域内の全てのスクリプトが一時的に無効になります。
-トップスクリプトで検索したスクリプトの位置まで到達するには、
-このステップが必要になる場合もあります。
-スクリプト位置に到着後、スクリプトを見て悪影響を与えているか調査してください。
-スクリプトの所有者に連絡するか、あるいはオブジェクトの削除または返却も考えられます。
-「スクリプトを無効にする」のチェックを外し、「適用」をクリックして地域全体のスクリプトを有効に戻してください。
-
-デフォルト:オフ
-	</notification>
-	<notification label="衝突を無効化" name="HelpRegionDisableCollisions">
-		物理的オブジェクトが原因で、
-シムの処理が重くなることがあります。
-統計グラフを開いて(Ctrl+Shift+1)、
-シミュレーターフィジックスFPSを見てください。
-数値が45より低ければ、統計バーの下に位置しているタイムパネルを開いてください。
-もしシムタイム(物理的作用)が20 msより長い場合は、
-「トップ・コライダーを取得」をクリックしてください。
-悪影響を及ぼしている可能性がある物理オブジェクトの名前と位置が現れます。
-
-「衝突を無効にする」をチェックし「適用」をクリックすると、
-オブジェクト同士の衝突が一時的に無効になります。
-当該のトップ・コライダーの位置まで到達するには
-上記のステップが必要になる場合もあります。
-到着後、オブジェクトを見て常時他のオブジェクトと衝突しているか調査してください。
-オブジェクトの所有者に連絡するか、あるいはオブジェクトの削除または返却を考慮すべきかもしれません。
-「衝突を無効にする」のチェックを外し、「適用」をクリックして
-地域全体の衝突を有効に戻してください。
-
-デフォルト:オフ
-	</notification>
-	<notification label="物理作用を無効化" name="HelpRegionDisablePhysics">
-		物理的作用を無効にすることは、物理的シミュレーション全ての無効を除いて、衝突を無効にすることと似ています。
-これは、オブジェクトの衝突を止めるのみならず、アバターの移動ができなくなることを意味します。
-
-この機能は、物理的な問題なのか、またはトップ・コライダーなのかを調査するにあたり、衝突の無効が地域に対して十分なパフォーマンスを発揮しない場合にのみ使用してください。
-
-終了する時には、物理的作用を再度可能に設定してください。
-そのままだと、アバターはずっと動けません。
-
-デフォルト:オフ
-	</notification>
-	<notification label="トップ・コライダー" name="HelpRegionTopColliders">
-		オブジェクト同士の衝突が最も多い可能性のある
-オブジェクトのリストを表示します。これらのオブジェクトは、
-パフォーマンスを低下させる可能性があります。
-ビューから統計バーを選択し、
-シミュレータ>時間>シム時間 (物理的作用) で、
-物理的作用に20 ms以上を費しているかを確認してください。
-	</notification>
-	<notification label="トップ・スクリプト" name="HelpRegionTopScripts">
-		LSLスクリプトの実行に一番時間を費やしているオブジェクトのリストを入手します。
-これらのオブジェクトは、パフォーマンスを低下させる可能性があります。
-ビューから統計バーを選択し、
-ミュレータ>時間>スクリプト時間で、
-スクリプトに25 ms以上を費しているかを確認してください。
-	</notification>
-	<notification label="地域を再起動" name="HelpRegionRestart">
-		2分後にサーバーが再起動されるという警告メッセージの後に、
-この地域のサーバープロセスを再起動します。
-この地域のすべての住人の接続が切断されます。
-地域のデータは保存され、90秒以内に回復します。
-
-この地域を再起動しても、ほとんどのパフォーマンスの問題に変化はありません。
-指示された時だけ利用してください。
-	</notification>
-	<notification label="水面の高さ" name="HelpRegionWaterHeight">
-		これは、水が現れる高さ(単位:メートル)です。
-この設定が20以外で、水が世界の
-端や、「空の」水に近ければ、
-溝が見えるでしょう。
-
-デフォルト: 20
-	</notification>
-	<notification label="地形の上昇" name="HelpRegionTerrainRaise">
-		この数値は、「ベーク」地形のデフォルトの高さ以上に、
-区画所有者が土地を上げることのできるメートル値です。
-
-デフォルト: 4
-	</notification>
-	<notification label="地形の下降" name="HelpRegionTerrainLower">
-		この数値は、「ベーク」地形のデフォルトの高さ以下に、
-区画所有者が土地を下げられるメートル値です。
-
-デフォルト: -4
-	</notification>
-	<notification label="RAW地形をアップロード" name="HelpRegionUploadRaw">
-		このボタンを使って、.RAW ファイルを
-現在あなたが居る地域にアップロードします。
-ファイルが必ず正しいサイズの256x256、RGB、
-また、チャンネル数が13であることを確認してください。
-地形(Terrain) ファイルを作成する最良の方法は、
-既存のRAWファイルをダウンロードすることです。
-まず最初のチャンネル(土地の高さ)を変更し、
-アップロードすることから始められます。
-
-アップロードには45秒ほどかかることがあります。
-ここで注意することは、地形ファイルのアップロードによって、土地に配置されているオブジェクトは「動かない」ということです。
-影響があるのは、地形自体と、土地に関係する許可のみです。
-よって、オブジェクトが地下に埋まってしまうことがあるのでご注意ください。
-
-地形設定編集の情報と詳細については、F1ヘルプをご覧ください。
-	</notification>
-	<notification label="RAW地形をダウンロード" name="HelpRegionDownloadRaw">
-		このボタンを押すと、標高フィールドデータ、
-区画寸法、売り出し区画ステータス、この地域における許可を
-含むファイルをダウンロードします。フォトショップのようなプログラムでこのファイルを開くには、
-以下のようなドキュメントのサイズを指定する必要があります:
-RGB、256x256で、チャンネル数が13
-この地形ファイルは、他の方法では開くことはできません。
-
-地形における標高フィールドの編集に関する詳細については、F1ヘルプをご覧ください。
-	</notification>
-	<notification label="不動産の太陽を使用" name="HelpRegionUseEstateSun">
-		このボックスがチェックされていると、この地域の太陽は
-不動産の他の場所における太陽と位置が同じになります。
-
-デフォルト: オン
-	</notification>
-	<notification label="太陽固定" name="HelpRegionFixedSun">
-		このボックスをチェックすると、太陽の位置は段階スライダー内に
-設定され、動かなくなります。
-デフォルト: オフ
-	</notification>
-	<notification label="地形を構築する" name="HelpRegionBakeTerrain">
-		このボタンにより、現在の地形の形状を新たなデフォルトとして保存します。
-一度ベークされると、あなたや他の人が地形編集の「復帰」オプション/ツールを使用した際に、保存された形状に回復できます。
-ベークされた地形は、地形上昇および下降境界の中間点でもあります。
-	</notification>
-	<notification label="不動産マネージャー" name="HelpEstateEstateManager">
-		不動産マネージャーとは、地域コントロールと
-不動産設定が委任された住人をさします。不動産マネージャーは、
-アップロード、ダウンロード、および地形構築を除いたパネル内の
-設定を変更できます。特筆すべきは、
-住人のアクセス許可または禁止の設定ができることです。
-
-不動産マネージャーの追加と削除は、不動産オーナーのみが行うことができ、マネージャー同士では不可能です。
-信頼できる住人のみ不動産マネージャーに任命してください。
-彼らの行動の全責任は、最終的にはあなたにあります。
-	</notification>
-	<notification label="グローバル・タイムを使用" name="HelpEstateUseGlobalTime">
-		このボックスがチェックされていると、
-あなたの所有地の太陽はLinden社所有のメインランドの不動産での太陽の位置に準じます。
-
-デフォルト: オン
-	</notification>
-	<notification label="太陽固定" name="HelpEstateFixedSun">
-		このボックスがチェックされていると、
-太陽の位置は段階スライダー内に設定され、動かなくなります。
-	</notification>
-	<notification label="パブリック・アクセス" name="HelpEstateExternallyVisible">
-		このチェックボックスは、
-他の不動産にいる住人が、アクセスリストに登録されていなくてもこの不動産に立ち入ることができるかどうかを設定します。
-
-デフォルト: オン
-	</notification>
-	<notification label="直接テレポートを許可" name="HelpEstateAllowDirectTeleport">
-		チェックされていると、不動産のどこにでも直接テレポートが
-可能になります。チェックされていないと、最も近いテレハブに
-テレポートします。
-
-デフォルト: オフ
-	</notification>
-	<notification label="アクセスを許可" name="HelpEstateAllowResident">
-		この不動産へのアクセスは、ここに登録されている住人と
-下記で特別に登録されたグループのみに許可されます。
-この設定は「パブリック・アクセス」がオフになってるときのみ使用可能です。
-	</notification>
-	<notification label="グループ・アクセスを許可" name="HelpEstateAllowGroup">
-		この不動産へのアクセスは、ここに登録されているグループと
-下記で特別に登録された住人のみに許可されます。
-この設定は「パブリック・アクセス」がオフになってるときのみ使用可能です。
-	</notification>
-	<notification label="嫌がらせに関するメール先" name="HelpEstateAbuseEmailAddress">
-		これを有効なメールアドレスに設定すると、そのアドレスにこの不動産において行われた
-嫌がらせの報告が送信されるようになります。
-設定を行わない場合(空白)、嫌がらせ報告は Linden Lab にのみ
-送信されます。
-	</notification>
-	<notification label="アクセス拒否" name="HelpEstateBanResident">
-		このリストの住人は、他の設定にかかわらず、あなたの不動産への
-アクセスが禁止されています。
-	</notification>
-	<notification label="ボイスチャットを許可" name="HelpEstateVoiceChat">
-		この不動産の区画は、住人が近所の人と対話できる
-独自のボイスチャンネルを持つことができます。
-
-デフォルト: オフ
-	</notification>
-	<notification label="ボイスバージョンの不一致" name="VoiceVersionMismatch">
-		このバージョンの [APP_NAME] は、
-この地域のボイスチャット機能に対応していません。
-ボイスチャットを正しく使用するには、
-[APP_NAME] のアップデートが必要です。
-	</notification>
-	<notification label="不動産約款" name="HelpEstateCovenant">
-		不動産約款を定めると、自分の不動産内の区画を販売できるようになります。
-約款を定めていないと土地は売れません。
-土地に関する規則を適用したくなかったり、購入前に土地に関する情報を購入者に知らせたくない場合、あなたの約款のノートカードは白紙でかまいません。
-
-約款は購入を考えている人に、規則、ガイドライン、文化的情報や
-単にあなたが期待することを伝えるためにも使えます。
-ここには、区画規制、建造物規制、支払いオプション、それから購入者が事前に目を通して同意しておくべきだとあなたが思う重要な情報をすべて入れることができます。
-
-購入者がボックスをチェックして約款に同意しないかぎり、購入の手続きは完了しません。
-不動産約款が定められている区画であれば、「土地情報」から約款をいつでも閲覧できます。
-	</notification>
-	<notification label="オブジェクトを購入できません" name="BuyObjectOneOwner">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択し、もう一度試してください。
-	</notification>
-	<notification label="コンテンツを購入できません" name="BuyContentsOneOnly">
-		一度に複数のオブジェクトのコンテンツは購入できません。
-選択するオブジェクトを1つだけにして、もう一度試してください。
-	</notification>
-	<notification label="コンテンツを購入できません" name="BuyContentsOneOwner">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択し、もう一度試してください。
-	</notification>
-	<notification name="BuyOriginal">
-		オリジナルのオブジェクトを[OWNER]からL$[PRICE]で購入しますか?
-これにより、あなたがオブジェクトのオーナーになります。
-可能な操作は、
-変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyOriginalNoOwner">
-		L$[PRICE]でオリジナルのオブジェクトを購入しますか?
-これにより、あなたがオブジェクトのオーナーになります。
-可能な操作は、
-変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopy">
-		コピーを[OWNER]からL$[PRICE]で購入しますか?
-購入したオブジェクトは、あなたの持ち物にコピーされます。
-可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyCopyNoOwner">
-		L$[PRICE]でコピーを購入しますか?
-購入したオブジェクトは、あなたの持ち物にコピーされます。
-可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
-再販/プレゼント[RESELLPERM]です。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyContents">
-		コンテンツを[OWNER]からL$[PRICE]で購入しますか?
-購入したコンテンツは、あなたの持ち物にコピーされます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="BuyContentsNoOwner">
-		L$[PRICE]でコンテンツを購入しますか?
-購入したコンテンツは、あなたの持ち物にコピーされます。
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchase">
-		この取引は以下のとおり行われます:
-[ACTION]
-
-この購入を続行しますか?
-		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmPurchasePassword">
-		この取引は以下のとおり行われます:
-[ACTION]
-
-この購入を続行しますか?
-パスワードを再入力し、「OK」をクリックしてください。
-		<form name="form">
-			<input name="message"/>
-			<button name="ConfirmPurchase" text="OK"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="SetPickLocation">
-		メモ:
-本ピックのロケーションを更新しましたが、
-他の詳細は元の値のままになります。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromObject">
-		「コピー禁止」の持ち物アイテムが選択されました。
-これらのアイテムはコピーされないまま、あなたの持ち物に移動されます。
-
-
-アイテムを動かしますか?
-		<usetemplate ignoretext="コピー禁止の持ち物をオブジェクトから移動させるとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="MoveInventoryFromScriptedObject">
-		「コピー禁止」の持ち物アイテムが選択されました。
-これらのアイテムはコピーされるのではなく、あなたの持ち物に移動されます。
-このオブジェクトはスクリプト付きなので、持ち物に移動させると
-スクリプトに誤動作が起きる可能性があります。
-
-持ち物アイテムを移動しますか?
-		<usetemplate ignoretext="コピー禁止の持ち物をスクリプト付きオブジェクトから移動させるとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ClickActionNotPayable">
-		警告:「クリックでオブジェクトに支払い」の設定がされました。
-ただし、これはスクリプトが金銭money() イベントに追加された場合にのみ作動します。
-		<form name="form">
-			<ignore name="ignore" text="money()イベントなしに「オブジェクトに支払う」を設定するとき"/>
-		</form>
-	</notification>
-	<notification name="OpenObjectCannotCopy">
-		このオブジェクトには、あなたがコピーできるアイテムはありません。
-	</notification>
-	<notification name="WebLaunchAccountHistory">
-		[SECOND_LIFE] ウェブ・ページを開いて
-アカウント履歴を確認しますか?
-		<usetemplate ignoretext="アカウント履歴のウェブ・ページをロードするとき" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
-	</notification>
-	<notification name="ClickOpenF1Help">
-		[SECOND_LIFE] のサポートウェブサイトを利用しますか?
-		<usetemplate ignoretext="[SECOND_LIFE] のサポートウェブサイトを閲覧するにあたって。" name="okcancelignore" notext="キャンセル" yestext="行く"/>
-	</notification>
-	<notification name="ConfirmQuit">
-		終了しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="[APP_NAME] の終了にあたって。" name="okcancelignore" notext="継続" yestext="終了"/>
-	</notification>
-	<notification name="HelpReportAbuseEmailLL">
-		利用規約違反とコミュニティースタンダード違反の報告にこのツールをご使用ください。 参照:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-利用規約違反とコミュニティースタンダード違反に関する全てのレポートは、調査され、解決されます。
-以下のリンク先の被害報告にてその確認をすることができます。
-
-http://secondlife.com/support/incidentreport.php
-	</notification>
-	<notification name="HelpReportAbuseEmailEO">
-		重要: このレポートはLinden Lab 社ではなく、
-あなたが現在いる地域のオーナーに送られます。
--
-あなたが今いる地域のオーナーは、
-住人と訪問者へのサービスの一環として、この地域からのレポートをすべて受け付け、解決することに同意しています。
-よってLinden Lab 社が、
-あなたがここから提出するレポートを調査することはありません。
-地域のオーナーは、不動産約款で指定している地元の規則を基に、報告された問題を解決します。
-(「世界」のメニューから「土地情報」を選ぶと、約款を閲覧できます)
--
-このレポートに関する解決策は、この地域にだけ当てはまります。
-住人が[SECOND_LIFE] の他の地域へアクセスする際、
-このレポートの結果に影響されることはありません。
-Linden Lab 社だけが[SECOND_LIFE] 全域における
-アクセス制限権を持っています。
-	</notification>
-	<notification name="HelpReportAbuseSelectCategory">
-		嫌がらせ報告のカテゴリを選択してください。
-カテゴリを選択することにより、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseAbuserNameEmpty">
-		嫌がらせ行為をした人の名前を入力してください。
-正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseAbuserLocationEmpty">
-		嫌がらせがあった場所を入力してください。
-正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseSummaryEmpty">
-		嫌がらせの概要を入力してください。
-正確な概要の入力により、
-嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseDetailsEmpty">
-		嫌がらせの詳細な説明を入力してください。
-名前や嫌がらせの詳細を、できるだけ具体的に入力してください。
-
-正確な説明の入力により、
-嫌がらせ報告の処理や保管に大変役立ちます。
-	</notification>
-	<notification name="HelpReportAbuseContainsCopyright">
-		住人の皆様へ、
-
-知的財産の侵害に関する報告を行う際には、以下の点に注意してください。
-
-(1) 嫌がらせの報告のプロセス
-[SECOND_LIFE] の権限システムを悪用している住人を見つけたら、
-嫌がらせの報告を行ってください。
-例えばコピーBotの使用、それに似たツールの使用による知的財産権の侵害があります。
-アビューズチームは調査に基づき、
-[SECOND_LIFE] のコミュニティースタンダードや
-利用規約に違反する行為と判断された場合には適切な処置を行っています。
-ただし、コンテンツを[SECOND_LIFE] から撤去してほしい、
-といった要望にはアビューズチームは応えることができません。
-
-(2) DMCA(デジタルミレニアム著作権法)及びコンテンツ撤去プロセス
-[SECOND_LIFE] からのコンテンツの撤去をリクエストするには、
-著作権侵害通知の提出を行う必要があります。
-参照: http://secondlife.com/corporate/dmca.php
-
-この件に関する嫌がらせの報告を続ける際は、このウィンドウを閉じてください。選択すべきカテゴリは「知的財産の侵害>コピーBot及び権限の悪用」のほうが適しているかもしれませんのでご確認ください。
-
-よろしくお願いします。
-
-Linden Lab
-	</notification>
-	<notification name="FailedRequirementsCheck">
-		以下の必要なコンポーネントが、[FLOATER]から抜け落ちています
-[COMPONENTS]
-	</notification>
-	<notification label="既存の付属品を置換" name="ReplaceAttachment">
-		体のこの部位にはオブジェクトが装着されています。
-選択されたオブジェクトと置き換えますか?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="現在、装着しているものを置換するとき"/>
-			<button ignore="自動的に交換" name="Yes" text="OK"/>
-			<button ignore="交換しない" name="No" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification label="取り込み中の警告" name="BusyModePay">
-		現在、取り込み中のため、この支払いと
-引き換えのアイテムを受け取ることが
-できません。
-
-この取引を完了する前に、取り込み中の設定を解除しますか?
-		<form name="form">
-			<ignore name="ignore" save_option="true" text="取り込み中の人またはオブジェクトに支払うとき"/>
-			<button ignore="常に取り込み中の設定" name="Yes" text="OK"/>
-			<button ignore="取り込み中の設定にしない" name="No" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ConfirmEmptyTrash">
-		ゴミ箱フォルダの中身を完全に削除しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="持ち物内の「ごみ箱」フォルダを空にするとき" name="okcancelignore" notext="キャンセル" yestext="OK"/>
-	</notification>
-	<notification name="ConfirmClearBrowserCache">
-		本当にブラウザのキャッシュをクリアしますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmClearCookies">
-		本当にクッキーをクリアしますか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmClearMediaUrlList">
-		保存された URL のリストを消去します。よろしいですか?
-		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
-	</notification>
-	<notification name="ConfirmEmptyLostAndFound">
-		遺失物フォルダの中身を完全に削除しようとしています。操作を続行しますか?
-		<usetemplate ignoretext="持ち物内の「遺失物」フォルダを空にするとき" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="CopySLURL">
-		以下のSLurlがクリップボードにコピーされました。
- [SLURL]
-
-他の人がアクセスしやすいようにウェブ・ページに載せたり、
-ブラウザのアドレス・バーに貼り付けて、自分でアクセスしてみましょう。
-		<form name="form">
-			<ignore name="ignore" text="SLurlをクリップボードにコピーするとき"/>
-		</form>
-	</notification>
-	<notification name="GraphicsPreferencesHelp">
-		このパネルでは、ウィンドウのサイズと解像度、およびクライアントのグラフィックの品質を設定することができます。「環境設定」>「表示」のインタフェースでは、低、中、高、超高の4つの中からグラフィック・レベルを選択できます。また、「カスタム」チェックボックスをクリックし、以下のグラフィックスの設定をカスタマイズすることもできます。
-
-シェーダー:ピクセル・シェーダーのさまざまな種類を有効または無効にします。
-
-反射詳細:水が反射するオブジェクトの種類を設定します。
-
-アバター・レンダリング:クライアントによるアバターのレンダリング方法に影響するオプションを設定します。
-
-描画距離:あなたの視点から視界のどのくらいの距離まで、オブジェクトがレンダリングされるかに影響します。
-
-最大パーティクル数:画面に一度に見ることができるパーティクルの最大数を設定します。
-
-ポストプロセス品質:グロー効果(輝き)がレンダリングされる際の解像度を設定します。
-
-メッシュ詳細: 特定のオブジェクトのレンダリング時の細部表現、または三角形の数を設定します。 値を大きくするほどレンダリングに時間がかかりますが、オブジェクトがより詳細に表示されます。
-
-ライティング詳細:レンダリングする光源の種類を選択します。
-
-地形詳細: 地形テクスチャの細部表現を設定します。
-	</notification>
-	<notification name="WLSavePresetAlert">
-		保存された事前設定を上書きしますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="WLDeletePresetAlert">
-		[SKY] を削除しますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="WLNoEditDefault">
-		デフォルトの設定を編集したり削除したりすることはできません。
-	</notification>
-	<notification name="WLMissingSky">
-		このデイ・サイクルのファイルは次の存在しない「空」ファイルを参照しています: [SKY]。
-	</notification>
-	<notification name="PPSaveEffectAlert">
-		ポストプロセス効果が存在します。 上書きしますか?
-		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="HelpEditSky">
-		ウィンドライトの各種スライダーを編集して空を作成および保存します。
-	</notification>
-	<notification name="HelpEditDayCycle">
-		1 日を通して変化する空の様子を設定します。
-	</notification>
-	<notification name="EnvSettingsHelpButton">
-		次の各設定はコンピュータ上でインワールドの環境がどのように表示されるかを調整します。  設定のすべてにアクセスするにはお使いのグラフィック・カードが周囲(大気)シェーダー (atmospheric shaders) をサポートしている必要があります。
-
-「時間帯」スライダーを調整することによりビューワで実際に使用する時間帯を変更できます。
-
-「雲の量」スライダーを調整することにより空をおおう雲の量を制御できます。
-
-「水の色」カラー・ピッカーで色を選択することにより水の色を変更できます。
-
-「水中のフォグ効果」スライダーを調整することにより水の透明度を制御できます。
-
-「不動産の時刻を使用」をクリックすることにより時刻はリセットされ地域の現在時刻に連動させることができます。
-
-「空の高度な設定」をクリックすることにより空のより高度な設定を行うための編集プログラムを起動できます。
-
-「水の高度な設定」をクリックすることにより水のより高度な設定を行うための編集プログラムを起動できます。
-	</notification>
-	<notification name="HelpDayCycle">
-		「デイ・サイクル編集」では、
-[SECOND_LIFE] での昼と夜の空の変化を制御できます。
-これは「基本環境編集」の「時間帯」スライダーで使用されるサイクルです。
-
-「デイ・サイクル編集」はキーフレームを設定することで機能します。
-各キーフレームにはプリセットされた空の設定が関連付けられています。(時間グラフに灰色の節として表示されます)
-ウィンドライト( WindLight )はキーフレーム間をデータ補間し、
-時間の経過とともに空の自然なアニメーションを作り出します。
-
-時間グラフの上に表示される黄色の矢印は、時刻をもとにした現在の眺めを表しています。
-黄色の矢印をクリック&ドラッグすることで、
-1 日の移り変わりを見ることができます。
-「キーの追加」ボタンまたは「キーの削除」ボタンを押して、
-時間グラフの右側にキーフレームを追加あるいは削除することができます。
-
-キーフレームの時刻を指定するには、
-時間グラフに沿ってドラッグするか「キーフレームの設定」のフレーム内で値を直接入力します。
-「キーフレームの設定」のフレーム内ではキーフレームにウィンドライト( WindLight )の事前設定を関連付けることができます。
-
-「サイクルの長さ」では1 日全体の時間を指定できます。
-この値を低く設定すると(例えば2分)、24 時間の時間グラフは
-実時間の 2 分間に相当することを意味します。
-時間グラフとキーフレーム・サイクルの設定が完了したら、
-「再生」ボタンと「停止」ボタンを使用して結果をプレビューしてみましょう。
-また、時間グラフ上の黄色い時刻表示矢印を移動することによってもサイクルの変化をインタラクティブに確認することができます。 「不動産の時刻を使用」ボタンを使用することで日の長さと時刻が不動産のデイ・サイクルに同期されます。
-
-デイ・サイクルの設定が完了したら、「デイ・テストを保存」ボタンおよび「デイ・テストをロード」ボタンを使用してデイ・サイクルを保存およびロードします。
-尚、現在の仕様ではデイ・サイクルで指定できるのは
-1 日分だけです。
-	</notification>
-	<notification name="HelpBlueHorizon">
-		空の色を調整するには 「R」 (赤)、「G」 (緑)、「B」 (青) の各スライダーを使用します。  「I」 スライダーを使用すると、3 つの RGB スライダーを一斉に動かすことができます。
-	</notification>
-	<notification name="HelpHazeHorizon">
-		「空と遠景の露光」は風景の露光量全体を調整する上で最も便利なパラメーターの 1 つです。  太陽光によるホワイトアウト現象や暗く絞り込んだ設定など、さまざまな露出設定をシミュレーションできます。
-	</notification>
-	<notification name="HelpBlueDensity">
-		「空の配色と濃度」は空と霧の彩度全体に影響します。 「I」 スライダーを右に移動すると色は明るくくっきりとなります。
-このスライダーを左端に移動すると、色は彩りを失い、白黒に退色します。 空の色を微調整する場合は、
-「R」 (赤)、 「G」 (緑)、 「B」 (青)
-の各スライダーを使用して彩度を個別に制御できます。
-	</notification>
-	<notification name="HelpHazeDensity">
-		「大気の不透明度」は大気中のどんよりとした空の雰囲気、グレーがかった霧のレベルを制御します。  濃い煙や大気汚染など
-を表現するのに適しています。  霧やもやなどの表現手段としても効果的です。
-	</notification>
-	<notification name="HelpDensityMult">
-		「大気の不透明度の増幅」は空気の濃度全体を制御するために使用できます。 この値を低く設定すると「大気の薄い状態」を演出し、高い数値に設定するととてもどんよりとしたスモッグのかかった雰囲気を表現できます。
-	</notification>
-	<notification name="HelpDistanceMult">
-		ウィンドライトの視覚的距離を調整します。  値としてゼロを設定すると、地形およびオブジェクトに対する
-ウィンドライトの影響を効果的に取り消すことができます。  1 より大きな値を設定する場合、値が大きくなるにつれて
-大気が次第に濃くなるような効果が得られます。
-	</notification>
-	<notification name="HelpMaxAltitude">
-		「最大高度」では大気中の光の量を算出するときに
-ウィンドライトが算出した高度を調整します。
-1日の終わりに夕焼けの度合いを調整するときに役立ちます。
-	</notification>
-	<notification name="HelpSunlightColor">
-		風景の中で直射日光の色や強さを調整します。
-	</notification>
-	<notification name="HelpSunAmbient">
-		風景の中で周囲をとりまく大気中のアンビエント光の色や強さを調整します。
-	</notification>
-	<notification name="HelpSunGlow">
-		「サイズ」スライダーは太陽の大きさを制御します。
-「フォーカス」スライダーは空を背にした太陽のかすみ具合を制御します。
-	</notification>
-	<notification name="HelpSceneGamma">
-		風景の中で明暗の配分を調整します。
-	</notification>
-	<notification name="HelpStarBrightness">
-		空の星の輝きを調整します。
-	</notification>
-	<notification name="HelpTimeOfDay">
-		空の太陽の場所を調整します。
-標高に似ています。
-	</notification>
-	<notification name="HelpEastAngle">
-		空の太陽の場所を調整します。
-方位角に似ています。
-	</notification>
-	<notification name="HelpCloudColor">
-		雲の色を編集します。  通常は白っぽい色をお勧めしますが、もちろん
-お好みの色を設定してください。
-	</notification>
-	<notification name="HelpCloudDetail">
-		主要な雲のイメージの上にレイヤーされた詳細なイメージを制御します。  X と Y でその位置を制御します。
-「D」(濃度)は真綿のような様子や、
-雲の割れ目の様子など雲の外観を制御します。
-	</notification>
-	<notification name="HelpCloudDensity">
-		「X」 と 「Y」 のスライダーで雲の位置を、
-「D」のスライダーでその密度を制御できます。
-	</notification>
-	<notification name="HelpCloudCoverage">
-		空を覆う雲の量を制御します。
-	</notification>
-	<notification name="HelpCloudScale">
-		空に浮かぶ雲のイメージの縮尺を制御します。
-	</notification>
-	<notification name="HelpCloudScrollX">
-		「X」 の方向に雲が移動する際の速度を制御します。
-	</notification>
-	<notification name="HelpCloudScrollY">
-		「Y」 の方向に雲が移動する際の速度を制御します。
-	</notification>
-	<notification name="HelpClassicClouds">
-		このボックスを有効にすると、WindLight の雲に加えて、[SECOND_LIFE] の従来の雲もレンダリングできるようになります。
-	</notification>
-	<notification name="HelpWaterFogColor">
-		水中のフォグ効果に色をつけます。
-	</notification>
-	<notification name="HelpWaterFogDensity">
-		水中のフォグ効果の強弱、水中でどのくらいの距離まで見渡せるかを制御します。
-	</notification>
-	<notification name="HelpUnderWaterFogMod">
-		「水中のフォグ濃度指数」の効果を加減して、あなたのアバターが水中にいるとき、どのくらい遠くまで見ることができるかを制御します。
-	</notification>
-	<notification name="HelpWaterGlow">
-		水面の輝きの度合いを制御します。
-	</notification>
-	<notification name="HelpWaterNormalScale">
-		水面を表現する 3 種類のさざ波の縮尺を制御します。
-	</notification>
-	<notification name="HelpWaterFresnelScale">
-		さまざまな角度で、反射する光の量を制御します。
-	</notification>
-	<notification name="HelpWaterFresnelOffset">
-		反射する光度の量を制御します。
-	</notification>
-	<notification name="HelpWaterScaleAbove">
-		上から水中を見たときの光の屈折具合を制御します。
-	</notification>
-	<notification name="HelpWaterScaleBelow">
-		水中から見たときの光の屈折具合を制御します。
-	</notification>
-	<notification name="HelpWaterBlurMultiplier">
-		波と反射の混ざり具合を制御します。
-	</notification>
-	<notification name="HelpWaterNormalMap">
-		反射や屈折を決定するために水に重ねられるノーマル・マップを制御します。
-	</notification>
-	<notification name="HelpWaterWave1">
-		拡大されたノーマル・マップが移動する方向(X 軸と Y 軸で表現)と速度を制御します。
-	</notification>
-	<notification name="HelpWaterWave2">
-		縮小されたノーマル・マップが移動する方向(X 軸と Y 軸で表現)と速度を制御します。
-	</notification>
-	<notification name="NewSkyPreset">
-		新しい空の名前を指定してください。
-		<form name="form">
-			<input name="message">
-				新しい事前設定
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ExistsSkyPresetAlert">
-		事前設定がすでに存在します!
-	</notification>
-	<notification name="NewWaterPreset">
-		新しい水の事前設定の名前を指定してください。
-		<form name="form">
-			<input name="message">
-				新しい事前設定
-			</input>
-			<button name="OK" text="OK"/>
-			<button name="Cancel" text="キャンセル"/>
-		</form>
-	</notification>
-	<notification name="ExistsWaterPresetAlert">
-		事前設定がすでに存在します!
-	</notification>
-	<notification name="WaterNoEditDefault">
-		デフォルトの設定を編集したり削除したりすることはできません。
-	</notification>
-	<notification name="ChatterBoxSessionStartError">
-		[RECIPIENT]との新しいチャットを開始することができません
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ChatterBoxSessionEventError">
-		[EVENT]
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="ForceCloseChatterBoxSession">
-		[NAME]とのチャットセッションを閉じます。
-[REASON]
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="Cannot_Purchase_an_Attachment">
-		アイテムが添付物の一部である間は、
-アイテムを購入できません。
-	</notification>
-	<notification label="デビット許可のリクエストについて" name="DebitPermissionDetails">
-		この要求を許可すると、スクリプトからあなたのアカウントにリンデンドルを課金できるようになります。
-この許可を取り消すには、オブジェクトのオーナーはオブジェクトを削除するか、オブジェクトのスクリプトをリセットしなければなりません。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="AutoWearNewClothing">
-		あなたが作成した服アイテムを自動的に装着しますか?
-		<usetemplate ignoretext="新しい服を自動的に装着する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="NotAgeVerified">
-		この区画にアクセスするためには、
-年齢確認を行う必要があります。
-[SECOND_LIFE] のウェブサイトにアクセスし、
-年齢確認を行いますか?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/verification.php?lang=ja
-		</url>
-		<usetemplate ignoretext="年齢の未確認について警告する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="Cannot enter parcel: no payment info on file">
-		この区画にアクセスするには、支払い情報が事前に登録されている必要があります。
-[SECOND_LIFE] のウェブサイトにアクセスして、設定しますか?
-
-[_URL]
-		<url name="url" option="0">
-			https://secondlife.com/account/index.php?lang=ja
-		</url>
-		<usetemplate ignoretext="支払い情報の未登録について警告する" name="okcancelignore" notext="いいえ" yestext="はい"/>
-	</notification>
-	<notification name="MissingString">
-		文字列[STRING_NAME]がstrings.xmlに含まれていません
-	</notification>
-	<notification name="SystemMessageTip">
-		[MESSAGE]
-	</notification>
-	<notification name="Cancelled">
-		取り消されました
-	</notification>
-	<notification name="CancelledSit">
-		座るのを取り消されました
-	</notification>
-	<notification name="CancelledAttach">
-		添付は取り消されました
-	</notification>
-	<notification name="ReplacedMissingWearable">
-		欠落している服/身体部位をデフォルトに置換します。
-	</notification>
-	<notification name="GroupNotice">
-		件名: [SUBJECT], メッセージ: [MESSAGE]
-	</notification>
-	<notification name="FriendOnline">
-		[FIRST] [LAST] はオンラインです。
-	</notification>
-	<notification name="FriendOffline">
-		[FIRST] [LAST] はオフラインです。
-	</notification>
-	<notification name="AddSelfFriend">
-		自分自身をフレンドにはできません。
-	</notification>
-	<notification name="UploadingAuctionSnapshot">
-		インワールドとウェブ・サイトのスナップショットをアップロード中です...
-(所要時間:約5分)
-	</notification>
-	<notification name="UploadPayment">
-		アップロードに L$[AMOUNT] 支払いました。
-	</notification>
-	<notification name="UploadWebSnapshotDone">
-		Webサイトのスナップショットがアップロードされました。
-	</notification>
-	<notification name="UploadSnapshotDone">
-		インワールドでのスナップショットのアップロードが完了しました。
-	</notification>
-	<notification name="TerrainDownloaded">
-		raw地形がダウンロードされました
-	</notification>
-	<notification name="GestureMissing">
-		ジェスチャー[NAME] がデータベースにありません。
-	</notification>
-	<notification name="UnableToLoadGesture">
-		ジェスチャー[NAME] を読み込むことができません。
-再度、試みてください。
-	</notification>
-	<notification name="LandmarkMissing">
-		データベースにランドマークがありません。
-	</notification>
-	<notification name="UnableToLoadLandmark">
-		ランドマークをロードできません。  もう一度試してください。
-	</notification>
-	<notification name="CapsKeyOn">
-		コンピューターの Caps Lockキーが
-有効になっています。パスワード入力に
-影響するので解除しましょう。
-	</notification>
-	<notification name="NotecardMissing">
-		ノートカードがデータベースにありません。
-	</notification>
-	<notification name="NotecardNoPermissions">
-		ノートカードを閲覧するには権限が不十分です
-	</notification>
-	<notification name="RezItemNoPermissions">
-		オブジェクトをrezするにはパーミッション(承認)が不足してます。
-	</notification>
-	<notification name="UnableToLoadNotecard">
-		現在ノートカードの資産をロードできません。
-	</notification>
-	<notification name="ScriptMissing">
-		データベースにスクリプトがありません。
-	</notification>
-	<notification name="ScriptNoPermissions">
-		スクリプトを閲覧するには権限が不十分です。
-	</notification>
-	<notification name="UnableToLoadScript">
-		スクリプトをロードできません。  もう一度試してください。
-	</notification>
-	<notification name="IncompleteInventory">
-		あなたの提供するコンテンツは、この場所ではまだ全部揃いません。
-少ししてからもう一度試してください。
-	</notification>
-	<notification name="CannotModifyProtectedCategories">
-		保護されたカテゴリーは修正できません。
-	</notification>
-	<notification name="CannotRemoveProtectedCategories">
-		保護されたカテゴリーは削除できません。
-	</notification>
-	<notification name="OfferedCard">
-		あなたは[FIRST] [LAST] に
-コーリング・カードを送りました。
-	</notification>
-	<notification name="UnableToBuyWhileDownloading">
-		オブジェクトデータのダウンロード中は購入できません。
-もう一度試してください。
-	</notification>
-	<notification name="UnableToLinkWhileDownloading">
-		オブジェクトデータのウンロード中はリンクできません。
-もう一度試してください。
-	</notification>
-	<notification name="CannotBuyObjectsFromDifferentOwners">
-		複数のオーナーから同時にオブジェクトを購入することはできません。
-単一のオブジェクトを選択してください。
-	</notification>
-	<notification name="ObjectNotForSale">
-		オブジェクトは販売対象ではありません。
-	</notification>
-	<notification name="EnteringGodMode">
-		レベル[LEVEL]のゴッド・モードに入ります
-	</notification>
-	<notification name="LeavingGodMode">
-		レベル[LEVEL]のゴッド・モードを解除
-	</notification>
-	<notification name="CopyFailed">
-		コピー権限がないため、コピーに失敗しました
-	</notification>
-	<notification name="InventoryAccepted">
-		[NAME]は、持ち物の提供を受け入れました。
-	</notification>
-	<notification name="InventoryDeclined">
-		[NAME]は、持ち物の提供を断りました。
-	</notification>
-	<notification name="ObjectMessage">
-		[NAME]: [MESSAGE]
-	</notification>
-	<notification name="CallingCardAccepted">
-		コーリング・カードが受理されました。
-	</notification>
-	<notification name="CallingCardDeclined">
-		コーリング・カードが拒否されました。
-	</notification>
-	<notification name="TeleportToLandmark">
-		本土に到達しました。
-[NAME]などの場所にテレポートするには、画面右下にある「持ち物」ボタンをクリックし、ランドマーク(Landmarks)フォルダを選択してください。
-ランドマークをダブルクリックした後「テレポート」をクリックするとその場所へ移動します。
-	</notification>
-	<notification name="TeleportToPerson">
-		本土に到達しました。
-住人の[NAME]と接触するには、画面右下にある「持ち物」ボタンをクリックし、コーリングカード(Calling Cards)フォルダを選択してください。
-カードをダブルクリックし、「IMを送る」をクリックし、メッセージを送信してください。
-	</notification>
-	<notification name="CantSelectLandFromMultipleRegions">
-		サーバーの境界を越えて土地を選択することできません。
-もっと小さな土地を選択してください。
-	</notification>
-	<notification name="SearchWordBanned">
-		コミュニティスタンダードに明記されているコンテンツ制限により、あなたの検索語の一部が除外されました。
-	</notification>
-	<notification name="NoContentToSearch">
-		少なくともどれか一つコンテンツの種類を選択して検索を行ってください。(PG, Mature, Adult)
-	</notification>
-	<notification name="GroupVote">
-		[NAME] は投票の申請をしています:
-[MESSAGE]
-		<form name="form">
-			<button name="VoteNow" text="今すぐ投票する"/>
-			<button name="Later" text="あとで"/>
-		</form>
-	</notification>
-	<notification name="SystemMessage">
-		[MESSAGE]
-	</notification>
-	<notification name="EventNotification">
-		イベント通知:
-
-[NAME]
-[DATE]
-		<form name="form">
-			<button name="Teleport" text="テレポート"/>
-			<button name="Description" text="説明"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="TransferObjectsHighlighted">
-		この区画上に存在するオブジェクトのうち、この区画の購入者に譲渡されるオブジェクトがすべて強調表示されます。
-
-
-*譲渡される樹木や植物は、強調表示されません。
-		<form name="form">
-			<button name="Done" text="完了"/>
-		</form>
-	</notification>
-	<notification name="DeactivatedGesturesTrigger">
-		同じトリガーでアクティブにしないジェスチャー:
-[NAMES]
-	</notification>
-	<notification name="NoQuickTime">
-		Apple社のQuickTimeがシステムにインストールされていないと思われます。
-ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)にアクセスして、QuickTime Player をインストールしてください。
-	</notification>
-	<notification name="OwnedObjectsReturned">
-		選択した土地の区画上にあったあなたのオブジェクトは、あなたの持ち物に返却されました。
-	</notification>
-	<notification name="OtherObjectsReturned">
-		選択されている土地の区画上にあった
- [FIRST] [LAST]
- が所有するオブジェクトは、オーナーの持ち物に返却されました。
-	</notification>
-	<notification name="OtherObjectsReturned2">
-		選択された土地の区画上にあり、
-住人の[NAME]の所有だったオブジェクトはオーナーに返却されました。
-	</notification>
-	<notification name="GroupObjectsReturned">
-		選択されている区画上にあり、[GROUPNAME] というグループと共有だったオブジェクトは、オーナーの持ち物に返却されました。
-譲渡されていた譲渡可能なオブジェクトは、前のオーナーに返却されました。
-グループに譲渡されていた譲渡不可能なオブジェクトは、削除されました。
-	</notification>
-	<notification name="UnOwnedObjectsReturned">
-		選択された土地の区画上にあり、あなたの所有で「なかった」オブジェクトは、本来のオーナーに返却されました。
-	</notification>
-	<notification name="NotSafe">
-		この土地はダメージが有効(「安全ではない」)に設定されています。
-ケガをするかもしれません。 命を落とした場合は、ホームにテレポートされます。
-	</notification>
-	<notification name="NoFly">
-		この土地は飛行が無効(「飛行禁止」)に設定されています。
-ここで飛ぶことはできません。
-	</notification>
-	<notification name="PushRestricted">
-		この土地では「プッシング禁止」です。
-土地所有者以外はここで他人をプッシュすることはできません。
-	</notification>
-	<notification name="NoVoice">
-		この土地はボイスが無効に設定されています。
-	</notification>
-	<notification name="NoBuild">
-		この土地はオブジェクトの作成禁止に設定されています。
-ここでオブジェクトを作ることはできません。
-	</notification>
-	<notification name="ScriptsStopped">
-		管理者がこの地域内のスクリプトを一時停止させました。
-	</notification>
-	<notification name="ScriptsNotRunning">
-		この地域ではスクリプトの使用が禁止されています
-	</notification>
-	<notification name="NoOutsideScripts">
-		この土地では外部スクリプトが無効に設定されています。
-(「外部スクリプト禁止」)
-土地所有者以外のスクリプトは起動できません
-	</notification>
-	<notification name="ClaimPublicLand">
-		自分がいる地域でのみ公共の土地を獲得できます。
-	</notification>
-	<notification name="RegionTPAccessBlocked">
-		あなたのレーティング区分によりその地域(リージョン)へは入ることができません。 年齢確認を行うか、最新ビューワをインストールしてください。
-
-現在のレーティング区分でアクセス可能なエリアに関する詳細はナレッジベースを参照してください。
-	</notification>
-	<notification name="URBannedFromRegion">
-		あなたは地域(リージョン)への立入が禁止されています。
-	</notification>
-	<notification name="NoTeenGridAccess">
-		あなたのアカウントではティーングリッドに接続できません。
-	</notification>
-	<notification name="NoHelpIslandTP">
-		Help Islandには戻ることができません。
-「Help Island Public」に行き、
-再度チュートリアルを行ってください。
-	</notification>
-	<notification name="ImproperPaymentStatus">
-		この地域(リージョン)に入るために適した支払いステータスがありません。
-	</notification>
-	<notification name="MustGetAgeRegion">
-		この地域(リージョン)に入るには年齢確認済みである必要があります。
-	</notification>
-	<notification name="MustGetAgeParcel">
-		この区画に入るには年齢確認済みである必要があります。
-	</notification>
-	<notification name="NoDestRegion">
-		目的地の地域(リージョン)が見つかりませんでした。
-	</notification>
-	<notification name="NotAllowedInDest">
-		目的地に入る許可がありません。
-	</notification>
-	<notification name="RegionParcelBan">
-		立入禁止された区画を横断することはできません。 別の方法をお試しください。
-	</notification>
-	<notification name="TelehubRedirect">
-		テレハブに転送されました。
-	</notification>
-	<notification name="CouldntTPCloser">
-		これ以上目的地に近い場所にテレポートができませんでした。
-	</notification>
-	<notification name="TPCancelled">
-		テレポートがキャンセルされました。
-	</notification>
-	<notification name="FullRegionTryAgain">
-		入ろうとしている地域(リージョン)は現在満員です。
-しばらくしてから再度お試しください。
-	</notification>
-	<notification name="GeneralFailure">
-		よくある失敗
-	</notification>
-	<notification name="RoutedWrongRegion">
-		異なる地域(リージョン)に迂回されました。 もう一度お試しください。
-	</notification>
-	<notification name="NoValidAgentID">
-		エージェントIDが無効です。
-	</notification>
-	<notification name="NoValidSession">
-		セッションIDが無効です。
-	</notification>
-	<notification name="NoValidCircuit">
-		回路コードが無効です。
-	</notification>
-	<notification name="NoValidTimestamp">
-		タイムスタンプが無効です。
-	</notification>
-	<notification name="NoPendingConnection">
-		接続を生成できません。
-	</notification>
-	<notification name="InternalUsherError">
-		内部エラーが発生しました。
-	</notification>
-	<notification name="NoGoodTPDestination">
-		この地域(リージョン)では適切なテレポート目的地が見つかりませんでした。
-	</notification>
-	<notification name="InternalErrorRegionResolver">
-		内部エラーが発生しました。
-	</notification>
-	<notification name="NoValidLanding">
-		有効な着地点が見つかりませんでした。
-	</notification>
-	<notification name="NoValidParcel">
-		有効な区画が見つかりませんでした。
-	</notification>
-	<notification name="ObjectGiveItem">
-		[FIRST] [LAST]所有の、
-[OBJECTFROMNAME]から、
-[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="ObjectGiveItemUnknownUser">
-		(未知のユーザー) 所有の[OBJECTFROMNAME]から、
-あなたに[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="UserGiveItem">
-		[NAME]は、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を渡しました。
-		<form name="form">
-			<button name="Keep" text="受け取る"/>
-			<button name="Discard" text="破棄"/>
-			<button name="Mute" text="無視リストへ"/>
-		</form>
-	</notification>
-	<notification name="GodMessage">
-		[NAME]
-[MESSAGE]
-	</notification>
-	<notification name="JoinGroup">
-		[MESSAGE]
-		<form name="form">
-			<button name="Join" text="参加"/>
-			<button name="Decline" text="辞退"/>
-			<button name="Info" text="情報"/>
-		</form>
-	</notification>
-	<notification name="TeleportOffered">
-		[NAME]はあなたをテレポートで呼び寄せようとしています:
-
-[MESSAGE]
-		<form name="form">
-			<button name="Teleport" text="テレポート"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="GotoURL">
-		[MESSAGE]
-[URL]
-		<form name="form">
-			<button name="Later" text="あとで"/>
-			<button name="GoNow..." text="今すぐ行く"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendship">
-		[NAME]は、
-フレンド登録を申し込んでいます。
-
-[MESSAGE]
-
-(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="辞退"/>
-		</form>
-	</notification>
-	<notification name="OfferFriendshipNoMessage">
-		[NAME]は、
-フレンド登録を申し込んでいます。
-
-(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-		</form>
-	</notification>
-	<notification name="FriendshipAccepted">
-		[NAME]は、フレンド 登録を受け入れました。
-	</notification>
-	<notification name="FriendshipDeclined">
-		[NAME]は、フレンド 登録を断りました。
-	</notification>
-	<notification name="OfferCallingCard">
-		[FIRST] [LAST]が
-あなたにコーリングカードを送ってきました。
-これにより、あなたの持ち物にブックマークが追加され、この住人にすばやくIMすることができます。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="辞退"/>
-		</form>
-	</notification>
-	<notification name="RegionRestartMinutes">
-		この地域は[MINUTES]分後に再起動されます。
-強制ログアウトとなりますので、この地域の外に出てください。
-	</notification>
-	<notification name="RegionRestartSeconds">
-		この地域は[SECONDS]秒後に再起動されます。
-強制ログアウトとなりますので、この地域の外に出てください。
-	</notification>
-	<notification name="LoadWebPage">
-		ウェブ・ページ[URL]をロードしますか?
-
-[MESSAGE]
-
-ロード元のオブジェクト:[OBJECTNAME]、オーナー:[NAME]?
-		<form name="form">
-			<button name="Gotopage" text="移動"/>
-			<button name="Cancel" text="取り消し"/>
-		</form>
-	</notification>
-	<notification name="FailedToFindWearableUnnamed">
-		データベースに[TYPE]が見つかりませんでした
-	</notification>
-	<notification name="FailedToFindWearable">
-		データベースに[DESC]という名前の[TYPE]が見つかりませんでした。
-	</notification>
-	<notification name="InvalidWearable">
-		着用しようとしているアイテムはあなたのビューワでは読み込むことができません。 [APP_NAME]ビューワを最新のものにアップグレードしてからこのアイテムを着用してください。
-	</notification>
-	<notification name="ScriptQuestion">
-		「[NAME]」が所有するオブジェクト「[OBJECTNAME]」を:
-
-[QUESTIONS]
-よろしいですか?
-		<form name="form">
-			<button name="Yes" text="はい"/>
-			<button name="No" text="いいえ"/>
-			<button name="Mute" text="無視リストに追加"/>
-		</form>
-	</notification>
-	<notification name="ScriptQuestionCaution">
-		「[OBJECTNAME]」が所有するオブジェクト「[NAME]」は、次のことを求めています:
-
-[QUESTIONS]
-このオブジェクトと制作者が信用できない場合は、リクエストを拒否してください。追加情報は、詳細ボタンをクリックしてください。
-
-このリクエストを許可しますか?
-		<form name="form">
-			<button name="Grant" text="許可"/>
-			<button name="Deny" text="拒否"/>
-			<button name="Details" text="詳細..."/>
-		</form>
-	</notification>
-	<notification name="ScriptDialog">
-		[FIRST] [LAST]の「[TITLE]」
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="無視する"/>
-		</form>
-	</notification>
-	<notification name="ScriptDialogGroup">
-		[GROUPNAME]の「[TITLE]」
-[MESSAGE]
-		<form name="form">
-			<button name="Ignore" text="無視する"/>
-		</form>
-	</notification>
-	<notification name="FirstBalanceIncrease">
-		L$[AMOUNT]を受け取りました。
-オブジェクトおよび他のユーザーがあなたにお金を支払ったようです。
-あなたの残高は画面の右上に表示されて います。
-	</notification>
-	<notification name="FirstBalanceDecrease">
-		L$[AMOUNT]を支払いました。
-あなたの残高は画面の右上に表示されて います。
-	</notification>
-	<notification name="FirstSit">
-		あなたは座っています。
-矢印(または AWSD)のキーを使って
-視点を変えます。
-立ち上がるには「立ち上がる」をクリックします。
-	</notification>
-	<notification name="FirstMap">
-		地図をスクロールするには、クリックしてドラッグします。
-テレポートするには、ダブルクリックします。
-右側のコントロールを使用すると、物を見つけたり、別の背景を表示することができます。
-	</notification>
-	<notification name="FirstBuild">
-		[SECOND_LIFE] には、
-新しいオブジェクトを作ることができる地域があります。
-作成には画面上部左のツールが使え、
-CtrlキーやAltキーを押したままにすれば
-素早くツールを切り替えられます。
-Escキーを押すと、作成は終了します。
-	</notification>
-	<notification name="FirstLeftClickNoHit">
-		左クリックで特別なオブジェクトを操作できます。
-マウス・ポインタが手のマークに変わると、ポイントしているオブジェクトを操作できます。
-右クリックで実行可能な操作のメニューが表示されます。
-	</notification>
-	<notification name="FirstTeleport">
-		この地域では、ポイント間のテレポートが認められていませんので、最も近いテレハブ周辺に移動しました。
-あなたの目的地は、大きな標識(ビーコン)で表示されています。赤い矢印に向かって進むと標識(ビーコン)へ辿り着きます。
-矢印をクリックすると標識(ビーコン)を消せます
-	</notification>
-	<notification name="FirstOverrideKeys">
-		あなたの移動キーをオブジェクトが操作しています。
-矢印かAWSDのキーで動作を確認してください。
-銃などのオブジェクトだと、一人称視点(マウスルック)に変更する必要があります。
-Mキーを押して変更します。
-	</notification>
-	<notification name="FirstAppearance">
-		あなたは容姿を編集中です。
-回転、ズームするには矢印キーを使います。
-編集が終わったら「すべて保存」をクリックして容姿を保存し、終了します。
-容姿の編集は何度でも行えます。
-	</notification>
-	<notification name="FirstInventory">
-		これは、オブジェクト、ノートカード、服、その他あなたの所有物がすべて入った「持ち物」です。
-*マウスでアバターにオブジェクトや服装フォルダをドラッグして装着します。
-*オブジェクトを地面の上にドラッグすると、周囲の世界に表示させます。(Rez)
-*ノートカードを読むには、ダブルクリックします。
-	</notification>
-	<notification name="FirstSandbox">
-		ここはサンドボックスです。
-あなたがここで作ったオブジェクトはあなたが立ち去った後、削除されるかもしれません。サンドボックスは定期的に清掃されます。詳細については、画面上部、地域名の隣の情報を参照してください。
-
-サンドボックスは特別なエリアで、目印のサインがついています。
-	</notification>
-	<notification name="FirstFlexible">
-		このオブジェクトは フレキシブルです。
-フレキシブル・チェックボックスのチェックが外されるまでは、オブジェクトは物理的でなくファントムでなければなりません。
-	</notification>
-	<notification name="FirstDebugMenus">
-		高度な設定を有効にしました。
-このメニューには、
-[SECOND_LIFE] をデバッグするデベロッパーにとって
-有用な機能があります。
-このメニューを切り替えるには、
-WindowsではCtrl+Alt+Dを押します。
-Macの場合は、&#8997;&#8984;Dを押してください。
-	</notification>
-	<notification name="FirstSculptedPrim">
-		スカルプトプリムを編集しています。
-スカルプトプリムは、形状を指定するための特別なテクスチャーが必要です。
-持ち物ライブラリで、スカルプトテクスチャーのサンプルを参照できます。
-	</notification>
-	<notification name="FirstMedia">
-		メディアの再生を開始しました。
-オーディオ/ビデオの環境設定で、自動的にメディアを再生するように設定することができます。
-注: この設定により、信頼しないメディア・サイトに接続されるセキュリティ・リスクが伴います。
-	</notification>
-	<notification name="MaxListSelectMessage">
-		このリストから[MAX_SELECT]個までのアイテムを選択できます。
-	</notification>
-	<notification name="VoiceInviteP2P">
-		[NAME]が、あなたをボイスチャットコールに招待しています。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST]に
-インスタント・メッセージが送信され、無視設定は自動的に解除されました。
-	</notification>
-	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST]にお金を渡したため、 無視設定が自動的に解除されました。
-	</notification>
-	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST]に持ち物を渡したため、 無視設定が自動的に解除されました。
-	</notification>
-	<notification name="VoiceInviteGroup">
-		[NAME]が、 グループ[GROUP]とのボイスチャットコールに参加しました。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="VoiceInviteAdHoc">
-		[NAME]が、 会議チャットでボイスチャットコールに参加しました。
-コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。 このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="InviteAdHoc">
-		[NAME]が、 あなたを会議チャットに招待しています。
-チャットに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
-		<form name="form">
-			<button name="Accept" text="受け入れる"/>
-			<button name="Decline" text="拒否"/>
-			<button name="Mute" text="ミュート"/>
-		</form>
-	</notification>
-	<notification name="VoiceChannelFull">
-		あなたが参加しようとしているボイスコール[VOICE_CHANNEL_NAME]は、参加者が最大限に達しました。後でもう一度お試しください。
-	</notification>
-	<notification name="ProximalVoiceChannelFull">
-		このエリアのボイスチャットは、混雑のため容量を超えてしまっています。申し訳ありませんが、他のエリアでボイスチャットをお試しください。
-	</notification>
-	<notification name="VoiceChannelDisconnected">
-		[VOICE_CHANNEL_NAME]への接続が切断されました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceChannelDisconnectedP2P">
-		[VOICE_CHANNEL_NAME]は、コールを終了しました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="P2PCallDeclined">
-		[VOICE_CHANNEL_NAME]は、あなたのコールを拒否しました。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="P2PCallNoAnswer">
-		[VOICE_CHANNEL_NAME]は、あなたのコールを受け取れません。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceChannelJoinFailed">
-		[VOICE_CHANNEL_NAME]への接続に失敗しました。時間をおいて、再度、試みてください。空間ボイスチャットに再接続されます。
-	</notification>
-	<notification name="VoiceLoginRetry">
-		あなた用のボイスチャンネルを作成しています。1分ほどかかります。
-	</notification>
-	<notification name="Cannot enter parcel: not a group member">
-		適切なグループのメンバーではないため、区画に入ることができません。
-	</notification>
-	<notification name="Cannot enter parcel: banned">
-		立入禁止されているため、区画に入ることができません。
-	</notification>
-	<notification name="Cannot enter parcel: not on access list">
-		アクセス・リストに含まれていないため、区画に入ることができません。
-	</notification>
-	<notification name="VoiceNotAllowed">
-		あなたには[VOICE_CHANNEL_NAME]のボイス・チャットに接続する権限がありません。
-	</notification>
-	<notification name="VoiceCallGenericError">
-		[VOICE_CHANNEL_NAME]のボイス・チャットに接続中に、エラーが発生しました。後でもう一度お試しください。
-	</notification>
-	<notification name="ServerVersionChanged">
-		到着した地域は異なるシミュレーターのバージョンで実行されています。 詳細についてはこのメッセージをクリックしてください。
-	</notification>
-	<notification name="UnableToOpenCommandURL">
-		クリックしたURLはこのウェブブラウザでは開けません
-	</notification>
-	<global name="UnsupportedCPU">
-		- あなたの CPU の速度は必須動作環境の条件を満たしていません。
-	</global>
-	<global name="UnsupportedGLRequirements">
-		[APP_NAME] の使用に必要なハードウェアの環境が満たされていないようです。 [APP_NAME] ではマルチテクスチャーに対応したOpenGLグラフィック・カードが必要です。 この場合、グラフィック・カードの最新ドライバがインストールされていること、およびオペレーティング・システムにサービス・パックと修正プログラムが適用されていることをご確認ください。
-
-問題が解決されない場合には、次のサイトにアクセスしてください。 http://www.secondlife.com/support
-	</global>
-	<global name="UnsupportedCPUAmount">
-		796
-	</global>
-	<global name="UnsupportedRAMAmount">
-		510
-	</global>
-	<global name="UnsupportedGPU">
-		- あなたのグラフィック・カードは必須動作環境の条件を満たしていません。
-	</global>
-	<global name="UnsupportedRAM">
-		- あなたのシステム・メモリは必須動作環境の条件を満たしていません。
-	</global>
-	<global name="PermYes">
-		はい
-	</global>
-	<global name="PermNo">
-		いいえ
-	</global>
-</notifications>
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<global name="skipnexttime">
+		今後は表示しない
+	</global>
+	<global name="alwayschoose">
+		常にこのオプションを選択
+	</global>
+	<global name="implicitclosebutton">
+		閉じる
+	</global>
+	<template name="okbutton">
+		<form>
+			<button name="OK" text="$yestext"/>
+		</form>
+	</template>
+	<template name="okignore"/>
+	<template name="okcancelbuttons">
+		<form>
+			<button name="Cancel" text="$notext"/>
+		</form>
+	</template>
+	<template name="okcancelignore"/>
+	<template name="okhelpbuttons">
+		<form>
+			<button name="Help" text="$helptext"/>
+		</form>
+	</template>
+	<template name="yesnocancelbuttons">
+		<form>
+			<button name="Yes" text="$yestext"/>
+			<button name="No" text="$notext"/>
+		</form>
+	</template>
+	<notification functor="GenericAcknowledge" label="不明な警告メッセージ" name="MissingAlert">
+		あなたの [APP_NAME] のバージョンでは今受け取った警告メッセージを表示することができません。  最新ビューワがインストールされているかご確認ください。
+
+エラー詳細: 「[_NAME]」という警告は notifications.xml にありませんでした。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="FloaterNotFound">
+		フロータ・エラー:下記のコントロールが見つかりませんでした:
+[CONTROLS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="TutorialNotFound">
+		現在利用可能なチュートリアルはありません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="GenericAlert">
+		[MESSAGE]
+	</notification>
+	<notification name="GenericAlertYesCancel">
+		[MESSAGE]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="はい"/>
+	</notification>
+	<notification name="BadInstallation">
+		[APP_NAME] をアップデート中にエラーが発生しました。  最新バージョンをダウンロードしてください。 http://get.secondlife.com
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LoginFailedNoNetwork">
+		[SECOND_LIFE_GRID] に接続できませんでした。
+「[DIAGNOSTIC]」
+インターネット接続が正常かご確認ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MessageTemplateNotFound">
+		メッセージテンプレート [PATH] がありませんでした。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="WearableSave">
+		現在の衣服/ボディーパーツの変更を保存しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="CompileQueueSaveText">
+		次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 [REASON] 後でもう一度試してください。
+	</notification>
+	<notification name="CompileQueueSaveBytecode">
+		次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 [REASON]後でもう一度試してください。
+	</notification>
+	<notification name="WriteAnimationFail">
+		アニメーションデータの書き込みに問題があります。後でもう一度お試しください。
+	</notification>
+	<notification name="UploadAuctionSnapshotFail">
+		次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 [REASON]
+	</notification>
+	<notification name="UnableToViewContentsMoreThanOne">
+		一度に複数のアイテムのコンテンツは表示できません。
+選択するアイテムを1つだけにして、もう一度試してください。
+	</notification>
+	<notification name="SaveClothingBodyChanges">
+		衣服/身体部位に対する変更をすべて保存しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="すべて保存"/>
+	</notification>
+	<notification name="GrantModifyRights">
+		他の住人に変更権限を与えると、その人はあなたが所有している
+すべてのオブジェクトを変更、削除、または取得することができるようになります。この許可を与えるときは細心の注意を払ってください。
+[FIRST_NAME] [LAST_NAME]に対して変更権限を与えますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="GrantModifyRightsMultiple">
+		変更権限を与えると、その人はあなたが作成した全てのオブジェクトを変更することができます。
+この許可を与えるときには細心の注意を払ってください。
+選択した住人に変更権限を与えますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="RevokeModifyRights">
+		[FIRST_NAME] [LAST_NAME]に対して変更権限を取り消しますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="RevokeModifyRightsMultiple">
+		選択した住人から変更権限を取り下げますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="UnableToCreateGroup">
+		グループを作成できません。
+[MESSAGE]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PanelGroupApply">
+		[NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="変更を無視" yestext="変更を適用"/>
+	</notification>
+	<notification name="MustSpecifyGroupNoticeSubject">
+		グループ通知の送信には、件名の記入が必要です。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AddGroupOwnerWarning">
+		あなたは [ROLE_NAME]の役割にメンバーを与えようとしています。
+任命されたメンバーが自ら退任しない限り、
+彼らを役柄から削除できません。
+操作を続行しますか?
+		<usetemplate ignoretext="グループオーナーを新しく追加する前に確認" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="AssignDangerousActionWarning">
+		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
+与えようとしています。
+
+ *警告*
+この能力を持つ役割のメンバーは、
+自分と他のメンバーに現在より強力な権限を割り当て、
+自分をオーナーとほぼ同様の立場に
+任命することもできるようになります。 この行為の意味をよく理解してから
+実行してください。
+
+この能力を[ROLE_NAME]に割り当てますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="AssignDangerousAbilityWarning">
+		あなたは[ROLE_NAME]に [ACTION_NAME]の能力を
+与えようとしています。
+
+ *警告*
+この能力をもつ役割のメンバーは、
+自分と他のメンバーにすべての能力を割り当て、
+自分をオーナーとほぼ同様の立場に任命できます。
+
+この能力を[ROLE_NAME]に割り当てますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="JoinGroupCanAfford">
+		このグループに参加するには、L$[COST]かかります。
+続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="参加"/>
+	</notification>
+	<notification name="JoinGroupCannotAfford">
+		このグループに加入するには、L$[COST]必要です。
+L$が不足しているのでこのグループに参加することができません。
+	</notification>
+	<notification name="CreateGroupCost">
+		このグループを作るには L$100 かかります。
+一人ではグループにならないので、永久に削除されてしまいます。
+48時間以内にメンバーを勧誘し入会してもらってください。
+		<usetemplate canceltext="キャンセル" name="okcancelbuttons" notext="キャンセル" yestext="L$100 でグループを作成"/>
+	</notification>
+	<notification name="LandBuyPass">
+		L$[COST]で [TIME]時間この土地[PARCEL_NAME]に入ることができます。
+入場許可を購入しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SalePriceRestriction">
+		不特定の人に売却する場合には、
+売却価格はL$0以上に設定する必要があります。
+売却価格をL$0に設定する場合は、
+売却する個人を選択してください。
+	</notification>
+	<notification name="ConfirmLandSaleChange">
+		選択された[LAND_SIZE]平方メートルの土地は、売り出し中に設定されています。
+売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmLandSaleToAnyoneChange">
+		注:「誰にでも売却する」をクリックすると、
+あなたの土地は[SECOND_LIFE] のコミュニティのどこからでも
+(この地域にないコミュニティを含む)購入できるようになります。
+
+選択された[LAND_SIZE]平方メートルの土地は、
+売り出し中に設定されています。
+売却価格L$[SALE_PRICE]で、[NAME]に売却を認可します。
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsDeededToGroup">
+		この区画のグループ[NAME]共有のすべてのオブジェクトを、以前のオーナーの持ち物に戻そうとしています。
+操作を続行しますか?
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedByUser">
+		この区画で、
+住人[NAME]が所有する全てのオブジェクトを
+彼らの持ち物に本当に返却してもよいですか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsOwnedBySelf">
+		この土地区画内にある、あなたが所有するすべてのオブジェクトを、
+あなたの持ち物に戻そうとしています。操作を続行しますか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedBySelf">
+		この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、
+それぞれのオーナーの持ち物に戻そうとしています。
+操作を続行しますか?
+グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByUser">
+		この土地区画内にある、
+[NAME]以外による所有のオブジェクトをすべてそれぞれのオーナーの持ち物に返却しようとしています。
+操作を続行しますか?グループに譲渡された譲渡可能オブジェクトは、以前のオーナーに返却されます。
+
+*警告* これにより、
+グループに譲渡された譲渡不可能なオブジェクトは削除されます!
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnAllTopObjects">
+		全てのリストされたオブジェクトを所有者に本当に返却しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DisableAllTopObjects">
+		この地域内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ReturnObjectsNotOwnedByGroup">
+		この土地の区画上のオブジェクトのうち、グループ[NAME]
+との間で共有していないオブジェクトをオーナーに返却しますか?
+
+オブジェクト: [N]
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="UnableToDisableOutsideScripts">
+		スクリプトを無効にできません。
+この地域全体が「ダメージ有効」に設定されています。
+武器を使用するにはスクリプトの実行を許可する必要があります。
+	</notification>
+	<notification name="MustBeInParcel">
+		着地点を設定するには、この区画の内側に
+立ってください。
+	</notification>
+	<notification name="PromptRecipientEmail">
+		受信者の有効なEメールアドレスを入力してください。
+	</notification>
+	<notification name="PromptSelfEmail">
+		あなたのEメール・アドレスを入力してください。
+	</notification>
+	<notification name="PromptMissingSubjMsg">
+		デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ErrorProcessingSnapshot">
+		スナップショット・データの処理エラー
+	</notification>
+	<notification name="ErrorEncodingSnapshot">
+		スナップショットのエンコード化でエラーが出ました!
+	</notification>
+	<notification name="ErrorUploadingPostcard">
+		次の理由で、スナップショットの送信時に問題が起こりました: [REASON]
+	</notification>
+	<notification name="ErrorUploadingReportScreenshot">
+		次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON]
+	</notification>
+	<notification name="MustAgreeToLogIn">
+		[SECOND_LIFE] へのログインを続けるには、利用規約に同意してください。
+	</notification>
+	<notification name="CouldNotPutOnOutfit">
+		服装を装着できません。
+服装フォルダに衣服、身体部位、付属品がありません。
+	</notification>
+	<notification name="CannotWearTrash">
+		ゴミ箱にある服やボディーパーツの着用はできません。
+	</notification>
+	<notification name="CannotWearInfoNotComplete">
+		まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
+	</notification>
+	<notification name="MustHaveAccountToLogIn">
+		おっと! 記入漏れがありますよ。
+アバターのファーストネームとラストネームの両方を入力する必要があります。
+
+[SECOND_LIFE]に入るには、アカウントが必要です。 アカウントを作成しますか?
+		<url name="url">
+			https://join.secondlife.com/index.php?lang=ja-JP
+		</url>
+		<usetemplate name="okcancelbuttons" notext="もう一度試す" yestext="新しいアカウントを作成"/>
+	</notification>
+	<notification name="AddClassified">
+		検索ディレクトリの「クラシファイド」セクションに、
+クラシファイド広告が1週間掲載されます。
+広告を記入後、「公開」をクリックし、ディレクトリに
+追加します。
+「公開」をクリックすると、支払金額を尋ねられます。
+多く払うほど、広告がクラシファイド・リストとキーワード検索
+の上位に表示されます。
+		<usetemplate ignoretext="新規クラシファイド広告作成方法" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DeleteClassified">
+		クラシファイド広告[NAME]の削除をしますか?
+支払い済みの料金は返金されません。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ClassifiedSave">
+		クラシファイド広告[NAME]への変更を保存しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="DeleteAvatarPick">
+		ピック[PICK]を削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="PromptGoToEventsPage">
+		[SECOND_LIFE]イベント・ウェブ・ページに移動しますか?
+		<url name="url">
+			http://jp.secondlife.com/events/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SelectProposalToView">
+		表示する提案を選択してください。
+	</notification>
+	<notification name="SelectHistoryItemToView">
+		表示する履歴アイテムを選択してください。
+	</notification>
+	<notification name="ResetShowNextTimeDialogs">
+		これらのポップアップ全てを再度有効化しますか?(以前「今後は表示しない」と指定しています)
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SkipShowNextTimeDialogs">
+		スキップ可能なポップアップ全てを無効化しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CacheWillClear">
+		[APP_NAME]の再起動後にキャッシュがクリアされます。
+	</notification>
+	<notification name="CacheWillBeMoved">
+		[APP_NAME]の再起動後にキャッシュが移動されます。
+注意:これによりキャッシュがクリアされます。
+	</notification>
+	<notification name="ChangeConnectionPort">
+		ポートの設定は、[APP_NAME]の再起動後に有効になります。
+	</notification>
+	<notification name="ChangeSkin">
+		新しいスキンは[APP_NAME]を再起動すると現れます
+	</notification>
+	<notification name="GoToAuctionPage">
+		[SECOND_LIFE]ウェブ・ページに移動し、 入札あるいはオークションの詳細を確認しますか?
+		<url name="url">
+			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SaveChanges">
+		変更を保存しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="保存しない" yestext="保存"/>
+	</notification>
+	<notification name="GestureSaveFailedTooManySteps">
+		ジェスチャーの保存に失敗しました。
+ステップが多すぎます。
+ステップをいくつか削除してから再保存してください
+	</notification>
+	<notification name="GestureSaveFailedTryAgain">
+		ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。
+	</notification>
+	<notification name="GestureSaveFailedObjectNotFound">
+		ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="GestureSaveFailedReason">
+		次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="SaveNotecardFailObjectNotFound">
+		ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクト持ち物が見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="SaveNotecardFailReason">
+		次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="ScriptCannotUndo">
+		あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。
+サーバーの最新保存バージョンをロードしますか?
+(**警告**:この操作後元に戻すことはできません)
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="SaveScriptFailReason">
+		次の理由で、スクリプトの保存に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="SaveScriptFailObjectNotFound">
+		スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。
+オブジェクトは範囲外か、または削除されているかもしれません。
+	</notification>
+	<notification name="SaveBytecodeFailReason">
+		次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]。  後でもう一度試してください。
+	</notification>
+	<notification name="StartRegionEmpty">
+		ログイン位置が不明です。 
+ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CouldNotStartStopScript">
+		スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。
+オブジェクトが範囲内に存在しないか、または削除された可能性があります。
+	</notification>
+	<notification name="CannotDownloadFile">
+		ファイルをダウンロードできません。
+	</notification>
+	<notification name="CannotWriteFile">
+		ファイル[[FILE]]を書き込めません。
+	</notification>
+	<notification name="UnsupportedHardware">
+		警告: お使いのシステムは [APP_NAME] の必要最低限の動作環境を満たしていません。 このまま [APP_NAME] を使用すると、パフォーマンスの低下を感じるかもしれません。 恐れ入りますが [SUPPORT_SITE] ではサポート対象外のシステムに関する技術的サポートは行っておりません。
+
+最低動作環境
+[_URL] で詳しい情報を確認しますか?
+		<url name="url" option="0">
+			http://secondlife.com/support/sysreqs.php?lang=ja
+		</url>
+		<usetemplate ignoretext="使用しているコンピューターのハードウェアがサポートされていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="UnknownGPU">
+		お使いのシステムには、現在 [APP_NAME] が認識できないグラフィックカードが搭載されています。
+[APP_NAME] でまだテストされていない最新ハードウェアのためだと考えられます。  [APP_NAME] は正常に実行される可能性が高いですが、表示設定を調整する必要があるかもしれません。
+(環境設定 &gt; 表示)
+		<form name="form">
+			<ignore name="ignore" text="使用中のグラフックカードが認識されませんでした"/>
+		</form>
+	</notification>
+	<notification name="DisplaySettingsNoShaders">
+		[APP_NAME] は、
+グラフィック・ドライバの初期化中にクラッシュしました。
+一般的なドライバ・エラーを回避するため、「品質およびパフォーマンス」は「低」に設定されます。
+これにより、いくつかのグラフィックス機能は無効になります。
+グラフィックカード・ドライバのアップデートをお勧めします。
+「グラフィックの品質」は「環境設定」>「表示」から上げることができます。
+	</notification>
+	<notification name="RegionNoTerraforming">
+		この地域[REGION] は、テラフォーミングができません。
+	</notification>
+	<notification name="CannotCopyWarning">
+		あなたはこのアイテムのコピーを
+許されていないので、人にあげると
+持ち物から失われます。 本当に
+これをあげたいですか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CannotGiveItem">
+		持ち物のアイテムを渡せません。
+	</notification>
+	<notification name="TransactionCancelled">
+		取引がキャンセルされました。
+	</notification>
+	<notification name="TooManyItems">
+		一度のインベントリ交換で、42以上のアイテムは送れません。
+	</notification>
+	<notification name="NoItems">
+		選択したアイテムを譲渡できる権限がありません。
+	</notification>
+	<notification name="CannotCopyCountItems">
+		あなたは選択したアイテムの[COUNT]のコピーを
+許されていません。
+これらのアイテムはあなたの持ち物から失われます。
+本当にアイテムをあげたいですか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CannotGiveCategory">
+		選択したフォルダを譲渡できる権限がありません
+	</notification>
+	<notification name="FreezeAvatar">
+		このアバターをフリーズしますか?
+アバターは一時的に動けなくなり、
+チャットなど、この世界に対する関わりを持つことができなくなります。
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
+	</notification>
+	<notification name="FreezeAvatarFullname">
+		[AVATAR_NAME]をフリーズしますか?
+フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="解凍" yestext="フリーズ"/>
+	</notification>
+	<notification name="EjectAvatarFullname">
+		あなたの土地から[AVATAR_NAME]を追放しますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="追放と禁止" yestext="追放"/>
+	</notification>
+	<notification name="EjectAvatarNoBan">
+		このアバターをあなたの土地から追放しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
+	</notification>
+	<notification name="EjectAvatarFullnameNoBan">
+		[AVATAR_NAME] をあなたの土地から追放しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="追放"/>
+	</notification>
+	<notification name="AcquireErrorTooManyObjects">
+		取得エラー:選択したオブジェクトの数が多すぎます。
+	</notification>
+	<notification name="AcquireErrorObjectSpan">
+		取得エラー:
+オブジェクトが複数の地域にまたがって存在しています。
+取得するオブジェクトは、
+すべて同じ地域内に移動させてください。
+	</notification>
+	<notification name="PromptGoToCurrencyPage">
+		[EXTRA]
+
+[_URL] でリンデンドル購入に関する情報を確認しますか?
+		<url name="url">
+			http://jp.secondlife.com/currency/
+		</url>
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="UnableToLinkObjects">
+		これらの[COUNT]オブジェクトをリンクできません。
+最大[MAX]オブジェクトをリンクすることができます。
+	</notification>
+	<notification name="CannotLinkIncompleteSet">
+		セットとして揃っているオブジェクトのみリンクできます。複数の
+オブジェクトを選択してください。
+	</notification>
+	<notification name="CannotLinkModify">
+		すべてのオブジェクトに対する修正許可があなたにないため、
+リンクできません。
+
+オブジェクトがすべてロックされておらず、あなたのものであることを確認してください。
+	</notification>
+	<notification name="CannotLinkDifferentOwners">
+		所有者が異なるため、すべてのオブジェクトを
+リンクできません。
+
+自分が所有しているオブジェクトだけを選択してください。
+	</notification>
+	<notification name="NoFileExtension">
+		ファイル「[FILE]」の拡張子が無効です。
+
+このファイルの拡張子が正しいかどうかを確認してください。
+	</notification>
+	<notification name="InvalidFileExtension">
+		ファイル拡張子[EXTENSION]は無効です
+正しい拡張子:[VALIDS]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotUploadSoundFile">
+		読み込みのためにアップロードされたサウンドファイルを開けません:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotRIFF">
+		ファイルがRIFF WAVEファイルとして認識されません:
+[FILE]
+	</notification>
+	<notification name="SoundFileNotPCM">
+		ファイルがPCM WAVEオーディオ・ファイルとして認識されません:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidChannelCount">
+		ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidSampleRate">
+		ファイルのサンプル・レートがサポート外です(44.1kを指定する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidWordSize">
+		ファイルのワード・サイズがサポート外です(8または16ビットを指定する必要があります):
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidHeader">
+		WAVヘッダーにデータ・チャンクが見つかりません:
+[FILE]
+	</notification>
+	<notification name="SoundFileInvalidTooLong">
+		オーディオ・ファイルが長すぎます。(最大10秒):
+[FILE]
+	</notification>
+	<notification name="ProblemWithFile">
+		ファイル[FILE]にエラーがあります。
+
+[ERROR]
+	</notification>
+	<notification name="CannotOpenTemporarySoundFile">
+		書き込み用の一時圧縮サウンド・ファイルを開くことができません:[FILE]
+	</notification>
+	<notification name="UnknownVorbisEncodeFailure">
+		未知のVorbis 暗号化に失敗: [FILE]
+	</notification>
+	<notification name="CannotEncodeFile">
+		次のファイルのエンコードができません: [FILE]
+	</notification>
+	<notification name="CorruptResourceFile">
+		破損したリソースファイル: [FILE]
+	</notification>
+	<notification name="UnknownResourceFileVersion">
+		未知のlindenリソースファイルのバージョン: [FILE]
+	</notification>
+	<notification name="UnableToCreateOutputFile">
+		服装ファイルを作成できません: [FILE]
+	</notification>
+	<notification name="DoNotSupportBulkAnimationUpload">
+		現在 [APP_NAME] では、アニメーションの一括アップロードはサポートされていません。
+	</notification>
+	<notification name="CannotUploadReason">
+		次の理由で、[FILE] をアップロードできません: [REASON]
+あとでもう一度試してください。
+	</notification>
+	<notification name="LandmarkCreated">
+		「 [LANDMARK_NAME] 」を「 [FOLDER_NAME] 」フォルダに追加しました。
+	</notification>
+	<notification name="CannotCreateLandmarkNotOwner">
+		土地の所有者が許可していないため、
+ランドマークを作成することはできません。
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoScripts">
+		再編集は不可能です。
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotRecompileSelectObjectsNoPermission">
+		「再編集」は不可能です。
+
+変更修正権限のある
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotResetSelectObjectsNoScripts">
+		「再設定」を行うことができません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotResetSelectObjectsNoPermission">
+		「再設定」を行うことができません。
+
+変更修正権限のある
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotSetRunningSelectObjectsNoScripts">
+		スクリプトの「実行」の設定ができません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="CannotSetRunningNotSelectObjectsNoScripts">
+		スクリプトを「実行しない」に設定できません。
+
+スクリプト化されたオブジェクトを選択してください。
+	</notification>
+	<notification name="NoFrontmostFloater">
+		保存すべきfrontmostフロータがありません。
+	</notification>
+	<notification name="SeachFilteredOnShortWords">
+		指定した検索クエリは変更され、短すぎる語句は取り除かれています。
+
+検索語句: [FINALQUERY]
+	</notification>
+	<notification name="SeachFilteredOnShortWordsEmpty">
+		指定した検索語句が短すぎたため、検索は行われませんでした。
+	</notification>
+	<notification name="CouldNotTeleportReason">
+		テレポートに失敗しました。
+[REASON]
+	</notification>
+	<notification name="invalid_tport">
+		テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</notification>
+	<notification name="invalid_region_handoff">
+		リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</notification>
+	<notification name="blocked_tport">
+		申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
+やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
+	</notification>
+	<notification name="nolandmark_tport">
+		残念ながら、システムはランドマーク目的地を探せませんでした。
+	</notification>
+	<notification name="timeout_tport">
+		申し訳ございません。システムはテレポート接続を完了できませんでした。
+もう少し後でやり直してください。
+	</notification>
+	<notification name="noaccess_tport">
+		残念ながら、そのテレポート目的地へのアクセスがありません。
+	</notification>
+	<notification name="missing_attach_tport">
+		添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
+	</notification>
+	<notification name="too_many_uploads_tport">
+		この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
+数分後にやり直すか、または混雑していない他の地域をお試しください。
+	</notification>
+	<notification name="expired_tport">
+		申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
+	</notification>
+	<notification name="expired_region_handoff">
+		申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
+数分後にやり直してください。
+	</notification>
+	<notification name="no_host">
+		テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
+	</notification>
+	<notification name="no_inventory_host">
+		持ち物システムは現在利用できません。
+	</notification>
+	<notification name="CannotSetLandOwnerNothingSelected">
+		土地所有者設定ができません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotSetLandOwnerMultipleRegions">
+		複数の地域が選択されたため、
+土地の所有権を取得できません。
+選択する面積を小さくして、もう一度試してください。
+	</notification>
+	<notification name="ForceOwnerAuctionWarning">
+		この区画はオークションに出品されています。
+区画の所有権を取得するとオークションが無効になり、
+入札が開始していたら不満に思う住人が出てくるかもしれません。
+所有権を取得しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotContentifyNothingSelected">
+		コンテンツ化は不可能です:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotContentifyNoRegion">
+		コンテンツ化は不可能です:
+土地が選択されていません。
+	</notification>
+	<notification name="CannotReleaseLandNothingSelected">
+		土地を破棄することができません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotReleaseLandNoRegion">
+		土地を破棄できません:
+地域が見つかりません。
+	</notification>
+	<notification name="CannotBuyLandNothingSelected">
+		土地を購入できません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotBuyLandNoRegion">
+		土地を購入できません:
+この土地がある地域を見つけることができません
+	</notification>
+	<notification name="CannotCloseFloaterBuyLand">
+		[APP_NAME]による、
+この取引の見積りが完了するまで「土地を購入」ウィンドウを閉じることはできません。
+	</notification>
+	<notification name="CannotDeedLandNothingSelected">
+		土地を譲渡できません:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotDeedLandNoGroup">
+		土地を譲渡できません:
+グループが選択されていません。
+	</notification>
+	<notification name="CannotDeedLandNoRegion">
+		土地を譲渡できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotDeedLandMultipleSelected">
+		土地を譲渡できません:
+複数の区画が選択されています。
+
+これより1つの区画を選択してください。
+	</notification>
+	<notification name="ParcelCanPlayMedia">
+		ここではストリーミング・メディア再生が可能です。
+メディアのストリーミングには、高速なインターネット接続環境が必要です。
+
+利用可能になったら再生しますか?
+(このオプションは、「環境設定」>「音声とビデオ」で後からでも変更できます)
+		<usetemplate name="okcancelbuttons" notext="無効化" yestext="メディアを再生"/>
+	</notification>
+	<notification name="CannotDeedLandWaitingForServer">
+		土地を譲渡できません:
+サーバーからの所有権情報を待っています。
+
+再度、試みてください。
+	</notification>
+	<notification name="CannotDeedLandNoTransfer">
+		土地を譲渡できません:
+この地域 [REGION] では土地の譲渡が許されていません。
+	</notification>
+	<notification name="CannotReleaseLandWatingForServer">
+		土地を破棄できません:
+サーバーが区画情報を更新するのを待っています。
+
+もう少し後でやり直してください。
+	</notification>
+	<notification name="CannotReleaseLandSelected">
+		土地を破棄できません:
+あなたは、選択したすべての区画を所有していません。
+
+1つの区画を選択してください。
+	</notification>
+	<notification name="CannotReleaseLandDontOwn">
+		土地を破棄できません:
+あなたはこの土地を手放すことを許可されていません。
+あなたの区画は緑色で表示されています。
+	</notification>
+	<notification name="CannotReleaseLandRegionNotFound">
+		土地を破棄できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotReleaseLandNoTransfer">
+		土地を破棄できません:
+この [REGION] では土地の譲渡が許されていません。
+	</notification>
+	<notification name="CannotReleaseLandPartialSelection">
+		土地を破棄できません:
+区画全体を選択して破棄する必要があります。
+
+区画全体を選択するか、または、まず最初に区画を分割してください。
+	</notification>
+	<notification name="ReleaseLandWarning">
+		あなたは、[AREA]平方メートルの土地を破棄しようとしています。
+この区画を破棄するとあなたの土地ではなくなりますが、
+L$は返金されません。
+
+土地を破棄しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNothingSelected">
+		土地を分割できません:
+
+区画が選定されていません。
+	</notification>
+	<notification name="CannotDivideLandPartialSelection">
+		土地を分割できません:
+
+区画全体が選択されています。
+区画の一部を選択してください。
+	</notification>
+	<notification name="LandDivideWarning">
+		この土地を分割すると、2つの区画に別れます。
+区画ごとの設定が可能になります。 この操作を行うと、一部の設定がデフォルトにリセットされます。
+
+土地の分割操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="CannotDivideLandNoRegion">
+		土地を分割できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotJoinLandNoRegion">
+		土地を統合できません:
+この土地がある地域が見つかりません。
+	</notification>
+	<notification name="CannotJoinLandNothingSelected">
+		土地を統合できませんでした:
+区画が選定されていません。
+	</notification>
+	<notification name="CannotJoinLandEntireParcelSelected">
+		土地を統合できません:
+1つの区画しか選択されていません。
+
+両方の区画をまたいで土地を選択してください。
+	</notification>
+	<notification name="CannotJoinLandSelection">
+		土地を統合できません:
+1つ以上の区画を選択する必要があります。
+
+両方の区画をまたいで土地を選択してください。
+	</notification>
+	<notification name="JoinLandWarning">
+		この土地を統合すると、選択された長方形に交差する
+全ての区画を基にして1つの大きな区画が作成されます。
+新しい区画の名前とオプションを再設定する必要があります。
+
+土地を統合しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmNotecardSave">
+		このアイテムをコピー、表示する前に、ノートカードの保存が必要です。 保存しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmItemCopy">
+		このアイテムをあなたの持ち物にコピーしますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="コピー"/>
+	</notification>
+	<notification name="ResolutionSwitchFail">
+		解像度を [RESX]x[RESY]に切り替えることができませんでした。
+	</notification>
+	<notification name="ErrorUndefinedGrasses">
+		エラー:未定義の植物:[SPECIES]
+	</notification>
+	<notification name="ErrorUndefinedTrees">
+		エラー:未定義の樹木:[SPECIES]
+	</notification>
+	<notification name="CannotSaveWearableOutOfSpace">
+		「[NAME]」を服のファイルに保存できません。  コンピューターの
+ディスクスペースを少し増やしてから、もう一度
+保存してみてください。
+	</notification>
+	<notification name="CannotSaveToAssetStore">
+		[NAME]を中央資産格納庫に保存できません。
+これは一時的な不具合です。
+服飾品などをカスタマイズし、数分後にもう一度保存してください。
+	</notification>
+	<notification name="YouHaveBeenLoggedOut">
+		あなたは[SECOND_LIFE]からログアウトされました。
+            [MESSAGE]
+「IMとチャットを表示」をクリックすると、
+現在あるIMとチャットを確認できます。
+確認しない場合は「終了」をクリックし、
+すぐに[APP_NAME]を終了してください。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="IMとチャットを表示"/>
+	</notification>
+	<notification name="OnlyOfficerCanBuyLand">
+		グループ用の土地の購入ができません:
+あなたにはアクティブなグループのために土地を購入する権限がありません。
+	</notification>
+	<notification label="フレンドを追加" name="AddFriend">
+		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
+
+[NAME] にフレンドシップを送りますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="フレンドを追加" name="AddFriendWithMessage">
+		フレンドとして追加すると、お互いの現在地の地図への表示許可、オンラインステータス表示の設定をすることができます。
+
+[NAME] にフレンドシップのオファーをしますか?
+		<form name="form">
+			<input name="message">
+				フレンドとして登録してくれますか?
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="RemoveFromFriends">
+		[FIRST_NAME] [LAST_NAME]をフレンドリストから削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="RemoveMultipleFromFriends">
+		フレンドリストから複数のフレンドを削除しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedPublicObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのスクリプト・オブジェクトをこのシム内の他のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllScriptedObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのスクリプト・オブジェクトをこのシム内のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GodDeleteAllObjectsByUser">
+		**[AVATAR_NAME]**
+所有のすべてのオブジェクト(スクリプト・オブジェクトと非スクリプト・オブジェクト)を
+このシム内のすべての土地から削除しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BlankClassifiedName">
+		クラシファイドに名前を指定してください。
+	</notification>
+	<notification name="MinClassifiedPrice">
+		広告料の支払い金額は、Lと[MIN_PRICE]が下限です。
+
+金額を増やしてください。
+	</notification>
+	<notification name="ConfirmObjectDeleteLock">
+		選択したアイテムの1つ以上がロックされています。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopy">
+		選択したアイテムの1つ以上がコピーできません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoOwn">
+		選択したアイテムの1つ以上を、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopy">
+		一つ以上のオブジェクトがロックされています。
+一つ以上のオブジェクトがコピーできません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoOwn">
+		一つ以上のオブジェクトがロックされています。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteNoCopyNoOwn">
+		一つ以上のオブジェクトがコピーできません。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectDeleteLockNoCopyNoOwn">
+		一つ以上のオブジェクトがロックされています。
+一つ以上のオブジェクトがコピーできません。
+1つ以上のオブジェクトを、あなたは所有していません。
+
+本当にこれらのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLock">
+		一つ以上のオブジェクトがロックされています。
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeNoOwn">
+		取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
+あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
+そのため、将来、変更やコピーの能力が制限される可能性があります。
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmObjectTakeLockNoOwn">
+		1つ以上のオブジェクトがロックされています。
+取得しようとしているオブジェクトには、あなたの所有物でないオブジェクトが含まれています。
+あなたの所有物ではないオブジェクトを取得すると、次のオーナーの権限がそのオブジェクトに適用されます。
+そのため、将来、変更やコピーの能力が制限される可能性があります。
+この選択内容のままで続行することは可能ですが、
+
+これらのアイテムの取得を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CantBuyLandAcrossMultipleRegions">
+		複数の地域が選択されたため、土地を購入できません。
+
+選択する面積を小さくしてもう一度試してください。
+	</notification>
+	<notification name="DeedLandToGroup">
+		この区画の譲渡に際しては、
+このグループが十分な土地クレジットを保有および維持していることが必要です。
+土地の購入価格は、オーナーに返金されません。譲渡された区画が売れると、販売価格はグループ・メンバーに均等に分配されます。
+
+この[AREA]平方メートルの土地を、グループ
+「[GROUP_NAME]」に譲渡しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		この区画の譲渡に際しては、このグループが
+十分な土地クレジットを保有および維持していることが必要です。
+この譲渡により、
+「[FIRST_NAME] [LAST_NAME]」から
+グループに対して土地が同時に提供されます。
+土地の購入価格は、オーナーに返金されません。
+譲渡された区画が売れると、販売料金はグループ・メンバーに均等に分配されます。
+
+この[AREA]平方メートルの土地を、グループ「[GROUP_NAME]」に譲渡しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="DisplaySetToSafe">
+		-safeオプションを指定したので、
+表示設定はセーフ・レベルに設定されています。
+	</notification>
+	<notification name="DisplaySetToRecommended">
+		表示設定は、あなたのシステム構成に
+基づいて推奨されたレベルに設定されています。
+	</notification>
+	<notification name="ErrorMessage">
+		[ERROR_MESSAGE]
+	</notification>
+	<notification name="AvatarMovedDesired">
+		目的地は現在ご利用いただけません。
+近くのリージョンに移動しました。
+	</notification>
+	<notification name="AvatarMovedLast">
+		前回いた場所は現在ご利用いただけません。
+近くのリージョンに移動しました。
+	</notification>
+	<notification name="AvatarMovedHome">
+		ホームロケーションは現在ご利用いただけません。
+近くのリージョンに移動しました。
+新たにホームを設定しなおすといいかもしれません。
+	</notification>
+	<notification name="ClothingLoading">
+		現在衣類をダウンロード中です。
+このまま [SECOND_LIFE] を通常通りご使用いただけます。他人からはあなたは正しく表示されます。
+		<form name="form">
+			<ignore name="ignore" text="衣類がダウンロードされるまで時間がかかっています"/>
+		</form>
+	</notification>
+	<notification name="FirstRun">
+		[APP_NAME]のインストールが完了しました。
+
+[SECOND_LIFE] の使用が初めての方は、
+ログイン前にアカウントの作成が必要です。
+www.secondlife.comに移動し、新規アカウントの作成を行いますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="新規アカウント..."/>
+	</notification>
+	<notification name="LoginPacketNeverReceived">
+		接続がなかなかできません。 お使いのインターネット接続か、[SECOND_LIFE_GRID] の問題と考えられます。
+
+インターネット接続を確認してから数分後に再接続するか、ヘルプをクリックして [SUPPORT_SITE] をご覧になるか、テレポートをクリックしてホームに移動してみてください。
+		<url name="url">
+			http://jp.secondlife.com/support/
+		</url>
+		<form name="form">
+			<button name="OK" text="OK"/>
+			<button name="Help" text="ヘルプ"/>
+			<button name="Teleport" text="テレポート"/>
+		</form>
+	</notification>
+	<notification name="WelcomeChooseSex">
+		まもなくあなたのアバターが表示されます。
+
+矢印キーを使用して歩きます。
+ヘルプが必要なときや[SECOND_LIFE]について知りたいときは、
+F1キーを押してください。
+男性あるいは女性のアバターを選択してください。
+あなたの決定は後で変更できます。
+		<usetemplate name="okcancelbuttons" notext="女性" yestext="男性"/>
+	</notification>
+	<notification name="NotEnoughCurrency">
+		[NAME] L$[PRICE] 残高不足のため実行不可です。
+	</notification>
+	<notification name="GrantedModifyRights">
+		[FIRST_NAME] [LAST_NAME] のオブジェクトの編集権限を得ました。
+	</notification>
+	<notification name="RevokedModifyRights">
+		[FIRST_NAME] [LAST_NAME]
+のオブジェクトを修正する権限が取り消されました。
+	</notification>
+	<notification name="FlushMapVisibilityCaches">
+		この手順は、この地域の地図のキャッシュを消去します。
+これが便利なのはデバッグ時のみです。
+(作成中は5分間経つと、全員の地図が再度ログイン後に
+更新されます)
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyOneObjectOnly">
+		一度に一つ以上のオブジェクトをと買うことはできません。  オブジェクトを一つだけ選んでもう一度お試しください。
+	</notification>
+	<notification name="OnlyCopyContentsOfSingleItem">
+		一度に複数のアイテムのコンテンツはコピーできません。
+選択するオブジェクトを1つだけにして、もう一度試してください。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="KickUsersFromRegion">
+		この地域の全ての住人をホームにテレポートしますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="EstateObjectReturn">
+		[USER_NAME]が所有しているオブジェクトを返却しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="InvalidTerrainBitDepth">
+		地域テクスチャを設定できませんでした:
+地形テクスチャ[TEXTURE_NUM]は、無効のビット深度[TEXTURE_BIT_DEPTH]です。
+
+テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
+	</notification>
+	<notification name="InvalidTerrainSize">
+		地域テクスチャを設定できませんでした:
+地形テクスチャ[TEXTURE_NUM]は、[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]では大きすぎます。
+
+テクスチャ[TEXTURE_NUM]を24ビット512x512かそれ以下のイメージと交換し、「適用」を再度クリックしてください。
+	</notification>
+	<notification name="RawUploadStarted">
+		アップロード開始。 接続速度によっては、
+最大2分間かかります。
+	</notification>
+	<notification name="ConfirmBakeTerrain">
+		現在の地形を構築しようとしています。
+この操作を行うと、現在の地形が上昇/下降の制限範囲の中心になり、「復帰」ツールのデフォルトになります。
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="MaxAllowedAgentOnRegion">
+		許可住人は [MAX_AGENTS] 人までです。
+	</notification>
+	<notification name="MaxBannedAgentsOnRegion">
+		禁止住人は[MAX_BANNED]人までです。
+	</notification>
+	<notification name="MaxAgentOnRegionBatch">
+		[NUM_ADDED] 個のエージェントを追加しようとして失敗しました: [MAX_AGENTS] [LIST_TYPE] 制限を [NUM_EXCESS] 個超過しています。
+	</notification>
+	<notification name="MaxAllowedGroupsOnRegion">
+		許可グループは[MAX_GROUPS]グループまでです。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="構築する"/>
+	</notification>
+	<notification name="MaxManagersOnRegion">
+		不動産マネージャーは[MAX_MANAGER]人までです。
+	</notification>
+	<notification name="OwnerCanNotBeDenied">
+		不動産オーナーを不動産「禁止住人」リストに追加できません。
+	</notification>
+	<notification name="CanNotChangeAppearanceUntilLoaded">
+		服および形がロードされるまで、容姿の変更はできません。
+	</notification>
+	<notification name="ClassifiedMustBeAlphanumeric">
+		クラシファイド広告の名前は、アルファベットか
+数字で始めます。  句読点では始められません。
+	</notification>
+	<notification name="CantSetBuyObject">
+		オブジェクトが販売対象ではないため、オブジェクトの購入が設定できません。
+販売対象のオブジェクトを設定し、もう一度試してください。
+	</notification>
+	<notification name="FinishedRawDownload">
+		未加工の地形ファイルを次へとダウンロードしました:
+[DOWNLOAD_PATH]。
+	</notification>
+	<notification name="DownloadWindowsMandatory">
+		[APP_NAME]の新しいバージョンが利用可能です。
+[MESSAGE]
+[APP_NAME]を使用するためには、
+このアップデートをダウンロードする必要があります。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadWindows">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadWindowsReleaseForDownload">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinuxMandatory">
+		[APP_NAME] の最新バージョンがご利用可能です。
+[MESSAGE]
+[APP_NAME] をご利用になるにはこのアップデートは必須です。
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinux">
+		[APP_NAME] のアップデートバージョンがご利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンス向上のためにインストールをおすすめします。
+		<usetemplate name="okcancelbuttons" notext="続ける" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadLinuxReleaseForDownload">
+		[APP_NAME] のアップデートバージョンがご利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンス向上のためにインストールをおすすめします。
+		<usetemplate name="okcancelbuttons" notext="続ける" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMacMandatory">
+		[APP_NAME]の新しいバージョンが利用可能です。
+[MESSAGE]
+[APP_NAME]を使用するために、
+このアップデートをダウンロードする必要があります。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="終了" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMac">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DownloadMacReleaseForDownload">
+		[APP_NAME]のアップデート・バージョンが利用可能です。
+[MESSAGE]
+このアップデートは必須ではありませんが、パフォーマンスと安定性を向上させるためにインストールすることをお勧めします。
+
+アプリケーションがあるフォルダにダウンロードしますか?
+		<usetemplate name="okcancelbuttons" notext="続行" yestext="ダウンロード"/>
+	</notification>
+	<notification name="DeedObjectToGroup">
+		このオブジェクトを譲渡するとグループは以下のことが可能です:
+* オブジェクトに支払われたL$を受領します。
+		<usetemplate ignoretext="オブジェクトをグループに譲渡する前に確認する" name="okcancelignore" notext="取り消し" yestext="譲渡"/>
+	</notification>
+	<notification name="WebLaunchExternalTarget">
+		Web ブラウザを開いてこのコンテンツを表示しますか?
+		<usetemplate ignoretext="ブラウザを起動して Web ページを見る" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchJoinNow">
+		secondlife.com でアカウントの管理をしますか?
+		<usetemplate ignoretext="ブラウザを起動してアカウントを管理する" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchSecurityIssues">
+		[SECOND_LIFE] Wikiで、
+セキュリティ問題を報告する方法をご覧ください。
+		<usetemplate ignoretext="ブラウザを起動してセキュリティ問題の報告の仕方を確認する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchQAWiki">
+		[SECOND_LIFE] 品質保証関連Wikiをご覧ください。
+		<usetemplate ignoretext="ブラウザを起動して QA Wiki を見る" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchPublicIssue">
+		[SECOND_LIFE]のパブリック問題トラッカーで、
+バグやその他の問題を報告できます。
+		<usetemplate ignoretext="ブラウザを確認してパブリック問題トラッカーを使用する" name="okcancelignore" notext="キャンセル" yestext="ページへ行く"/>
+	</notification>
+	<notification name="WebLaunchSupportWiki">
+		Linden公式ブログで、最新のニュースや情報を入手してください。
+		<usetemplate ignoretext="ブラウザを起動して公式ブログを見る" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLGuide">
+		スクリプトガイドを開きますか?
+		<usetemplate ignoretext="ブラウザを起動してスクリプトガイドを見る" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="WebLaunchLSLWiki">
+		LSL ポータルでスクリプトに関する情報を確認しますか?
+		<usetemplate ignoretext="ブラウザを起動して LSL ポータルを見る" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
+	</notification>
+	<notification name="ReturnToOwner">
+		選択したオブジェクトを、所有者に返却しますか?
+譲渡可能なオブジェクトは
+以前の所有者に返却されます。
+
+*警告* 移転が不可能の譲渡されたオブジェクトは削除されます!
+		<usetemplate ignoretext="オブジェクトを所有者に返却する前に確認する" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="GroupLeaveConfirmMember">
+		現在あなたは [GROUP]のメンバーです。
+ここから抜けますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmKick">
+		すべてのユーザーをグリッド外にキックしようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="全てのユーザを追い出す"/>
+	</notification>
+	<notification name="MuteLinden">
+		残念ながらLindenを無視設定に入れることはできません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CannotStartAuctionAlreadyForSale">
+		既に売り出し中の区画なのでオークションにかけることはできません。  オークションにかけたい場合は売り出し設定を解除してから行ってください。
+	</notification>
+	<notification label="オブジェクトを名前でミュートできませんでした" name="MuteByNameFailed">
+		あなたはすでにこの名前をミュートしています。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RemoveItemWarn">
+		コンテンツを削除すると、許可があっても、オブジェクトにダメージを与えることがあります。
+そのアイテムの削除を続けますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferCallingCard">
+		現在コーリングカードを送れません。数分後にもう一度試してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="CantOfferFriendship">
+		現在フレンドシップを送れません。数分後に試してください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="BusyModeSet">
+		取り込み中モードになりました。
+チャットとインスタントメッセージは表示されません。 受信するインスタントメッセージには取り込み中返答メッセージが表示されます。 テレポートのオファーは受け取り拒否となります。 アイテムのオファーはすべてゴミ箱に入ります。
+		<usetemplate ignoretext="ログイン状態を取り込み中モードに変更する" name="okignore" yestext="OK"/>
+	</notification>
+	<notification name="JoinedTooManyGroupsMember">
+		加入できるグループの最大限に達しました。 このグループに加入するために他のグループを脱退するか、この申し入れを断ってください。
+[NAME] があなたをグループのメンバーとして勧誘しています。
+[INVITE]
+		<usetemplate name="okcancelbuttons" notext="辞退" yestext="参加"/>
+	</notification>
+	<notification name="KickUser">
+		どんなメッセージを表示して、このユーザーを追い出しますか?
+		<form name="form">
+			<input name="message">
+				あなたは管理者によりログオフされました。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="KickAllUsers">
+		どんなメッセージを表示して、グリッドにいる全員を追い出しますか?
+		<form name="form">
+			<input name="message">
+				あなたは管理者によりログオフされました。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="FreezeUser">
+		どんなメッセージを表示して、このユーザーをフリーズしますか?
+		<form name="form">
+			<input name="message">
+				あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="UnFreezeUser">
+		どんなメッセージを表示して、このユーザーのフリーズを解除しますか?
+		<form name="form">
+			<input name="message">
+				もうフリーズされていません。
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleport">
+		次のメッセージを添えてあなたが今いる場所へのテレポートを送りますか?
+		<form name="form">
+			<input name="message">
+				[REGION]に来ませんか?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="OfferTeleportFromGod">
+		ユーザーをゴッド・コールで呼び寄せますか?
+		<form name="form">
+			<input name="message">
+				[REGION]に来ませんか?
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="TeleportFromLandmark">
+		本当にテレポートしますか?
+		<usetemplate ignoretext="ランドマークにテレポートしたいか確認する" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
+	</notification>
+	<notification name="TeleportToPick">
+		[PICK] にテレポートしますか?
+		<usetemplate ignoretext="ピックの場所にテレポートしたいか確認する" name="okcancelignore" notext="キャンセル" yestext="テレポート"/>
+	</notification>
+	<notification label="あなたの不動産内の全員にメッセージを送信" name="MessageEstate">
+		今あなたの不動産にいる人全員に送る
+短いメッセージを入力してください。
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification label="Lindenの不動産を変更" name="ChangeLindenEstate">
+		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)を変更しようとしています。
+
+これはユーザーの経験を根本から揺るがしかねない「非常に危険な行為」です。これにより、メインランドで多数の地域が変更され、スペースサーバーに悪影響が生じます。
+
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="Lindenの不動産へのアクセスを変更" name="ChangeLindenAccess">
+		あなたはLinden所有の不動産(メインランド、ティーングリッド、オリエンテーションなど)へのアクセスリストを変更しようとしています。
+
+この行為は「危険」であり、グリッドからオブジェクトやお金の転送をもたらすハッキングを引き起こす可能性があるため、完全にそれを意図した場合のみ行うべきものです。
+これにより多数の地域が変更され、スペースサーバーに悪影響が生じます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedAgentAdd">
+		この不動産の許可リストだけに追加しますか? それとも[ALL_ESTATES]のすべての許可リストに追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedAgentRemove">
+		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedGroupAdd">
+		この不動産のグループ許可リストだけに追加しますか? それとも[ALL_ESTATES]のグループ許可リストに追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateAllowedGroupRemove">
+		許可リストからの削除をこの不動産についてのみ行いますか? それとも、[ALL_ESTATES]について行いますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateBannedAgentAdd">
+		この不動産についてのみアクセスを拒否しますか? それとも[ALL_ESTATE]へのアクセスを拒否しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateBannedAgentRemove">
+		この住人を、この不動産のみ、または[ALL_ESTATES]へとアクセスできるように、禁止リストから削除しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateManagerAdd">
+		この不動産のみ、または[ALL_ESTATES]に対して、不動産マネージャーを追加しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="不動産を選択" name="EstateManagerRemove">
+		不動産マネージャーを、この不動産のみ、または[ALL_ESTATES]から、削除しますか?
+		<usetemplate canceltext="取り消し" name="yesnocancelbuttons" notext="すべての不動産" yestext="この不動産"/>
+	</notification>
+	<notification label="キックを確認" name="EstateKickUser">
+		この不動産から[EVIL_USER]を追い出しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="EstateChangeCovenant">
+		不動産約款を変更しようとしています。操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_KB">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、このリージョンに入ることができません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Notify">
+		あなたのレーティング区分により、その地域(リージョン)へは入ることができません。
+	</notification>
+	<notification name="RegionEntryAccessBlocked_Change">
+		あなたのレーティング区分設定により、その地域(リージョン)へは入ることができません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<form name="form">
+			<button name="OK" text="設定の変更"/>
+			<button default="true" name="Cancel" text="閉じる"/>
+			<ignore name="ignore" text="選択したレーティング区分が原因で、リージョンに入ることができません"/>
+		</form>
+	</notification>
+	<notification name="LandClaimAccessBlocked">
+		あなたのレーティング区分により、この土地を取得することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_KB">
+		あなたのレーティング区分により、この土地を取得することはできません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、この土地を取得できません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="LandClaimAccessBlocked_Notify">
+		あなたのレーティング区分により、この土地を取得することはできません。
+	</notification>
+	<notification name="LandClaimAccessBlocked_Change">
+		あなたのレーティング区分設定により、この土地を取得することはできません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<usetemplate ignoretext="選択したレーティング区分が原因で、土地を取得できません" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked">
+		あなたのレーティング区分により、この土地を購入することはできません。 年齢を確認する際の情報に不足があったためと考えられます。
+
+最新ビューワがインストールされているかをご確認ください。このレーティング区分でのアクセスに関する詳細はナレッジベースをご覧ください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_KB">
+		あなたのレーティング区分により、この土地を購入することはできません。
+
+ナレッジベースを開きレーティング区分について学びますか?
+		<url name="url">
+			http://wiki.secondlife.com/wiki/レーティング区分概要_(KB)
+		</url>
+		<usetemplate ignoretext="レーティング区分の制限のため、この土地を購入できません" name="okcancelignore" notext="閉じる" yestext="ナレッジベースを開く"/>
+	</notification>
+	<notification name="LandBuyAccessBlocked_Notify">
+		あなたのレーティング区分により、この土地を購入することはできません。
+	</notification>
+	<notification name="LandBuyAccessBlocked_Change">
+		あなたのレーティング区分設定により、この土地を購入することができません。
+
+「設定を変更」をクリックするとあなたのレーティング区分が上がり、入れるようになります。 あなたは今後 [REGIONMATURITY] コンテンツの検索及びアクセスが可能となります。
+あとで設定を元に戻したい場合は、「編集」>「環境設定」>「一般」をご覧ください。
+		<usetemplate ignoretext="選択したレーティング区分が原因で、土地を購入できません" name="okcancelignore" notext="閉じる" yestext="設定の変更"/>
+	</notification>
+	<notification name="TooManyPrimsSelected">
+		選択したプリムが多すぎます。
+[MAX_PRIM_COUNT] を選択するか、
+プリム数を減らしてもう一度お試しください。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemImportingEstateCovenant">
+		不動産約款のインポート時に問題発生。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ProblemAddingEstateManager">
+		新しい不動産マネージャーの追加に関する問題:
+1つ以上の不動産で、マネージャーリストが満杯になっています。
+	</notification>
+	<notification name="ProblemAddingEstateGeneric">
+		不動産リストの追加に関する問題:
+1つ以上の不動産で、リストが満杯になっています。
+	</notification>
+	<notification name="UnableToLoadNotecardAsset">
+		現在ノートカードの資産IDを読み込むことができません。
+	</notification>
+	<notification name="NotAllowedToViewNotecard">
+		要求された資産IDに関するノートカードを閲覧するには権限が不十分です。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MissingNotecardAssetID">
+		ノートカード用資産IDがデータベースに登録されていません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="PublishClassified">
+		注意:クラシファイド広告の料金は払い戻しされません。
+
+L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="SetClassifiedMature">
+		この広告にMatureコンテンツは含まれていますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="SetGroupMature">
+		この広告にMatureコンテンツは含まれていますか?
+		<usetemplate canceltext="キャンセル" name="yesnocancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification label="再起動を確認" name="ConfirmRestart">
+		この地域を2分後に再起動しようとしています。
+操作を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification label="この地域内の全員にメッセージを送信" name="MessageRegion">
+		この地域にいる人全員に送る
+短いメッセージを入力してください。
+		<form name="form">
+			<input name="message"/>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification label="地域のレーティング区分指定変更済み" name="RegionMaturityChange">
+		この地域のレーティング区分指定がアップデートされました。
+この変更が地図に反映されるまでにはしばらく時間がかかります。
+	</notification>
+	<notification label="ボイスバージョンの不一致" name="VoiceVersionMismatch">
+		このバージョンの [APP_NAME] は、
+この地域のボイスチャット機能に対応していません。
+ボイスチャットを正しく使用するには、
+[APP_NAME] のアップデートが必要です。
+	</notification>
+	<notification label="オブジェクトを購入できません" name="BuyObjectOneOwner">
+		複数のオーナーから同時にオブジェクトを購入することはできません。
+単一のオブジェクトを選択し、もう一度試してください。
+	</notification>
+	<notification label="コンテンツを購入できません" name="BuyContentsOneOnly">
+		一度に複数のオブジェクトのコンテンツは購入できません。
+選択するオブジェクトを1つだけにして、もう一度試してください。
+	</notification>
+	<notification label="コンテンツを購入できません" name="BuyContentsOneOwner">
+		複数のオーナーから同時にオブジェクトを購入することはできません。
+単一のオブジェクトを選択し、もう一度試してください。
+	</notification>
+	<notification name="BuyOriginal">
+		オリジナルのオブジェクトを[OWNER]からL$[PRICE]で購入しますか?
+これにより、あなたがオブジェクトのオーナーになります。
+可能な操作は、
+変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyOriginalNoOwner">
+		L$[PRICE]でオリジナルのオブジェクトを購入しますか?
+これにより、あなたがオブジェクトのオーナーになります。
+可能な操作は、
+変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopy">
+		コピーを[OWNER]からL$[PRICE]で購入しますか?
+購入したオブジェクトは、あなたの持ち物にコピーされます。
+可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyCopyNoOwner">
+		L$[PRICE]でコピーを購入しますか?
+購入したオブジェクトは、あなたの持ち物にコピーされます。
+可能な操作は、変更:[MODIFYPERM]、コピー:[COPYPERM]、
+再販/プレゼント[RESELLPERM]です。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyContents">
+		コンテンツを[OWNER]からL$[PRICE]で購入しますか?
+購入したコンテンツは、あなたの持ち物にコピーされます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="BuyContentsNoOwner">
+		L$[PRICE]でコンテンツを購入しますか?
+購入したコンテンツは、あなたの持ち物にコピーされます。
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchase">
+		この取引は以下のとおり行われます:
+[ACTION]
+
+この購入を続行しますか?
+		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmPurchasePassword">
+		この取引は以下のとおり行われます:
+[ACTION]
+
+この購入を続行しますか?
+パスワードを再入力し、「OK」をクリックしてください。
+		<form name="form">
+			<input name="message"/>
+			<button name="ConfirmPurchase" text="OK"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="SetPickLocation">
+		メモ:
+本ピックのロケーションを更新しましたが、
+他の詳細は元の値のままになります。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromObject">
+		「コピー禁止」の持ち物アイテムが選択されました。
+これらのアイテムはコピーされないまま、あなたの持ち物に移動されます。
+
+
+アイテムを動かしますか?
+		<usetemplate ignoretext="「コピー不可」のアイテムをオブジェクトから動かす前に警告する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="MoveInventoryFromScriptedObject">
+		「コピー禁止」の持ち物アイテムが選択されました。
+これらのアイテムはコピーされるのではなく、あなたの持ち物に移動されます。
+このオブジェクトはスクリプト付きなので、持ち物に移動させると
+スクリプトに誤動作が起きる可能性があります。
+
+持ち物アイテムを移動しますか?
+		<usetemplate ignoretext="スクリプト入りのオブジェクトを壊す恐れのある「コピー不可」のアイテムを動かす前に警告する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ClickActionNotPayable">
+		警告: クリックで「オブジェクトに支払う」設定をしました。スクリプトに money()イベントが追加されると動作します。
+		<form name="form">
+			<ignore name="ignore" text="money() スクリプトを入れずにオブジェクトを制作中に、「オブジェクトに支払う」アクションを設定"/>
+		</form>
+	</notification>
+	<notification name="OpenObjectCannotCopy">
+		このオブジェクトには、あなたがコピーできるアイテムはありません。
+	</notification>
+	<notification name="WebLaunchAccountHistory">
+		secondlife.com でアカウント履歴を確認しますか?
+		<usetemplate ignoretext="ブラウザを起動してアカウント履歴を見る" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
+	</notification>
+	<notification name="ConfirmQuit">
+		終了しようとしています。操作を続行しますか?
+		<usetemplate ignoretext="終了時に確認する" name="okcancelignore" notext="終了しない" yestext="終了"/>
+	</notification>
+	<notification name="HelpReportAbuseEmailLL">
+		利用規約違反とコミュニティースタンダード違反の報告にこのツールをご使用ください。 参照:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+利用規約違反とコミュニティースタンダード違反に関する全てのレポートは、調査され、解決されます。
+以下のリンク先の被害報告にてその確認をすることができます。
+
+http://secondlife.com/support/incidentreport.php
+	</notification>
+	<notification name="HelpReportAbuseEmailEO">
+		重要: このレポートはLinden Lab 社ではなく、
+あなたが現在いる地域のオーナーに送られます。
+-
+あなたが今いる地域のオーナーは、
+住人と訪問者へのサービスの一環として、この地域からのレポートをすべて受け付け、解決することに同意しています。
+よってLinden Lab 社が、
+あなたがここから提出するレポートを調査することはありません。
+地域のオーナーは、不動産約款で指定している地元の規則を基に、報告された問題を解決します。
+(「世界」のメニューから「土地情報」を選ぶと、約款を閲覧できます)
+-
+このレポートに関する解決策は、この地域にだけ当てはまります。
+住人が[SECOND_LIFE] の他の地域へアクセスする際、
+このレポートの結果に影響されることはありません。
+Linden Lab 社だけが[SECOND_LIFE] 全域における
+アクセス制限権を持っています。
+	</notification>
+	<notification name="HelpReportAbuseSelectCategory">
+		嫌がらせ報告のカテゴリを選択してください。
+カテゴリを選択することにより、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseAbuserNameEmpty">
+		嫌がらせ行為をした人の名前を入力してください。
+正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseAbuserLocationEmpty">
+		嫌がらせがあった場所を入力してください。
+正確な情報の入力により、嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseSummaryEmpty">
+		嫌がらせの概要を入力してください。
+正確な概要の入力により、
+嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseDetailsEmpty">
+		嫌がらせの詳細な説明を入力してください。
+名前や嫌がらせの詳細を、できるだけ具体的に入力してください。
+
+正確な説明の入力により、
+嫌がらせ報告の処理や保管に大変役立ちます。
+	</notification>
+	<notification name="HelpReportAbuseContainsCopyright">
+		住人の皆様へ、
+
+知的財産の侵害に関する報告を行う際には、以下の点に注意してください。
+
+(1) 嫌がらせの報告のプロセス
+[SECOND_LIFE] の権限システムを悪用している住人を見つけたら、
+嫌がらせの報告を行ってください。
+例えばコピーBotの使用、それに似たツールの使用による知的財産権の侵害があります。
+アビューズチームは調査に基づき、
+[SECOND_LIFE] のコミュニティースタンダードや
+利用規約に違反する行為と判断された場合には適切な処置を行っています。
+ただし、コンテンツを[SECOND_LIFE] から撤去してほしい、
+といった要望にはアビューズチームは応えることができません。
+
+(2) DMCA(デジタルミレニアム著作権法)及びコンテンツ撤去プロセス
+[SECOND_LIFE] からのコンテンツの撤去をリクエストするには、
+著作権侵害通知の提出を行う必要があります。
+参照: http://secondlife.com/corporate/dmca.php
+
+この件に関する嫌がらせの報告を続ける際は、このウィンドウを閉じてください。選択すべきカテゴリは「知的財産の侵害>コピーBot及び権限の悪用」のほうが適しているかもしれませんのでご確認ください。
+
+よろしくお願いします。
+
+Linden Lab
+	</notification>
+	<notification name="FailedRequirementsCheck">
+		以下の必要なコンポーネントが、[FLOATER]から抜け落ちています
+[COMPONENTS]
+	</notification>
+	<notification label="既存の付属品を置換" name="ReplaceAttachment">
+		体のこの部位にはオブジェクトが装着されています。
+選択されたオブジェクトと置き換えますか?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="装着しているアイテムと選択したアイテムを入れ替える"/>
+			<button ignore="自動的に交換" name="Yes" text="OK"/>
+			<button ignore="交換しない" name="No" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification label="取り込み中の警告" name="BusyModePay">
+		現在、取り込み中のため、この支払いと
+引き換えのアイテムを受け取ることが
+できません。
+
+この取引を完了する前に、取り込み中の設定を解除しますか?
+		<form name="form">
+			<ignore name="ignore" save_option="true" text="取り込み中モードの時に支払をする"/>
+			<button ignore="常に取り込み中の設定" name="Yes" text="OK"/>
+			<button ignore="取り込み中の設定にしない" name="No" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ConfirmEmptyTrash">
+		ゴミ箱の項目をすべて削除しますか?
+		<usetemplate ignoretext="持ち物のゴミ箱フォルダを空にする前に確認する" name="okcancelignore" notext="キャンセル" yestext="OK"/>
+	</notification>
+	<notification name="ConfirmClearBrowserCache">
+		トラベル、Web、検索の履歴をすべて削除しますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmClearCookies">
+		本当にクッキーをクリアしますか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmClearMediaUrlList">
+		保存された URL のリストを消去します。よろしいですか?
+		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
+	</notification>
+	<notification name="ConfirmEmptyLostAndFound">
+		紛失物の項目をすべて削除しますか?
+		<usetemplate ignoretext="紛失物フォルダを空にする前に確認する" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="CopySLURL">
+		次の SLurl がクリップボードにコピーされました:
+ [SLURL]
+
+Webページにこれをリンクすると、他人がこの場所に簡単にアクセスできます。Webブラウザのアドレスバーに貼り付けて試してみてください。
+		<form name="form">
+			<ignore name="ignore" text="クリップボードに SLurl がコピーされる"/>
+		</form>
+	</notification>
+	<notification name="WLSavePresetAlert">
+		保存された事前設定を上書きしますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="WLDeletePresetAlert">
+		[SKY] を削除しますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="WLNoEditDefault">
+		デフォルトの設定を編集したり削除したりすることはできません。
+	</notification>
+	<notification name="WLMissingSky">
+		このデイ・サイクルのファイルは次の存在しない「空」ファイルを参照しています: [SKY]。
+	</notification>
+	<notification name="PPSaveEffectAlert">
+		ポストプロセス効果が存在します。 上書きしますか?
+		<usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="NewSkyPreset">
+		新しい空の名前を指定してください。
+		<form name="form">
+			<input name="message">
+				新しい事前設定
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ExistsSkyPresetAlert">
+		事前設定がすでに存在します!
+	</notification>
+	<notification name="NewWaterPreset">
+		新しい水の事前設定の名前を指定してください。
+		<form name="form">
+			<input name="message">
+				新しい事前設定
+			</input>
+			<button name="OK" text="OK"/>
+			<button name="Cancel" text="キャンセル"/>
+		</form>
+	</notification>
+	<notification name="ExistsWaterPresetAlert">
+		事前設定がすでに存在します!
+	</notification>
+	<notification name="WaterNoEditDefault">
+		デフォルトの設定を編集したり削除したりすることはできません。
+	</notification>
+	<notification name="ChatterBoxSessionStartError">
+		[RECIPIENT]との新しいチャットを開始することができません
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ChatterBoxSessionEventError">
+		[EVENT]
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="ForceCloseChatterBoxSession">
+		[NAME]とのチャットセッションを閉じます。
+[REASON]
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="Cannot_Purchase_an_Attachment">
+		オブジェクトが取り付けられているときは購入することができません。
+	</notification>
+	<notification label="デビット許可のリクエストについて" name="DebitPermissionDetails">
+		この要求を許可すると、スクリプトからあなたのアカウントにリンデンドルを課金できるようになります。
+この許可を取り消すには、オブジェクトのオーナーはオブジェクトを削除するか、オブジェクトのスクリプトをリセットしなければなりません。
+		<usetemplate name="okbutton" yestext="OK"/>
+	</notification>
+	<notification name="AutoWearNewClothing">
+		作成しようとしている衣類を自動的に装着しますか?
+		<usetemplate ignoretext="容姿編集画面で作成する衣類を装着する" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="NotAgeVerified">
+		年齢確認を済ませていないとこの区画を訪れることができません。  [SECOND_LIFE] サイトで年齢の確認を行いますか?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/verification.php?lang=ja
+		</url>
+		<usetemplate ignoretext="年齢の確認を済ませていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="Cannot enter parcel: no payment info on file">
+		支払情報が登録されていないとこのエリアを訪れることができません。  [SECOND_LIFE] サイトで登録を行いますか?
+
+[_URL]
+		<url name="url" option="0">
+			https://secondlife.com/account/index.php?lang=ja
+		</url>
+		<usetemplate ignoretext="支払情報が登録されていません" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="MissingString">
+		文字列[STRING_NAME]がstrings.xmlに含まれていません
+	</notification>
+	<notification name="SystemMessageTip">
+		[MESSAGE]
+	</notification>
+	<notification name="Cancelled">
+		取り消されました
+	</notification>
+	<notification name="CancelledSit">
+		座るのを取り消されました
+	</notification>
+	<notification name="CancelledAttach">
+		添付は取り消されました
+	</notification>
+	<notification name="ReplacedMissingWearable">
+		欠落している服/身体部位をデフォルトに置換します。
+	</notification>
+	<notification name="GroupNotice">
+		件名: [SUBJECT], メッセージ: [MESSAGE]
+	</notification>
+	<notification name="FriendOnline">
+		[FIRST] [LAST] はオンラインです。
+	</notification>
+	<notification name="FriendOffline">
+		[FIRST] [LAST] はオフラインです。
+	</notification>
+	<notification name="AddSelfFriend">
+		残念ながら自分自身をフレンドに追加することはできません。
+	</notification>
+	<notification name="UploadingAuctionSnapshot">
+		インワールドとウェブ・サイトのスナップショットをアップロード中です...
+(所要時間:約5分)
+	</notification>
+	<notification name="UploadPayment">
+		アップロードに L$[AMOUNT] 支払いました。
+	</notification>
+	<notification name="UploadWebSnapshotDone">
+		Webサイトのスナップショットがアップロードされました。
+	</notification>
+	<notification name="UploadSnapshotDone">
+		インワールドでのスナップショットのアップロードが完了しました。
+	</notification>
+	<notification name="TerrainDownloaded">
+		raw地形がダウンロードされました
+	</notification>
+	<notification name="GestureMissing">
+		ジェスチャー[NAME] がデータベースにありません。
+	</notification>
+	<notification name="UnableToLoadGesture">
+		ジェスチャー[NAME] を読み込むことができません。
+再度、試みてください。
+	</notification>
+	<notification name="LandmarkMissing">
+		データベースにランドマークがありません。
+	</notification>
+	<notification name="UnableToLoadLandmark">
+		ランドマークをロードできません。  もう一度試してください。
+	</notification>
+	<notification name="CapsKeyOn">
+		CapsLock キーが有効になっています。
+パスワードに影響があるかもしれません。
+	</notification>
+	<notification name="NotecardMissing">
+		ノートカードがデータベースにありません。
+	</notification>
+	<notification name="NotecardNoPermissions">
+		このノートカードを見る権限がありません。
+	</notification>
+	<notification name="RezItemNoPermissions">
+		オブジェクトをrezするにはパーミッション(承認)が不足してます。
+	</notification>
+	<notification name="UnableToLoadNotecard">
+		現在ノートカードの資産をロードできません。
+	</notification>
+	<notification name="ScriptMissing">
+		データベースにスクリプトがありません。
+	</notification>
+	<notification name="ScriptNoPermissions">
+		スクリプトを閲覧するには権限が不十分です。
+	</notification>
+	<notification name="UnableToLoadScript">
+		スクリプトをロードできません。  もう一度試してください。
+	</notification>
+	<notification name="IncompleteInventory">
+		あなたの提供するコンテンツは、この場所ではまだ全部揃いません。
+少ししてからもう一度試してください。
+	</notification>
+	<notification name="CannotModifyProtectedCategories">
+		保護されたカテゴリーは修正できません。
+	</notification>
+	<notification name="CannotRemoveProtectedCategories">
+		保護されたカテゴリーは削除できません。
+	</notification>
+	<notification name="OfferedCard">
+		あなたは[FIRST] [LAST] に
+コーリング・カードを送りました。
+	</notification>
+	<notification name="UnableToBuyWhileDownloading">
+		オブジェクトデータのダウンロード中は購入できません。
+もう一度試してください。
+	</notification>
+	<notification name="UnableToLinkWhileDownloading">
+		オブジェクトデータのウンロード中はリンクできません。
+もう一度試してください。
+	</notification>
+	<notification name="CannotBuyObjectsFromDifferentOwners">
+		オブジェクトは一度につき一人の所有者から購入できます。
+オブジェクトを 1 つだけ選んでください。
+	</notification>
+	<notification name="ObjectNotForSale">
+		このオブジェクトは販売対象ではありません。
+	</notification>
+	<notification name="EnteringGodMode">
+		レベル[LEVEL]のゴッド・モードに入ります
+	</notification>
+	<notification name="LeavingGodMode">
+		レベル [LEVEL] のゴッドモードを解除します
+	</notification>
+	<notification name="CopyFailed">
+		これをコピーする権限がありません。
+	</notification>
+	<notification name="InventoryAccepted">
+		[NAME]は、持ち物の提供を受け入れました。
+	</notification>
+	<notification name="InventoryDeclined">
+		[NAME]は、持ち物の提供を断りました。
+	</notification>
+	<notification name="ObjectMessage">
+		[NAME]: [MESSAGE]
+	</notification>
+	<notification name="CallingCardAccepted">
+		コーリング・カードが受理されました。
+	</notification>
+	<notification name="CallingCardDeclined">
+		コーリング・カードが拒否されました。
+	</notification>
+	<notification name="TeleportToLandmark">
+		本土に到達しました。
+[NAME]などの場所にテレポートするには、画面右下にある「持ち物」ボタンをクリックし、ランドマーク(Landmarks)フォルダを選択してください。
+ランドマークをダブルクリックした後「テレポート」をクリックするとその場所へ移動します。
+	</notification>
+	<notification name="TeleportToPerson">
+		本土に到達しました。
+住人の[NAME]と接触するには、画面右下にある「持ち物」ボタンをクリックし、コーリングカード(Calling Cards)フォルダを選択してください。
+カードをダブルクリックし、「IMを送る」をクリックし、メッセージを送信してください。
+	</notification>
+	<notification name="CantSelectLandFromMultipleRegions">
+		サーバーの境界を越えて土地を選択することできません。
+もっと小さな土地を選択してください。
+	</notification>
+	<notification name="SearchWordBanned">
+		コミュニティスタンダードに明記されているコンテンツ制限により、あなたの検索語の一部が除外されました。
+	</notification>
+	<notification name="NoContentToSearch">
+		少なくともどれか一つコンテンツの種類を選択して検索を行ってください。(PG, Mature, Adult)
+	</notification>
+	<notification name="GroupVote">
+		[NAME] は投票の申請をしています:
+[MESSAGE]
+		<form name="form">
+			<button name="VoteNow" text="今すぐ投票する"/>
+			<button name="Later" text="あとで"/>
+		</form>
+	</notification>
+	<notification name="SystemMessage">
+		[MESSAGE]
+	</notification>
+	<notification name="EventNotification">
+		イベント通知:
+
+[NAME]
+[DATE]
+		<form name="form">
+			<button name="Teleport" text="テレポート"/>
+			<button name="Description" text="説明"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="TransferObjectsHighlighted">
+		この区画上に存在するオブジェクトのうち、この区画の購入者に譲渡されるオブジェクトがすべて強調表示されます。
+
+
+*譲渡される樹木や植物は、強調表示されません。
+		<form name="form">
+			<button name="Done" text="完了"/>
+		</form>
+	</notification>
+	<notification name="DeactivatedGesturesTrigger">
+		同じトリガーでアクティブにしないジェスチャー:
+[NAMES]
+	</notification>
+	<notification name="NoQuickTime">
+		Apple社のQuickTimeがシステムにインストールされていないと思われます。
+ストリーミング・メディアの再生を行いたい場合は、QuickTimeのサイト(http://www.apple.com/quicktime)にアクセスして、QuickTime Player をインストールしてください。
+	</notification>
+	<notification name="NoPlugin">
+		「 [MIME_TYPE] 」の MIME タイプを扱うメディアプラグインが見つかりませんでした。  このタイプのメディアはご利用いただけません。
+	</notification>
+	<notification name="MediaPluginFailed">
+		次のメディアプラグインが実行できませんでした:
+    [PLUGIN]
+
+プラグインをインストールしなおすか、問題が解決しない場合はメーカーにお問い合わせください。
+		<form name="form">
+			<ignore name="ignore" text="メディアプラグインの実行に失敗"/>
+		</form>
+	</notification>
+	<notification name="OwnedObjectsReturned">
+		選択した土地の区画上にあったあなたのオブジェクトは、あなたの持ち物に返却されました。
+	</notification>
+	<notification name="OtherObjectsReturned">
+		選択されている土地の区画上にあった
+ [FIRST] [LAST]
+ が所有するオブジェクトは、オーナーの持ち物に返却されました。
+	</notification>
+	<notification name="OtherObjectsReturned2">
+		選択された土地の区画上にあり、
+住人の[NAME]の所有だったオブジェクトはオーナーに返却されました。
+	</notification>
+	<notification name="GroupObjectsReturned">
+		選択されている区画上にあり、[GROUPNAME] というグループと共有だったオブジェクトは、オーナーの持ち物に返却されました。
+譲渡されていた譲渡可能なオブジェクトは、前のオーナーに返却されました。
+グループに譲渡されていた譲渡不可能なオブジェクトは、削除されました。
+	</notification>
+	<notification name="UnOwnedObjectsReturned">
+		選択された土地の区画上にあり、あなたの所有で「なかった」オブジェクトは、本来のオーナーに返却されました。
+	</notification>
+	<notification name="NotSafe">
+		この土地ではダメージが有効です。
+ケガをするかもしれません。 死んでしまった場合はホームにテレポートされます。
+	</notification>
+	<notification name="NoFly">
+		このエリアでは飛行が禁止されています。
+ここでは飛べません。
+	</notification>
+	<notification name="PushRestricted">
+		このエリアではプッシュが制限されています。
+土地所有者以外は他人をプッシュすることはできません。
+	</notification>
+	<notification name="NoVoice">
+		このエリアではボイスチャットが無効です。 誰かが話しているのを聞くことはできません。
+	</notification>
+	<notification name="NoBuild">
+		このエリアでは制作が禁止されています。 オブジェクトを制作したり Rez することはできません。
+	</notification>
+	<notification name="ScriptsStopped">
+		管理者がこの地域内のスクリプトを一時停止させました。
+	</notification>
+	<notification name="ScriptsNotRunning">
+		この地域ではスクリプトの使用が禁止されています
+	</notification>
+	<notification name="NoOutsideScripts">
+		この土地では、外部のスクリプトが禁止されています。
+
+土地所有者のもの以外はスクリプトは実行されません。
+	</notification>
+	<notification name="ClaimPublicLand">
+		そのリージョンにいないと公共の土地を取得することはできません。
+	</notification>
+	<notification name="RegionTPAccessBlocked">
+		あなたのレーティング区分によりその地域(リージョン)へは入ることができません。 年齢確認を行うか、最新ビューワをインストールしてください。
+
+現在のレーティング区分でアクセス可能なエリアに関する詳細はナレッジベースを参照してください。
+	</notification>
+	<notification name="URBannedFromRegion">
+		あなたは地域(リージョン)への立入が禁止されています。
+	</notification>
+	<notification name="NoTeenGridAccess">
+		あなたのアカウントではティーングリッドに接続できません。
+	</notification>
+	<notification name="ImproperPaymentStatus">
+		この地域(リージョン)に入るために適した支払いステータスがありません。
+	</notification>
+	<notification name="MustGetAgeParcel">
+		この区画に入るには年齢確認済みである必要があります。
+	</notification>
+	<notification name="NoDestRegion">
+		目的地の地域(リージョン)が見つかりませんでした。
+	</notification>
+	<notification name="NotAllowedInDest">
+		目的地に入る許可がありません。
+	</notification>
+	<notification name="RegionParcelBan">
+		立入禁止された区画を横断することはできません。 別の方法をお試しください。
+	</notification>
+	<notification name="TelehubRedirect">
+		テレハブに転送されました。
+	</notification>
+	<notification name="CouldntTPCloser">
+		これ以上目的地に近い場所にテレポートができませんでした。
+	</notification>
+	<notification name="TPCancelled">
+		テレポートがキャンセルされました。
+	</notification>
+	<notification name="FullRegionTryAgain">
+		入ろうとしている地域(リージョン)は現在満員です。
+しばらくしてから再度お試しください。
+	</notification>
+	<notification name="GeneralFailure">
+		よくある失敗
+	</notification>
+	<notification name="RoutedWrongRegion">
+		異なる地域(リージョン)に迂回されました。 もう一度お試しください。
+	</notification>
+	<notification name="NoValidAgentID">
+		エージェントIDが無効です。
+	</notification>
+	<notification name="NoValidSession">
+		セッションIDが無効です。
+	</notification>
+	<notification name="NoValidCircuit">
+		回路コードが無効です。
+	</notification>
+	<notification name="NoValidTimestamp">
+		タイムスタンプが無効です。
+	</notification>
+	<notification name="NoPendingConnection">
+		接続を生成できません。
+	</notification>
+	<notification name="InternalUsherError">
+		内部エラーが発生しました。
+	</notification>
+	<notification name="NoGoodTPDestination">
+		この地域(リージョン)では適切なテレポート目的地が見つかりませんでした。
+	</notification>
+	<notification name="InternalErrorRegionResolver">
+		内部エラーが発生しました。
+	</notification>
+	<notification name="NoValidLanding">
+		有効な着地点が見つかりませんでした。
+	</notification>
+	<notification name="NoValidParcel">
+		有効な区画が見つかりませんでした。
+	</notification>
+	<notification name="ObjectGiveItem">
+		[FIRST] [LAST]所有の、
+[OBJECTFROMNAME]から、
+[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+			<button name="Mute" text="無視リストへ"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItemUnknownUser">
+		(未知のユーザー) 所有の[OBJECTFROMNAME]から、
+あなたに[OBJECTNAME]という[OBJECTTYPE]が送られてきました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+			<button name="Mute" text="無視リストへ"/>
+		</form>
+	</notification>
+	<notification name="UserGiveItem">
+		[NAME]は、あなたに[OBJECTNAME]という名前の[OBJECTTYPE]を渡しました。
+		<form name="form">
+			<button name="Keep" text="受け取る"/>
+			<button name="Discard" text="破棄"/>
+		</form>
+	</notification>
+	<notification name="GodMessage">
+		[NAME]
+[MESSAGE]
+	</notification>
+	<notification name="JoinGroup">
+		[MESSAGE]
+		<form name="form">
+			<button name="Join" text="参加"/>
+			<button name="Decline" text="辞退"/>
+			<button name="Info" text="情報"/>
+		</form>
+	</notification>
+	<notification name="TeleportOffered">
+		[NAME]はあなたをテレポートで呼び寄せようとしています:
+
+[MESSAGE]
+		<form name="form">
+			<button name="Teleport" text="テレポート"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="GotoURL">
+		[MESSAGE]
+[URL]
+		<form name="form">
+			<button name="Later" text="あとで"/>
+			<button name="GoNow..." text="今すぐ行く"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendship">
+		[NAME]は、
+フレンド登録を申し込んでいます。
+
+[MESSAGE]
+
+(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="辞退"/>
+		</form>
+	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME]は、
+フレンド登録を申し込んでいます。
+
+(デフォルトでお互いのオンライン・ステータスを見ることができるようになります。)
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+		</form>
+	</notification>
+	<notification name="FriendshipAccepted">
+		[NAME]は、フレンド 登録を受け入れました。
+	</notification>
+	<notification name="FriendshipDeclined">
+		[NAME]は、フレンド 登録を断りました。
+	</notification>
+	<notification name="OfferCallingCard">
+		[FIRST] [LAST]が
+あなたにコーリングカードを送ってきました。
+これにより、あなたの持ち物にブックマークが追加され、この住人にすばやくIMすることができます。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="辞退"/>
+		</form>
+	</notification>
+	<notification name="RegionRestartMinutes">
+		この地域は[MINUTES]分後に再起動されます。
+強制ログアウトとなりますので、この地域の外に出てください。
+	</notification>
+	<notification name="RegionRestartSeconds">
+		このリージョンは [SECONDS] 秒後に再起動されます。.
+このままここにいるとログアウトされます。
+	</notification>
+	<notification name="LoadWebPage">
+		ウェブ・ページ[URL]をロードしますか?
+
+[MESSAGE]
+
+ロード元のオブジェクト:[OBJECTNAME]、オーナー:[NAME]?
+		<form name="form">
+			<button name="Gotopage" text="移動"/>
+			<button name="Cancel" text="取り消し"/>
+		</form>
+	</notification>
+	<notification name="FailedToFindWearableUnnamed">
+		データベースに[TYPE]が見つかりませんでした
+	</notification>
+	<notification name="FailedToFindWearable">
+		データベースに[DESC]という名前の[TYPE]が見つかりませんでした。
+	</notification>
+	<notification name="InvalidWearable">
+		着用しようとしているアイテムはあなたのビューワでは読み込むことができません。 [APP_NAME]ビューワを最新のものにアップグレードしてからこのアイテムを着用してください。
+	</notification>
+	<notification name="ScriptQuestion">
+		「[NAME]」が所有するオブジェクト「[OBJECTNAME]」を:
+
+[QUESTIONS]
+よろしいですか?
+		<form name="form">
+			<button name="Yes" text="はい"/>
+			<button name="No" text="いいえ"/>
+			<button name="Mute" text="無視リストに追加"/>
+		</form>
+	</notification>
+	<notification name="ScriptQuestionCaution">
+		[NAME] 所有の「 [OBJECTNAME] 」 というオブジェクトが次のことをしようとしています:
+
+[QUESTIONS]
+このオブジェクトや制作者を信用できない場合は、このリクエストを拒否してください。
+
+リクエストを受けますか?
+		<form name="form">
+			<button name="Grant" text="許可"/>
+			<button name="Deny" text="拒否"/>
+			<button name="Details" text="詳細..."/>
+		</form>
+	</notification>
+	<notification name="ScriptDialog">
+		[FIRST] [LAST]の「[TITLE]」
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="無視する"/>
+		</form>
+	</notification>
+	<notification name="ScriptDialogGroup">
+		[GROUPNAME]の「[TITLE]」
+[MESSAGE]
+		<form name="form">
+			<button name="Ignore" text="無視する"/>
+		</form>
+	</notification>
+	<notification name="FirstBalanceIncrease">
+		L$[AMOUNT] を受け取りました。
+あなたの L$ 残高は画面右上に表示されています。
+	</notification>
+	<notification name="FirstBalanceDecrease">
+		L$[AMOUNT] を支払いました。
+あなたの L$ 残高は画面右上に表示されています。
+	</notification>
+	<notification name="FirstSit">
+		着席中です。
+周囲を見るには矢印キーか AWSD キーを使ってください。
+立つときには「立ち上がる」ボタンをクリックしてください。
+	</notification>
+	<notification name="FirstMap">
+		地図をクリック・ドラッグして周囲を見てください。
+ダブルクリックするとテレポートします。
+右側のコントロールで場所を探したり背景を変更してください。
+	</notification>
+	<notification name="FirstBuild">
+		制作ツールを開きました。 見るものすべてがこのツールで作成されたものです。
+	</notification>
+	<notification name="FirstTeleport">
+		このリージョンでは特定のエリアにのみテレポートできます。 矢印が目的地を指しています。 矢印をクリックすると消えます。
+	</notification>
+	<notification name="FirstOverrideKeys">
+		あなたの移動キーをオブジェクトが操作しています。
+矢印かAWSDのキーで動作を確認してください。
+銃などのオブジェクトだと、一人称視点(マウスルック)に変更する必要があります。
+Mキーを押して変更します。
+	</notification>
+	<notification name="FirstAppearance">
+		容姿を編集中です。
+周囲を見るには矢印キーを使ってください。
+終わったら「すべて保存」を押してください。
+	</notification>
+	<notification name="FirstInventory">
+		これはあなたの持ち物です。所有しているアイテムが入っています。
+
+* アイテムを自分にドラッグして装着してください。
+* アイテムを地面にドラッグして Rez してください。
+* ノートカードをダブルクリックして開いてください。
+	</notification>
+	<notification name="FirstSandbox">
+		ここはサンドボックスエリアです。住人が制作を学ぶことができます。
+
+ここで制作されたものは時間が経つと削除されます。制作したアイテムを右クリックして「取る」を選び、持ち物に入れてお持ち帰りするのをお忘れなく。
+	</notification>
+	<notification name="FirstFlexible">
+		このオブジェクトはフレキシブルです。 フレキシブルオブジェクトは、「物理」ではなく「ファントム」でなければなりません。
+	</notification>
+	<notification name="FirstDebugMenus">
+		アドバンスメニューを開きました。
+
+このメニューの有効・無効設定:
+  Windows: Ctrl+Alt+D
+  Mac: ⌘-Opt+D
+	</notification>
+	<notification name="FirstSculptedPrim">
+		スカルプトプリムを編集中です。 スカルプトプリムには形状の輪郭を指定するための特別なテクスチャが必要です。
+	</notification>
+	<notification name="MaxListSelectMessage">
+		このリストから[MAX_SELECT]個までのアイテムを選択できます。
+	</notification>
+	<notification name="VoiceInviteP2P">
+		[NAME]が、あなたをボイスチャットコールに招待しています。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="AutoUnmuteByIM">
+		[FIRST] [LAST]に
+インスタント・メッセージが送信され、無視設定は自動的に解除されました。
+	</notification>
+	<notification name="AutoUnmuteByMoney">
+		[FIRST] [LAST]にお金を渡したため、 無視設定が自動的に解除されました。
+	</notification>
+	<notification name="AutoUnmuteByInventory">
+		[FIRST] [LAST]に持ち物を渡したため、 無視設定が自動的に解除されました。
+	</notification>
+	<notification name="VoiceInviteGroup">
+		[NAME]が、 グループ[GROUP]とのボイスチャットコールに参加しました。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このコールをしている人をミュートにする場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="VoiceInviteAdHoc">
+		[NAME]が、 会議チャットでボイスチャットコールに参加しました。
+コールに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。 このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="InviteAdHoc">
+		[NAME]が、 あなたを会議チャットに招待しています。
+チャットに参加するには「受け入れる」をクリックし、招待を断るときは「拒否」をクリックしてください。このユーザーをミュート(消声)する場合は「ミュート」をクリックしてください。
+		<form name="form">
+			<button name="Accept" text="受け入れる"/>
+			<button name="Decline" text="拒否"/>
+			<button name="Mute" text="ミュート"/>
+		</form>
+	</notification>
+	<notification name="VoiceChannelFull">
+		あなたが参加しようとしているボイスコール[VOICE_CHANNEL_NAME]は、参加者が最大限に達しました。後でもう一度お試しください。
+	</notification>
+	<notification name="ProximalVoiceChannelFull">
+		このエリアのボイスチャットは、混雑のため容量を超えてしまっています。申し訳ありませんが、他のエリアでボイスチャットをお試しください。
+	</notification>
+	<notification name="VoiceChannelDisconnected">
+		[VOICE_CHANNEL_NAME]への接続が切断されました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceChannelDisconnectedP2P">
+		[VOICE_CHANNEL_NAME]は、コールを終了しました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="P2PCallDeclined">
+		[VOICE_CHANNEL_NAME]は、あなたのコールを拒否しました。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="P2PCallNoAnswer">
+		[VOICE_CHANNEL_NAME]は、あなたのコールを受け取れません。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceChannelJoinFailed">
+		[VOICE_CHANNEL_NAME]への接続に失敗しました。時間をおいて、再度、試みてください。空間ボイスチャットに再接続されます。
+	</notification>
+	<notification name="VoiceLoginRetry">
+		あなた用のボイスチャンネルを作成しています。1分ほどかかります。
+	</notification>
+	<notification name="Cannot enter parcel: not a group member">
+		特定のグループメンバーのみこのエリアを訪問することができます。
+	</notification>
+	<notification name="Cannot enter parcel: banned">
+		立入禁止されているため、区画に入ることができません。
+	</notification>
+	<notification name="Cannot enter parcel: not on access list">
+		アクセス・リストに含まれていないため、区画に入ることができません。
+	</notification>
+	<notification name="VoiceNotAllowed">
+		あなたには[VOICE_CHANNEL_NAME]のボイス・チャットに接続する権限がありません。
+	</notification>
+	<notification name="VoiceCallGenericError">
+		[VOICE_CHANNEL_NAME]のボイス・チャットに接続中に、エラーが発生しました。後でもう一度お試しください。
+	</notification>
+	<notification name="ServerVersionChanged">
+		異なるサーバーバージョンのリージョンに来ました。パフォーマンスに影響があるかもしれません。 クリックしてリリースノートを確認してみてください。
+	</notification>
+	<notification name="UnsupportedCommandSLURL">
+		クリックした SLurl はサポートされていません。
+	</notification>
+	<notification name="IMToast">
+		<form name="form">
+			<button name="respondbutton" text="返答"/>
+		</form>
+	</notification>
+	<notification name="AttachmentSaved">
+		付属物(アタッチメント)が保存されました。
+	</notification>
+	<notification name="UnableToFindHelpTopic">
+		ヘルプトピックが見つかりませんでした。
+	</notification>
+	<global name="UnsupportedCPU">
+		- あなたの CPU の速度は必須動作環境の条件を満たしていません。
+	</global>
+	<global name="UnsupportedGLRequirements">
+		[APP_NAME] に必要なハードウェアがないようです。 [APP_NAME] にはマルチテクスチャをサポートする OpenGL グラフィックカードが必要です。 お使いのグラフィックカードの最新ドライバがインストールされているかどうか、オペレーティングシステムのサービスパックとパッチが入っているかをご確認ください。
+
+この問題が何度も起きる場合は、[SUPPORT_SITE] へご連絡ください。
+	</global>
+	<global name="UnsupportedCPUAmount">
+		796
+	</global>
+	<global name="UnsupportedRAMAmount">
+		510
+	</global>
+	<global name="UnsupportedGPU">
+		- あなたのグラフィック・カードは必須動作環境の条件を満たしていません。
+	</global>
+	<global name="UnsupportedRAM">
+		- あなたのシステム・メモリは必須動作環境の条件を満たしていません。
+	</global>
+	<global name="PermYes">
+		はい
+	</global>
+	<global name="PermNo">
+		いいえ
+	</global>
+	<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
+		自分の土地をお持ちの場合、ホームロケーションに設定できます。 
+お持ちでない場合は、地図で「インフォハブ」を探してください。
+	</global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
index ca4ab3e773f09869bfb79424b2272b227009991c..75bf6ac7b677a38fb2b842ed333bde123e02d1d7 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
@@ -1,45 +1,38 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="住人" />
-   <string name="AcctTypeTrial"
-    value="トライアル" />
-   <string name="AcctTypeCharterMember"
-    value="特権メンバー" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab従業員" />
-   <string name="PaymentInfoUsed"
-    value="支払い情報登録済" />
-   <string name="PaymentInfoOnFile"
-    value="支払い情報登録済み" />
-   <string name="NoPaymentInfoOnFile"
-    value="支払い情報未登録" />
-   <string name="AgeVerified"
-    value="年齢確認済み" />
-   <string name="NotAgeVerified"
-    value="年齢未確認" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=ja
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="パートナー:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	取り込み中応答メッセージ:
-      </text>
-    </panel>
-    </panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Profile Edit" name="edit_profile_panel">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="AcctTypeResident" value="住人"/>
+	<string name="AcctTypeTrial" value="トライアル"/>
+	<string name="AcctTypeCharterMember" value="特権メンバー"/>
+	<string name="AcctTypeEmployee" value="Linden Lab従業員"/>
+	<string name="PaymentInfoUsed" value="支払い情報登録済"/>
+	<string name="PaymentInfoOnFile" value="支払い情報登録済み"/>
+	<string name="NoPaymentInfoOnFile" value="支払い情報未登録"/>
+	<string name="AgeVerified" value="年齢確認済み"/>
+	<string name="NotAgeVerified" value="年齢未確認"/>
+	<string name="partner_edit_link_url">
+		http://www.secondlife.com/account/partners.php?lang=ja
+	</string>
+	<string name="no_partner_text" value="なし"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="data_panel">
+				<panel name="lifes_images_panel">
+					<icon label="" name="2nd_life_edit_icon" tool_tip="クリックして画像を選択"/>
+				</panel>
+				<icon label="" name="real_world_edit_icon" tool_tip="クリックして画像を選択"/>
+				<text name="title_homepage_text">
+					Web サイト:
+				</text>
+				<check_box label="検索結果に表示" name="show_in_search_checkbox"/>
+				<text name="title_acc_status_text" value="アカウントの状態:"/>
+			</panel>
+		</panel>
+	</scroll_container>
+	<panel name="profile_me_buttons_panel">
+		<button label="変更を保存" name="save_btn"/>
+		<button label="キャンセル" name="cancel_btn"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
index 14009f29722726ea4154f143bcfdc284fb71b4ce..586eb4e6cca9605da5276ec45cb6737de0929288 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
@@ -1,30 +1,30 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="メンバーを招待" name="invite_panel">
-	<text name="help_text" font="SansSerifSmall" height="72" bottom_delta="-96">
-		あなたのグループに一度に複数の
-住人を招待することができます。
-「リストから住人を選択」
-をクリックしてください。
-	</text>
-	<button bottom_delta="-10" label="リストから住人を選択" name="add_button" tool_tip=""/>
-	<name_list name="invitee_list" height="156" bottom_delta="-160"
-	     tool_tip="複数の住人を選択するには、Ctrlキーを押しながら住人名をクリックします。" />
-	<button label="リストから選択したものを削除" name="remove_button"
-	     tool_tip="上で選択した居住者を招待リストから削除します。" />
-	<text>
-		割り当て先の役割を選択:
-	</text>
-	<text name="role_text">
-		割り当て先の役割を選択:
-	</text>
-	<combo_box name="role_name"
-	     tool_tip="メンバーに割り当て可能な役割をリストから選択。" />
-	<button label="招待を送信" name="ok_button" />
-	<button label="取り消し" name="cancel_button" />
-	<string name="confirm_invite_owner_str">
-		本当に新しい所有者を招待しますか?この操作は取り消しできません。
-	</string>
-	<text name="loading">
-		(ローディング...)
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンバーを招待" name="invite_panel">
+	<panel.string name="confirm_invite_owner_str">
+		本当に新しい所有者を招待しますか?この操作は取り消しできません。
+	</panel.string>
+	<panel.string name="loading">
+		(ローディング...)
+	</panel.string>
+	<panel.string name="already_in_group">
+		何人かのアバターは既にグループに入っているため招待されませんでした。
+	</panel.string>
+	<text bottom_delta="-96" font="SansSerifSmall" height="72" name="help_text">
+		あなたのグループに一度に複数の
+住人を招待することができます。
+「リストから住人を選択」
+をクリックしてください。
+	</text>
+	<button bottom_delta="-10" label="リストから住人を選択" name="add_button" tool_tip=""/>
+	<name_list bottom_delta="-160" height="156" name="invitee_list" tool_tip="複数の住人を選択するには、Ctrlキーを押しながら住人名をクリックします。"/>
+	<button label="リストから選択したものを削除" name="remove_button" tool_tip="上で選択した居住者を招待リストから削除します。"/>
+	<text name="role_text">
+		割り当て先の役割を選択:
+	</text>
+	<combo_box name="role_name" tool_tip="メンバーに割り当て可能な役割をリストから選択。"/>
+	<button label="招待を送信" name="ok_button"/>
+	<button label="取り消し" name="cancel_button"/>
+	<string name="GroupInvitation">
+		グループへの招待
+	</string>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
index 595d315cf9c382cfa2040ea500ed24455d3aa2d6..66662ec87a4eaa16e125817bf39ae32934121001 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
@@ -1,85 +1,85 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="土地とL$" name="land_money_tab">
-	<string name="help_text">
-		グループ所有地一覧は、寄付に関する詳細と一緒に表示されています。 「土地利用の合計」が「寄付総額」以下、または同じになるまで警告が表示されます。 「計画」、「詳細」、「販売」タブにはグループの資金に関する情報が掲載されています。
-	</string>
-	<button label="?" name="help_button"/>
-	<string name="cant_view_group_land_text">
-		あなたはグループ所有の土地表示を許されていません。
-	</string>
-	<string name="cant_view_group_accounting_text">
-		あなたはグループの会計情報の表示を許されていません。
-	</string>
-	<string name="loading_txt">
-		ロード中...
-	</string>
-	<text name="group_land_heading">
-		グループの保有地
-	</text>
-	<scroll_list name="group_parcel_list">
-		<column label="区画名" name="name"/>
-		<column label="地域(リージョン)" name="location"/>
-		<column label="種類" name="type"/>
-		<column label="面積" name="area"/>
-		<column label="" name="hidden"/>
-	</scroll_list>
-	<button label="地図上に表示" label_selected="地図上に表示" name="map_button"/>
-	<text name="total_contributed_land_label">
-		寄付総額:
-	</text>
-	<text name="total_contributed_land_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="total_land_in_use_label">
-		土地利用の合計:
-	</text>
-	<text name="total_land_in_use_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="land_available_label">
-		利用可の土地:
-	</text>
-	<text name="land_available_value" width="150">
-		[AREA]平方メートル
-	</text>
-	<text name="your_contribution_label">
-		あなたの貢献:
-	</text>
-	<string name="land_contrib_error">
-		土地の出資設定を行うことができませんでした。
-	</string>
-	<text name="your_contribution_units">
-		(平方メートル)
-	</text>
-	<text name="your_contribution_max_value">
-		([AMOUNT]最大)
-	</text>
-	<text name="group_over_limit_text">
-		使用中の土地をサポートするには、グループ・メンバーがさらに多
-くの土地クレジットを提供する必要があります。
-	</text>
-	<text name="group_money_heading">
-		グループL$
-	</text>
-	<tab_container name="group_money_tab_container">
-		<panel label="計画" name="group_money_planning_tab">
-			<text_editor name="group_money_planning_text">
-				計算中...
-			</text_editor>
-		</panel>
-		<panel label="詳細" name="group_money_details_tab">
-			<text_editor name="group_money_details_text">
-				計算中…
-			</text_editor>
-			<button label="前の週" label_selected="前の週" name="earlier_details_button" tool_tip="前の週の履歴"/>
-			<button label="次の週" label_selected="次の週" name="later_details_button" tool_tip="次の週の履歴"/>
-		</panel>
-		<panel label="販売" name="group_money_sales_tab">
-			<text_editor name="group_money_sales_text">
-				計算中…
-			</text_editor>
-			<button label="前の週" label_selected="前の週" name="earlier_sales_button" tool_tip="前の週の履歴"/>
-			<button label="次の週" label_selected="次の週" name="later_sales_button" tool_tip="次の週の履歴"/>
-		</panel>
-	</tab_container>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="土地とL$" name="land_money_tab">
+	<string name="help_text">
+		グループ所有地一覧は、寄付に関する詳細と一緒に表示されています。 「土地利用の合計」が「寄付総額」以下、または同じになるまで警告が表示されます。 「計画」、「詳細」、「販売」タブにはグループの資金に関する情報が掲載されています。
+	</string>
+	<button label="?" name="help_button"/>
+	<string name="cant_view_group_land_text">
+		あなたはグループ所有の土地表示を許されていません。
+	</string>
+	<string name="cant_view_group_accounting_text">
+		あなたはグループの会計情報の表示を許されていません。
+	</string>
+	<string name="loading_txt">
+		ロード中...
+	</string>
+	<text name="group_land_heading">
+		グループの保有地
+	</text>
+	<scroll_list name="group_parcel_list">
+		<column label="区画" name="name"/>
+		<column label="地域(リージョン)" name="location"/>
+		<column label="種類" name="type"/>
+		<column label="面積" name="area"/>
+		<column label="" name="hidden"/>
+	</scroll_list>
+	<button label="地図" label_selected="地図" name="map_button"/>
+	<text name="total_contributed_land_label">
+		寄付総額:
+	</text>
+	<text name="total_contributed_land_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="total_land_in_use_label">
+		土地利用の合計:
+	</text>
+	<text name="total_land_in_use_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="land_available_label">
+		利用可の土地:
+	</text>
+	<text name="land_available_value" width="150">
+		[AREA]平方メートル
+	</text>
+	<text name="your_contribution_label">
+		あなたの貢献:
+	</text>
+	<string name="land_contrib_error">
+		土地の出資設定を行うことができませんでした。
+	</string>
+	<text name="your_contribution_units">
+		(平方メートル)
+	</text>
+	<text name="your_contribution_max_value">
+		([AMOUNT]最大)
+	</text>
+	<text name="group_over_limit_text">
+		使用中の土地をサポートするには、グループ・メンバーがさらに多
+くの土地クレジットを提供する必要があります。
+	</text>
+	<text name="group_money_heading">
+		グループL$
+	</text>
+	<tab_container name="group_money_tab_container">
+		<panel label="計画" name="group_money_planning_tab">
+			<text_editor name="group_money_planning_text">
+				計算中...
+			</text_editor>
+		</panel>
+		<panel label="詳細" name="group_money_details_tab">
+			<text_editor name="group_money_details_text">
+				計算中…
+			</text_editor>
+			<button label="前の週" label_selected="前の週" name="earlier_details_button" tool_tip="前の週の履歴"/>
+			<button label="次の週" label_selected="次の週" name="later_details_button" tool_tip="次の週の履歴"/>
+		</panel>
+		<panel label="販売" name="group_money_sales_tab">
+			<text_editor name="group_money_sales_text">
+				計算中…
+			</text_editor>
+			<button label="前の週" label_selected="前の週" name="earlier_sales_button" tool_tip="前の週の履歴"/>
+			<button label="次の週" label_selected="次の週" name="later_sales_button" tool_tip="次の週の履歴"/>
+		</panel>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..02ada7e6e58f15789cbc9e23866408fd4e7e807e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="group_list_item">
+	<text name="group_name" value="不明"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
index afca4c4dfd200768cd1fc24d20ce830f84be2bf0..382fd02d5fdd074dfb1af85d08723aab09712a5d 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
@@ -1,66 +1,66 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="通知" name="notices_tab">
-	<string name="help_text">
-		通知機能を使うと、グループ内ですばやく情報を伝達できます。
-複数のあて先にメッセージを送信できるほか、
-必要に応じてアイテムをメッセージに添付することもできます。 
-通知は、受信アビリティがある役割のグループ・メンバーにのみ配信されます。
-通知をオフにするには、一般タブを使います。
-	</string>
-	<string name="no_notices_text">
-		過去の通知はありません。
-	</string>
-	<button label="?" label_selected="?" name="help_button"/>
-	<text name="lbl">
-		グループ通知アーカイブ
-	</text>
-	<text name="lbl2">
-		通知は14日間保存されます。ただし、各グループの通知リストは1日あたり200通に制限されます。
-	</text>
-	<scroll_list name="notice_list">
-		<column label="" name="icon"/>
-		<column label="件名" name="subject"/>
-		<column label="送り主" name="from"/>
-		<column label="日付" name="date"/>
-	</scroll_list>
-	<text name="notice_list_none_found">
-		何も見つかりませんでした。
-	</text>
-	<button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice"/>
-	<button label="更新" label_selected="リスト更新" name="refresh_notices"/>
-	<panel label="新しい通知を作成" name="panel_create_new_notice">
-		<text name="lbl">
-			通知を作成
-		</text>
-		<text name="lbl2">
-			持ち物のアイテムを1つこのパネルにドラッグして、通知に添付することができます。 添付できるのはコピー、譲渡が可能なアイテムで、フォルダを送ることはできません。
-		</text>
-		<text name="lbl3">
-			件名:
-		</text>
-		<text name="lbl4">
-			メッセージ:
-		</text>
-		<text name="lbl5">
-			添付:
-		</text>
-		<button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/>
-		<button label="通知を送信" label_selected="通知を送信" name="send_notice"/>
-		<panel name="drop_target" tool_tip="持ち物からアイテムをメッセージ欄にドラッグしてください。通知と一緒に送信されます。送信するにはコピー、譲渡が可能なオブジェクトである必要があります。"/>
-	</panel>
-	<panel label="過去の通知を表示" name="panel_view_past_notice">
-		<text name="lbl">
-			アーカイブ通知
-		</text>
-		<text name="lbl2">
-			新しい通知の送信は、上の[新しい通知を作成する]をクリックしてください。
-		</text>
-		<text name="lbl3">
-			件名:
-		</text>
-		<text name="lbl4">
-			メッセージ:
-		</text>
-		<button label="添付物を開く" label_selected="添付物を開く" name="open_attachment"/>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="通知" name="notices_tab">
+	<string name="help_text">
+		通知機能を使うと、グループ内ですばやく情報を伝達できます。
+複数のあて先にメッセージを送信できるほか、
+必要に応じてアイテムをメッセージに添付することもできます。 
+通知は、受信アビリティがある役割のグループ・メンバーにのみ配信されます。
+通知をオフにするには、一般タブを使います。
+	</string>
+	<string name="no_notices_text">
+		過去の通知はありません。
+	</string>
+	<button label="?" label_selected="?" name="help_button"/>
+	<text name="lbl">
+		グループ通知アーカイブ
+	</text>
+	<text name="lbl2">
+		通知は 14 日間保存されます。 通知リストは 1 つのグループにつき、1 日最大 200件 に制限されます。
+	</text>
+	<scroll_list name="notice_list">
+		<column label="" name="icon"/>
+		<column label="件名" name="subject"/>
+		<column label="送り主" name="from"/>
+		<column label="日付" name="date"/>
+	</scroll_list>
+	<text name="notice_list_none_found">
+		何も見つかりませんでした。
+	</text>
+	<button label="新しい通知" label_selected="新しい通知を作成" name="create_new_notice"/>
+	<button label="更新" label_selected="リスト更新" name="refresh_notices"/>
+	<panel label="新しい通知を作成" name="panel_create_new_notice">
+		<text name="lbl">
+			通知を作成
+		</text>
+		<text name="lbl2">
+			持ち物からこのパネルにアイテムを 1 つドラッグして添付できます。 添付するアイテムはコピーと再販・プレゼントが可能でなければなりません。また、フォルダは送れません。
+		</text>
+		<text name="lbl3">
+			件名:
+		</text>
+		<text name="lbl4">
+			メッセージ:
+		</text>
+		<text name="lbl5">
+			添付:
+		</text>
+		<button label="添付物を削除" label_selected="添付物を削除" name="remove_attachment"/>
+		<button label="送信" label_selected="通知を送信" name="send_notice"/>
+		<panel name="drop_target" tool_tip="持ち物からアイテムをメッセージ欄にドラッグしてください。通知と一緒に送信されます。送信するにはコピー、譲渡が可能なオブジェクトである必要があります。"/>
+	</panel>
+	<panel label="過去の通知を表示" name="panel_view_past_notice">
+		<text name="lbl">
+			アーカイブ通知
+		</text>
+		<text name="lbl2">
+			新しい通知の送信は、上の[新しい通知を作成する]をクリックしてください。
+		</text>
+		<text name="lbl3">
+			件名:
+		</text>
+		<text name="lbl4">
+			メッセージ:
+		</text>
+		<button label="添付物を開く" label_selected="添付物を開く" name="open_attachment"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
index 2d39938b5306912d70bbfd4359cf2c0c4bc8588c..c7e62635e46c5a5ff5cea3a8b08597eec6d5c456 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
@@ -1,157 +1,118 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="メンバーと役割" name="roles_tab">
-	<string name="default_needs_apply_text">
-		現在のサブタブに、未適用の変更があります。
-	</string>
-	<string name="want_apply_text">
-		これらの変更を適用しますか?
-	</string>
-	<button label="?" name="help_button"/>
-	<panel name="members_header">
-		<text name="static">
-			メンバーと役割
-		</text>
-		<text name="static2">
-			グループ・メンバーには、役割と能力が割り当てられます。 この設定は、
-組織の規模に応じて柔軟かつ容易にカスタマイズできます。
-		</text>
-	</panel>
-	<panel name="roles_header">
-		<text name="static">
-			役割
-		</text>
-		<text name="role_properties_modifiable">
-			下にある役割を選択してください。  役割の名前、説明、メンバー・タイトルを修正することができます。
-		</text>
-		<text name="role_properties_not_modifiable">
-			役割名を選択すると、説明、メンバー、能力を確認することができます。
-		</text>
-		<text name="role_actions_modifiable">
-			あなたは役割に能力を割り当てることもできます。
-		</text>
-		<text name="role_actions_not_modifiable">
-			能力の表示はできますが、修正や割り当てなどはできません。
-		</text>
-	</panel>
-	<panel name="actions_header">
-		<text name="static">
-			能力
-		</text>
-		<text name="static2">
-			能力の説明、どの役割とメンバーがその能力を実行できるかを
-表示できます。
-		</text>
-	</panel>
-	<tab_container name="roles_tab_container">
-		<panel label="メンバー" name="members_sub_tab" tool_tip="メンバー">
-			<button label="検索" name="search_button"/>
-			<button label="全てを表示" name="show_all_button"/>
-			<name_list name="member_list">
-				<column label="メンバー名" name="name"/>
-				<column label="寄付されたTier" name="donated"/>
-				<column label="最終ログイン" name="online"/>
-			</name_list>
-			<button label="新しいメンバーを招待" name="member_invite"/>
-			<button label="グループから追放" name="member_eject"/>
-			<string name="help_text">
-				あなたはメンバーに割り当てられた役割を付加、削除できます。
-Ctrl キーを押しながらメンバー名をクリックすると
-複数の人を選択できます。
-			</string>
-		</panel>
-		<panel label="役割" name="roles_sub_tab">
-			<button label="検索" name="search_button"/>
-			<button label="すべてを表示" name="show_all_button"/>
-			<scroll_list name="role_list">
-				<column label="役割名" name="name"/>
-				<column label="肩書き" name="title"/>
-				<column label="メンバー" name="members"/>
-			</scroll_list>
-			<button label="新しい役割を作成..." name="role_create"/>
-			<button label="役割を削除" name="role_delete"/>
-			<string name="help_text">
-				役割にはタイトルがあり、メンバーが行使可能な
-能力のリストが定義されます。 メンバーは、
-1つまたは複数の役割に属することができます。 1つのグループに対し、
-「全員」と「オーナー」の役割を含めて最高で10の役割を持たせることができます。
-			</string>
-			<string name="cant_delete_role">
-				「全員」と「オーナー」は特別な役割なので、削除できません。
-			</string>
-		</panel>
-		<panel label="能力" name="actions_sub_tab">
-			<button label="検索" name="search_button"/>
-			<button label="すべてを表示" name="show_all_button"/>
-			<scroll_list name="action_list" tool_tip="能力を選択して詳細を表示します。">
-				<column label="" name="icon"/>
-				<column label="" name="action"/>
-			</scroll_list>
-			<string name="help_text">
-				このグループ内で役割を与えられているメンバーが実行できる操作は、
-能力によって決まります。 さまざまな能力が用意されています。
-			</string>
-		</panel>
-	</tab_container>
-	<panel name="members_footer">
-		<text name="static">
-			割当られた役割
-		</text>
-		<text name="static2">
-			許可された能力
-		</text>
-		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox"/>
-			<column label="" name="role"/>
-		</scroll_list>
-		<scroll_list name="member_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
-			<column label="" name="icon"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="roles_footer">
-		<text name="static">
-			名前
-		</text>
-		<text name="static2">
-			説明
-		</text>
-		<line_editor name="role_name">
-			従業員
-		</line_editor>
-		<text name="static3">
-			肩書き
-		</text>
-		<line_editor name="role_title">
-			(待機中)
-		</line_editor>
-		<text_editor name="role_description">
-			(待機中)
-		</text_editor>
-		<text name="static4">
-			割当られたメンバー
-		</text>
-		<text name="static5" tool_tip="現在選択されている役割で実行できる能力のリスト">
-			許可された能力
-		</text>
-		<check_box label="メンバーが公開状態" name="role_visible_in_list" tool_tip="この役割のメンバーをグループ外の人の一般タブに表示するかどうかを設定します。"/>
-		<scroll_list name="role_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
-			<column label="" name="icon"/>
-			<column label="" name="checkbox"/>
-			<column label="" name="action"/>
-		</scroll_list>
-	</panel>
-	<panel name="actions_footer">
-		<text name="static">
-			説明
-		</text>
-		<text_editor name="action_description">
-			これは「グループからメンバーを追放する」能力です。 オーナーを追放できるのは、別のオーナーだけです。
-		</text_editor>
-		<text name="static2">
-			役割と能力
-		</text>
-		<text name="static3">
-			能力のあるメンバー
-		</text>
-	</panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="メンバーと役割" name="roles_tab">
+	<panel.string name="default_needs_apply_text">
+		現在のサブタブに、未適用の変更があります。
+	</panel.string>
+	<panel.string name="want_apply_text">
+		これらの変更を適用しますか?
+	</panel.string>
+	<tab_container name="roles_tab_container">
+		<panel label="メンバー" name="members_sub_tab" tool_tip="メンバー">
+			<panel.string name="help_text">
+				あなたはメンバーに割り当てられた役割を付加、削除できます。
+Ctrl キーを押しながらメンバー名をクリックすると
+複数の人を選択できます。
+			</panel.string>
+			<filter_editor label="メンバーを選別" name="filter_input"/>
+			<name_list name="member_list">
+				<name_list.columns label="メンバー" name="name"/>
+				<name_list.columns label="寄付" name="donated"/>
+				<name_list.columns label="オンライン" name="online"/>
+			</name_list>
+			<button label="招待" name="member_invite"/>
+			<button label="追放" name="member_eject"/>
+		</panel>
+		<panel label="役割" name="roles_sub_tab">
+			<panel.string name="help_text">
+				役割にはタイトルがあり、メンバーが行使可能な
+能力のリストが定義されます。 メンバーは、
+1つまたは複数の役割に属することができます。 1つのグループに対し、
+「全員」と「オーナー」の役割を含めて最高で10の役割を持たせることができます。
+			</panel.string>
+			<panel.string name="cant_delete_role">
+				「全員」と「オーナー」は特別な役割なので、削除できません。
+			</panel.string>
+			<filter_editor label="役割を選別" name="filter_input"/>
+			<scroll_list name="role_list">
+				<scroll_list.columns label="役割" name="name"/>
+				<scroll_list.columns label="肩書き" name="title"/>
+				<scroll_list.columns label="メンバー" name="members"/>
+			</scroll_list>
+			<button label="役割を追加" name="role_create"/>
+			<button label="役割を削除" name="role_delete"/>
+		</panel>
+		<panel label="能力" name="actions_sub_tab" tool_tip="能力の説明文には、どの役割・メンバーがその能力を持つかが書かれています。">
+			<panel.string name="help_text">
+				このグループ内で役割を与えられているメンバーが実行できる操作は、
+能力によって決まります。 さまざまな能力が用意されています。
+			</panel.string>
+			<filter_editor label="能力を選別" name="filter_input"/>
+			<scroll_list name="action_list" tool_tip="能力を選択して詳細を表示します。">
+				<scroll_list.columns label="" name="icon"/>
+				<scroll_list.columns label="" name="action"/>
+			</scroll_list>
+		</panel>
+	</tab_container>
+	<panel name="members_footer">
+		<text name="static">
+			割当られた役割
+		</text>
+		<scroll_list name="member_assigned_roles">
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="role"/>
+		</scroll_list>
+		<text name="static2">
+			許可された能力
+		</text>
+		<scroll_list name="member_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="roles_footer">
+		<text name="static">
+			名前
+		</text>
+		<line_editor name="role_name">
+			従業員
+		</line_editor>
+		<text name="static3">
+			肩書き
+		</text>
+		<line_editor name="role_title">
+			(待機中)
+		</line_editor>
+		<text name="static2">
+			説明
+		</text>
+		<text_editor name="role_description">
+			(待機中)
+		</text_editor>
+		<text name="static4">
+			割当られたメンバー
+		</text>
+		<check_box label="メンバーが公開状態" name="role_visible_in_list" tool_tip="この役割のメンバーをグループ外の人の一般タブに表示するかどうかを設定します。"/>
+		<text name="static5" tool_tip="現在選択されている役割で実行できる能力のリスト">
+			許可された能力
+		</text>
+		<scroll_list name="role_allowed_actions" tool_tip="許可された能力の詳細は「能力」タブをご覧ください。">
+			<scroll_list.columns label="" name="icon"/>
+			<scroll_list.columns label="" name="checkbox"/>
+			<scroll_list.columns label="" name="action"/>
+		</scroll_list>
+	</panel>
+	<panel name="actions_footer">
+		<text name="static">
+			説明
+		</text>
+		<text_editor name="action_description">
+			これは「グループからメンバーを追放する」能力です。 オーナーを追放できるのは、別のオーナーだけです。
+		</text_editor>
+		<text name="static2">
+			役割と能力
+		</text>
+		<text name="static3">
+			能力のあるメンバー
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4182ca506fb494a773fcc13106f24ad1a3627ae4
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<button label="プロフィールの表示" name="view_profile_btn"/>
+	<button label="フレンドを追加" name="add_friend_btn"/>
+	<button label="共有" name="share_btn"/>
+	<panel name="panel_call_buttons">
+		<button label="コール" name="call_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index 0f270beb2c5e38813f3de92335758d7210cff92d..d55a78297c8a48e4885e5d52db498766f9724332 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -1,45 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="panel_login">
-	<text name="first_name_text" left="20">
-		ファーストネーム:
-	</text>
-	<line_editor left="20" name="first_name_edit" width="126" />
-	<text name="last_name_text" left="158">
-		ラストネーム:
-	</text>
-	<line_editor left="158" name="last_name_edit" width="126" />
-	<text name="password_text">
-		パスワード:
-	</text>
-	<text name="start_location_text" left="20" >
-		ログイン位置:
-	</text>
-	<combo_box name="start_location_combo" left_delta="92" width="172">
-		<combo_box.item name="MyHome" label="自宅(ホーム)" />
-		<combo_box.item name="MyLastLocation" label="最後にログアウトした場所" />
-		<combo_box.item name="Typeregionname" label="&lt; 地域の名前入力 &gt;" />
-	</combo_box>
-	<check_box label="パスワードを記憶" name="remember_check" left_delta="180"/>
-	<text name="full_screen_text">
-		ログイン時にはフルスクリーン表示になります
-	</text>
-	<button label="新規アカウント..." label_selected="新規アカウント..." name="new_account_btn"/>
-	<button label="環境設定..." label_selected="環境設定..." name="preferences_btn"/>
-	<button label="ログイン" label_selected="ログイン" name="connect_btn"/>
-	<button label="終了" label_selected="終了" name="quit_btn"/>
-	<text name="version_text">
-		1.23.4 (5)
-	</text>
-	<text name="create_new_account_text">
-		アカウントを申し込む
-	</text>
-	<text name="channel_text">
-		[VERSION]
-	</text>
-	<text name="forgot_password_text" left="-230" width="220">
-		名前またはパスワードをお忘れですか?
-	</text>
-	<text name="forgot_password_url">
-		http://secondlife.com/account/request.php
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://jp.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php
+	</panel.string>
+	<panel name="login_widgets">
+		<line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] ファーストネーム"/>
+		<line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] ラストネーム"/>
+		<text name="start_location_text">
+			開始位置:
+		</text>
+		<text name="create_new_account_text">
+			新規アカウントを作成
+		</text>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..159a63cd408781bd4335510050e0fdd561096b4b
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="chat_bar">
+	<line_editor label="ここをクリックしてチャットを開始します。" name="chat_box" tool_tip="エンターを押して発言、Ctrl+エンターで叫ぶ。"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..711a4cf47a3cd909e58eebb0b80cc5497fd0d10f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_pick_info">
+	<text name="title" value="ピックの情報"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<text name="pick_name" value="[name]"/>
+			<text name="pick_location" value="[loading...]"/>
+			<text name="pick_desc" value="[description]"/>
+		</panel>
+	</scroll_container>
+	<panel name="buttons">
+		<button label="テレポート" name="teleport_btn"/>
+		<button label="地図" name="show_on_map_btn"/>
+		<button label="編集" name="edit_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6a391957e99f43b694d3fa83b782b03fd9d35d27
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_picks.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="ピック" name="panel_picks">
+	<panel label="bottom_panel" name="edit_panel">
+		<button name="new_btn" tool_tip="現在地を新規ピックに追加"/>
+	</panel>
+	<panel name="buttons_cucks">
+		<button label="地図" name="show_on_map_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index 3bf303eaa302ae8021cfd7803ddb79653906492f..88e10aa832ed2058d52c6e82f084bf4a4e2e40ce 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -1,57 +1,42 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="チャット" name="chat">
-	<text name="text_box">
-		チャットのフォント:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item name="radio" label="小" />
-		<radio_item name="radio2" label="中" />
-		<radio_item name="radio3" label="大" />
-	</radio_group>
-	<color_swatch label="自分" name="user"/>
-	<text name="text_box1">
-		自分
-	</text>
-	<color_swatch label="その他" name="agent"/>
-	<text name="text_box2">
-		その他
-	</text>
-	<color_swatch label="IM" name="im"/>
-	<text name="text_box3">
-		IM
-	</text>
-	<color_swatch label="システム" name="system"/>
-	<text name="text_box4">
-		システム
-	</text>
-	<color_swatch label="エラー" name="script_error"/>
-	<text name="text_box5">
-		エラー
-	</text>
-	<color_swatch label="オブジェクト" name="objects"/>
-	<text name="text_box6">
-		オブジェクト
-	</text>
-	<color_swatch label="所有者" name="owner"/>
-	<text name="text_box7">
-		所有者
-	</text>
-	<color_swatch label="吹出し" name="background"/>
-	<text name="text_box8">
-		吹出し
-	</text>
-	<color_swatch label="URL" name="links"/>
-	<text name="text_box9">
-		URL
-	</text>
-	<spinner label="フェード" name="fade_chat_time"/>
-	<slider label="不透明度" name="console_opacity"/>
-	<check_box label="全画面幅を使用 (再起動が必要)" name="chat_full_width_check"/>
-	<check_box label="Enterキーを押した後チャット バーを閉じる" name="close_chat_on_return_check"/>
-	<check_box label="チャット中は、いつでも矢印キーでアバターを移動可能" name="arrow_keys_move_avatar_check"/>
-	<check_box label="ローカルチャットにタイムスタンプを表示" name="show_timestamps_check"/>
-	<check_box label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/>
-	<check_box label="チャットの吹き出しを表示" name="bubble_text_chat"/>
-	<slider label="不透明度" name="bubble_chat_opacity"/>
-	<check_box label="スクリプト・エラーと警告をチャット同様に表示" name="script_errors_as_chat"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="チャット" name="chat">
+	<radio_group name="chat_font_size">
+		<radio_item label="小" name="radio"/>
+		<radio_item label="中" name="radio2"/>
+		<radio_item label="大" name="radio3"/>
+	</radio_group>
+	<color_swatch label="自分" name="user"/>
+	<text name="text_box1">
+		ミー
+	</text>
+	<color_swatch label="その他" name="agent"/>
+	<text name="text_box2">
+		その他
+	</text>
+	<color_swatch label="IM" name="im"/>
+	<text name="text_box3">
+		IM
+	</text>
+	<color_swatch label="システム" name="system"/>
+	<text name="text_box4">
+		システム
+	</text>
+	<color_swatch label="エラー" name="script_error"/>
+	<text name="text_box5">
+		エラー
+	</text>
+	<color_swatch label="オブジェクト" name="objects"/>
+	<text name="text_box6">
+		オブジェクト
+	</text>
+	<color_swatch label="所有者" name="owner"/>
+	<text name="text_box7">
+		所有者
+	</text>
+	<color_swatch label="URL" name="links"/>
+	<text name="text_box9">
+		URL
+	</text>
+	<check_box initial_value="true" label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/>
+	<check_box label="オフライン時に受け取った IM をメールで送信" name="send_im_to_email"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 636c137b4b689d0724f2d48b38b694c203b5cc2d..7c02baedc0a49aa7af1cb1611d51007d1a14978a 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -1,171 +1,116 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="表示" name="Display panel">
-	<text name="text">
-		表示解像度:
-	</text>
-	<button label="?" name="GraphicsPreferencesHelpButton" />
-	<check_box label="ウィンドウ内で Second Life を起動" name="windowed mode" />
-	<text_editor name="voice_chat_description">
-		チェック無しの場合は、ログイン時にフルスクリーン表示
-	</text_editor>
-	<text name="Fullscreen Aspect Ratio:">
-		全画面の縦横比:
-	</text>
-	<text name="(width / height)">
-		(幅/高さ)
-	</text>
-	<text_editor bottom="-56" height="40" name="FullScreenInfo" width="480">
-		チェックされていない場合は、ログインするとビューワがフルスクリーンで表示されます。
-	</text_editor>
-	<text name="WindowSizeLabel">
-		ウィンドウ・サイズ:
-	</text>
-	<combo_box name="windowsize combo">
-		<combo_box.item name="640x480" label="640x480" />
-		<combo_box.item name="800x600" label="800x600" />
-		<combo_box.item name="720x480" label="720x480 (NTSC)" />
-		<combo_box.item name="768x576" label="768x576 (PAL)" />
-		<combo_box.item name="1024x768" label="1024x768" />
-	</combo_box>
-	<text name="DisplayResLabel">
-		表示解像度:
-	</text>
-	<text name="AspectRatioLabel1" tool_tip="(幅/高さ)">
-		縦横比:
-	</text>
-	<combo_box name="aspect_ratio" tool_tip="(幅/高さ)">
-		<combo_box.item name="4:3(StandardCRT)" label="4:3(標準CRT)" />
-		<combo_box.item name="5:4(1280x1024LCD)" label="5:4(1280x1024 LCD)" />
-		<combo_box.item name="8:5(Widescreen)" label="8:5(ワイドスクリ-ン)" />
-		<combo_box.item name="16:9(Widescreen)" label="16:9(ワイドスクリ-ン)" />
-	</combo_box>
-	<check_box label="自動検出率" name="aspect_auto_detect" />
-	<text name="UI Size:">
-		UIサイズ:
-	</text>
-	<text name="(meters, lower is faster)">
-		(メートル、低いほど速い)
-	</text>
-	<text name="text2">
-		表示オプション:
-	</text>
-	<check_box label="解像度単独スケールを使用" name="ui_auto_scale" />
-	<spinner label="描画距離:" name="draw_distance" />
-	<check_box label="アバターを一人称視点(マウスルック)で表示" name="avfp" />
-	<text name="HigherText">
-		品質および
-	</text>
-	<text name="QualityText">
-		パフォーマンス:
-	</text>
-	<text name="FasterText">
-		速い
-	</text>
-	<text name="ShadersPrefText">
-		低
-	</text>
-	<text name="ShadersPrefText2">
-		中
-	</text>
-	<text name="ShadersPrefText3">
-		高
-	</text>
-	<text name="ShadersPrefText4">
-		超高
-	</text>
-	<text name="HigherText2">
-		高い
-	</text>
-	<text name="QualityText2">
-		品質
-	</text>
-	<check_box label="カスタム" name="CustomSettings" />
-	<panel name="CustomGraphics Panel">
-	<text name="ShadersText">
-		シェーダー:
-	</text>
-	<check_box label="バンプ・マッピングと光沢" name="BumpShiny" />
-	<check_box label="基本シェーダー" name="BasicShaders"
-	     tool_tip="このオプションを無効にするとグラフィック・カード・ドライバの種類によってはクラッシュ防止になります。" />
-	<check_box label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders" />
-	<check_box label="水の反射" name="Reflections" />
-	<text name="ReflectionDetailText">
-		反射詳細:
-	</text>
-	<radio_group name="ReflectionDetailRadio">
-		<radio_item name="0" label="地形と樹木" />
-		<radio_item name="1" label="すべての静的オブジェクト" />
-		<radio_item name="2" label="すべてのアバターとオブジェクト" />
-		<radio_item name="3" label="すべて" />
-	</radio_group>
-	<text name="AvatarRenderingText">
-		アバター表示:
-	</text>
-	<check_box label="アバターの精度を下げる" name="AvatarImpostors" />
-	<check_box label="ハードウェア・スキニング" name="AvatarVertexProgram" />
-	<check_box label="アバターの服" name="AvatarCloth" />
-	<text name="DrawDistanceMeterText1">
-		m
-	</text>
-	<text name="DrawDistanceMeterText2">
-		m
-	</text>
-	<slider label="描画距離:" name="DrawDistance" />
-	<slider label="最大パーティクル数:" name="MaxParticleCount" />
-	<slider label="ポストプロセス品質:" name="RenderPostProcess" />
-	<text name="MeshDetailText">
-		メッシュ詳細:
-	</text>
-	<slider label="  オブジェクト:" name="ObjectMeshDetail" />
-	<slider label="  フレキシプリム:" name="FlexibleMeshDetail" />
-	<slider label="  樹木:" name="TreeMeshDetail" />
-	<slider label="  アバター:" name="AvatarMeshDetail" />
-	<slider label="  地形:" name="TerrainMeshDetail" />
-	<slider label="  空:" name="SkyMeshDetail" />
-	<text name="PostProcessText">
-		低
-	</text>
-	<text name="ObjectMeshDetailText">
-		低
-	</text>
-	<text name="FlexibleMeshDetailText">
-		低
-	</text>
-	<text name="TreeMeshDetailText">
-		低
-	</text>
-	<text name="AvatarMeshDetailText">
-		低
-	</text>
-	<text name="TerrainMeshDetailText">
-		低
-	</text>
-	<text name="SkyMeshDetailText">
-		低
-	</text>
-	<text name="LightingDetailText">
-		ライティング詳細:
-	</text>
-	<radio_group name="LightingDetailRadio">
-		<radio_item name="SunMoon" label="太陽と月のみ" />
-		<radio_item name="LocalLights" label="近隣のローカル・ライト" />
-	</radio_group>
-	<text name="TerrainDetailText">
-		地形詳細:
-	</text>
-	<radio_group name="TerrainDetailRadio">
-		<radio_item name="0" label="低" />
-		<radio_item name="2" label="高" />
-	</radio_group>
-	</panel>
-	<button label="推奨された設定" name="Defaults" />
-	<button label="ハードウェア・オプション"
-	     label_selected="ハードウェア・オプション"
-	     name="GraphicsHardwareButton" />
-	<panel.string name="resolution_format">
-		[RES_X] x [RES_Y]
-	</panel.string>
-	<panel.string name="aspect_ratio_text">
-		[NUM]:[DEN]
-	</panel.string>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="表示" name="Display panel">
+	<text name="WindowSizeLabel">
+		ウィンドウ・サイズ:
+	</text>
+	<check_box label="全画面" name="windowed mode"/>
+	<combo_box name="windowsize combo">
+		<combo_box.item label="640x480" name="640x480"/>
+		<combo_box.item label="800x600" name="800x600"/>
+		<combo_box.item label="720x480 (NTSC)" name="720x480"/>
+		<combo_box.item label="768x576 (PAL)" name="768x576"/>
+		<combo_box.item label="1024x768" name="1024x768"/>
+	</combo_box>
+	<text name="UI Size:">
+		UIサイズ:
+	</text>
+	<text name="QualitySpeed">
+		クオリティとスピード:
+	</text>
+	<text name="FasterText">
+		速い
+	</text>
+	<text name="BetterText">
+		速
+	</text>
+	<text name="ShadersPrefText">
+		低
+	</text>
+	<text name="ShadersPrefText2">
+		中
+	</text>
+	<text name="ShadersPrefText3">
+		高
+	</text>
+	<text name="ShadersPrefText4">
+		超高
+	</text>
+	<panel label="CustomGraphics" name="CustomGraphics Panel">
+		<text name="ShadersText">
+			シェーダー:
+		</text>
+		<check_box initial_value="true" label="バンプ・マッピングと光沢" name="BumpShiny"/>
+		<check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="このオプションを無効にするとグラフィック・カード・ドライバの種類によってはクラッシュ防止になります。"/>
+		<check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="水の反射" name="Reflections"/>
+		<text name="ReflectionDetailText">
+			反射詳細:
+		</text>
+		<radio_group name="ReflectionDetailRadio">
+			<radio_item label="地形と樹木" name="0"/>
+			<radio_item label="すべての静的オブジェクト" name="1"/>
+			<radio_item label="すべてのアバターとオブジェクト" name="2"/>
+			<radio_item label="すべて" name="3"/>
+		</radio_group>
+		<text name="AvatarRenderingText">
+			アバター表示:
+		</text>
+		<check_box initial_value="true" label="アバターの精度を下げる" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="ハードウェア・スキニング" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="アバターの服" name="AvatarCloth"/>
+		<slider label="描画距離:" name="DrawDistance"/>
+		<text name="DrawDistanceMeterText2">
+			m
+		</text>
+		<slider label="最大パーティクル数:" name="MaxParticleCount"/>
+		<slider label="ポストプロセス品質:" name="RenderPostProcess"/>
+		<text name="MeshDetailText">
+			メッシュ詳細:
+		</text>
+		<slider label="  オブジェクト:" name="ObjectMeshDetail"/>
+		<slider label="  フレキシプリム:" name="FlexibleMeshDetail"/>
+		<slider label="  樹木:" name="TreeMeshDetail"/>
+		<slider label="  アバター:" name="AvatarMeshDetail"/>
+		<slider label="  地形:" name="TerrainMeshDetail"/>
+		<slider label="  空:" name="SkyMeshDetail"/>
+		<text name="PostProcessText">
+			低
+		</text>
+		<text name="ObjectMeshDetailText">
+			低
+		</text>
+		<text name="FlexibleMeshDetailText">
+			低
+		</text>
+		<text name="TreeMeshDetailText">
+			低
+		</text>
+		<text name="AvatarMeshDetailText">
+			低
+		</text>
+		<text name="TerrainMeshDetailText">
+			低
+		</text>
+		<text name="SkyMeshDetailText">
+			低
+		</text>
+		<text name="LightingDetailText">
+			ライティング詳細:
+		</text>
+		<radio_group name="LightingDetailRadio">
+			<radio_item label="太陽と月のみ" name="SunMoon"/>
+			<radio_item label="近隣のローカル・ライト" name="LocalLights"/>
+		</radio_group>
+		<text name="TerrainDetailText">
+			地形詳細:
+		</text>
+		<radio_group name="TerrainDetailRadio">
+			<radio_item label="低" name="0"/>
+			<radio_item label="高" name="2"/>
+		</radio_group>
+	</panel>
+	<button label="適用" label_selected="適用" name="Apply"/>
+	<button label="リセット" name="Defaults"/>
+	<button label="詳しい設定" name="Advanced"/>
+	<button label="ハードウェア" label_selected="ハードウェア" name="GraphicsHardwareButton"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
index 20299542fb12fb4fd52190850ce7f761b5d4a9a8..f7b727de6c8c8aa92a564171d38d190654ad1445 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
@@ -1,32 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="チャット設定" name="im">
-	<text name="text_box">
-		オンライン通知:
-	</text>
-	<check_box label="フレンドとグループのみ自分のオンラインを確認可能に" name="online_visibility"/>
-	<text name="text_box2">
-		IMオプション:
-	</text>
-	<text name="log_in_to_change">
-		ログインして変更してください
-	</text>
-	<check_box label="IMを電子メール([EMAIL])へ送信" name="send_im_to_email"/>
-	<check_box label="チャットコンソールにIMを表示する" name="include_im_in_chat_console"/>
-	<check_box label="IMにタイムスタンプを表示" name="show_timestamps_check"/>
-	<check_box label="オンライン・フレンド通知を表示" name="friends_online_notify_checkbox"/>
-	<text name="text_box4">
-		記録オプション:
-	</text>
-	<check_box label="IMログを自分のコンピュータに保存" name="log_instant_messages"/>
-	<check_box label="IMログにタイムスタンプを表示" name="log_instant_messages_timestamp"/>
-	<check_box label="ローカルチャットのログを自分のコンピュータに保存" name="log_chat"/>
-	<check_box label="最後のIMチャットの末尾を表示" name="log_show_history"/>
-	<check_box label="ローカルチャットのログにタイムスタンプを表示" name="log_chat_timestamp"/>
-	<check_box label="ローカルチャットのログに受信IMを表示" name="log_chat_IM"/>
-	<check_box label="タイムスタンプに日付を加える" name="log_date_timestamp"/>
-	<button label="パス変更" label_selected="パス変更" name="log_path_button"/>
-	<text name="text_box3">
-		取り込み中
-応答メッセージ:
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="チャット設定" name="im">
+	<panel.string name="log_in_to_change">
+		ログインして変更してください
+	</panel.string>
+	<button label="履歴の消去" name="clear_cache"/>
+	<text name="cache_size_label_l">
+		(位置、画像、web、検索履歴)
+	</text>
+	<check_box label="フレンドとグループのみオンライン状況の確認可能" name="online_visibility"/>
+	<check_box label="フレンドとグループのみコールとIMの受信可能" name="voice_call_friends_only_check"/>
+	<check_box label="コールが終了したらマイクのスイッチを切る" name="auto_disengage_mic_check"/>
+	<check_box label="Cookieを受け入れる" name="cookies_enabled"/>
+	<check_box label="コンピューターにログを保存" name="log_instant_messages"/>
+	<radio_group name="ChatIMLogs">
+		<radio_item label="チャット" name="radio1"/>
+		<radio_item label="IM" name="radio2"/>
+	</radio_group>
+	<button label="ブラウズ" label_selected="ブラウズ" name="log_path_button"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
index ded6f9df38e46d7798a4f0cf1b7ea78d71f139eb..59357a366e143229bb6c6259fe4827c46e5a99d3 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
@@ -1,31 +1,46 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="操作とカメラ" name="Input panel">
-	<text name=" Mouselook Options:">
-		一人称視点
-(マウスルック):
-	</text>
-	<text name=" Mouse Sensitivity:">
-		感度:
-	</text>
-	<check_box label="上下を反転" name="invert_mouse"/>
-	<text name=" Auto Fly Options:">
-		自動飛行オプション:
-	</text>
-	<check_box label="上下矢印キーの長押しで飛行/着地" name="automatic_fly"/>
-	<text name=" Camera Options:">
-		カメラ・オプション:
-	</text>
-	<text name="camera_fov_label">
-		カメラ視野角:
-	</text>
-	<text name="Camera Follow Distance:">
-		カメラ追従距離:
-	</text>
-	<check_box label="編集カメラの自動移動" name="edit_camera_movement" tool_tip="編集モードの開始、終了時はカメラ自動位置調整を使用"/>
-	<check_box label="容姿カメラの自動移動" name="appearance_camera_movement" tool_tip="編集モードでは、カメラ自動位置調整を使用"/>
-	<text name="text2">
-		アバター表示:
-	</text>
-	<check_box label="アバターを一人称視点(マウスルック)で表示" name="first_person_avatar_visible"/>
-	<button label="ジョイスティック設定" name="joystick_setup_button"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="操作とカメラ" name="Input panel">
+	<button label="その他のディバイス" name="joystick_setup_button"/>
+	<text name="Mouselook:">
+		一人称視点:
+	</text>
+	<text name=" Mouse Sensitivity">
+		マウスの精度
+	</text>
+	<check_box label="切り替え" name="invert_mouse"/>
+	<text name="Network:">
+		ネットワーク:
+	</text>
+	<text name="Maximum bandwidth">
+		最大帯域幅
+	</text>
+	<text name="text_box2">
+		kbps
+	</text>
+	<check_box label="カスタムポート" name="connection_port_enabled"/>
+	<spinner label="ポート番号:" name="web_proxy_port"/>
+	<text name="cache_size_label_l">
+		キャッシュサイズ
+	</text>
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="ブラウズ" label_selected="ブラウズ" name="set_cache"/>
+	<button label="リセット" label_selected="設定" name="reset_cache"/>
+	<text name="Cache location">
+		キャッシュの場所
+	</text>
+	<text name="Web:">
+		Web:
+	</text>
+	<radio_group name="use_external_browser">
+		<radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザでヘルプやWebリンクなどを見ます。[APP_NAME] 内に新しいウィンドウでこのブラウザが開きます。"/>
+		<radio_item label="外部ブラウザ(IEやFirefox)を使用" name="external" tool_tip="デフォルトのシステムWebブラウザでヘルプやWebリンク先などを見ます。全画面で起動中にはおすすめしません。"/>
+	</radio_group>
+	<check_box initial_value="false" label="Webプロキシ" name="web_proxy_enabled"/>
+	<line_editor name="web_proxy_editor" tool_tip="使用するプロキシ名またはIPアドレス"/>
+	<button label="ブラウズ" label_selected="ブラウズ" name="set_proxy"/>
+	<text name="Proxy location">
+		プロキシ
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index d8763193ae07c1c4eeafaa014328b68ec06d5824..c4bd21a5baf67341e7df736cdc3b71c3e38408f5 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -1,77 +1,72 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel label="音声とビデオ" name="Preference Media panel">
-	<slider label="マスター" name="System Volume"/>
-	<slider label="風の音量" name="Wind Volume"/>
-	<slider label="サウンド" name="SFX Volume"/>
-	<slider label="メディア" name="Media Volume"/>
-	<slider label="UI" name="UI Volume"/>
-	<slider label="ミュージック" name="Music Volume"/>
-	<slider label="ボイス" name="Voice Volume"/>
-	<text_editor name="voice_unavailable">
-		ボイスチャットを利用できません
-	</text_editor>
-	<check_box label="ボイスチャットを有効にする" name="enable_voice_check"/>
-	<radio_group name="ear_location">
-		<radio_item name="0" label="カメラの位置からボイスチャットを聞く。" />
-		<radio_item name="1" label="アバターの位置からボイスチャットを聞く。" />
-	</radio_group>
-	<button label="機器の設定" name="device_settings_btn"/>
-	<text name="muting_text">
-		ボリューム:
-	</text>
-	<check_box label="オーディオをミュート" name="disable audio" />
-	<text name="streaming_prefs_text">
-		ストリーム環境設定:
-	</text>
-	<text name="audio_prefs_text">
-		オーディオ環境設定:
-	</text>
-	<panel label="ボリューム" name="Volume Panel" />
-	<check_box label="メディアを自動再生" name="auto_streaming_video" />
-	<check_box
-	     label="ウィンドウが最小化されたときにオーディオをミュート"
-	     name="mute_when_minimized" />
-	<text name="streaming_text">
-		ストリーミング:
-	</text>
-	<check_box label="音楽がある場合再生する"
-	     name="streaming_music" />
-	<check_box
-	     label="ストリーミング・メディア使用可時に再生"
-	     name="streaming_video" />
-	<text name="system_volume_text">
-		サウンド効果:
-	</text>
-	<text name="wind_volume_text">
-		風の音量:
-	</text>
-	<text name="footsteps_volume_text">
-		足音:
-	</text>
-	<text name="ui_volume_text">
-		UI音量:
-	</text>
-	<slider label="ドップラー効果" name="Doppler Effect" />
-	<slider label="遠隔要因" name="Distance Factor" />
-	<slider label="ロールオフ係数" name="Rolloff Factor" />
-	<spinner label="L$変更基準点" name="L$ Change Threshold" />
-	<spinner label="ヘルス変化基準点" name="Health Change Threshold" />
-	<text name="doppler_effect_text">
-		オーディオ環境設定:
-	</text>
-	<text name="distance_factor_text">
-		距離係数:
-	</text>
-	<text name="rolloff_factor_text">
-		ロールオフ:
-	</text>
-	<text name="default_upload_bitrate_text">
-		デフォルトUL速度:
-	</text>
-	<radio_group name="bitrate">
-		<radio_item name="32kbps" label="32kbps" />
-		<radio_item name="64kbps" label="64kbps" />
-		<radio_item name="96kbps" label="96kbps" />
-		<radio_item name="128kbps" label="128kbps" />
-	</radio_group>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="音声とビデオ" name="Preference Media panel">
+	<slider label="音量" name="System Volume"/>
+	<slider label="風の音量" name="Wind Volume"/>
+	<slider label="サウンド" name="SFX Volume"/>
+	<slider label="メディア" name="Media Volume"/>
+	<slider label="UI" name="UI Volume"/>
+	<slider label="ミュージック" name="Music Volume"/>
+	<slider label="ボイス" name="Voice Volume"/>
+	<text_editor name="voice_unavailable">
+		ボイスチャットを利用できません
+	</text_editor>
+	<check_box label="ボイスチャット" name="enable_voice_check"/>
+	<radio_group name="ear_location">
+		<radio_item label="カメラの位置から聞く" name="0"/>
+		<radio_item label="アバターの位置から聞く" name="1"/>
+	</radio_group>
+	<button label="機器の設定" name="device_settings_btn"/>
+	<text name="muting_text">
+		ボリューム:
+	</text>
+	<check_box label="オーディオをミュート" name="disable audio"/>
+	<text name="streaming_prefs_text">
+		ストリーム環境設定:
+	</text>
+	<text name="audio_prefs_text">
+		オーディオ環境設定:
+	</text>
+	<panel label="ボリューム" name="Volume Panel"/>
+	<check_box label="メディアを自動再生" name="auto_streaming_video"/>
+	<check_box label="最小化でミュート" name="mute_when_minimized"/>
+	<text name="streaming_text">
+		ストリーミング:
+	</text>
+	<check_box label="音楽がある場合再生する" name="streaming_music"/>
+	<check_box label="ストリーミング・メディア使用可時に再生" name="streaming_video"/>
+	<text name="system_volume_text">
+		サウンド効果:
+	</text>
+	<text name="wind_volume_text">
+		風の音量:
+	</text>
+	<text name="footsteps_volume_text">
+		足音:
+	</text>
+	<text name="ui_volume_text">
+		UI音量:
+	</text>
+	<slider label="ドップラー効果" name="Doppler Effect"/>
+	<slider label="遠隔要因" name="Distance Factor"/>
+	<slider label="ロールオフ係数" name="Rolloff Factor"/>
+	<spinner label="L$変更基準点" name="L$ Change Threshold"/>
+	<spinner label="ヘルス変化基準点" name="Health Change Threshold"/>
+	<text name="doppler_effect_text">
+		オーディオ環境設定:
+	</text>
+	<text name="distance_factor_text">
+		距離係数:
+	</text>
+	<text name="rolloff_factor_text">
+		ロールオフ:
+	</text>
+	<text name="default_upload_bitrate_text">
+		デフォルトUL速度:
+	</text>
+	<radio_group name="bitrate">
+		<radio_item label="32kbps" name="32kbps"/>
+		<radio_item label="64kbps" name="64kbps"/>
+		<radio_item label="96kbps" name="96kbps"/>
+		<radio_item label="128kbps" name="128kbps"/>
+	</radio_group>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff82043a0d9aaaf4f37b4d47d23c5de91610587b
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_profile.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="プロフィール" name="panel_profile">
+	<string name="CaptionTextAcctInfo">
+		[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+	</string>
+	<string name="payment_update_link_url">
+		http://www.secondlife.com/account/billing.php?lang=ja
+	</string>
+	<string name="my_account_link_url" value="http://secondlife.com/account"/>
+	<string name="no_partner_text" value="なし"/>
+	<scroll_container name="profile_scroll">
+		<panel name="scroll_content_panel">
+			<panel name="second_life_image_panel">
+				<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
+			</panel>
+			<panel name="first_life_image_panel">
+				<text name="title_rw_descr_text" value="現実世界:"/>
+			</panel>
+			<text name="me_homepage_text">
+				Webサイト:
+			</text>
+			<text name="title_member_text" value="メンバー登録:"/>
+			<text name="title_acc_status_text" value="アカウントの状態:"/>
+			<text name="title_partner_text" value="パートナー:"/>
+			<panel name="partner_data_panel">
+				<text name="partner_text" value="[FIRST] [LAST]"/>
+			</panel>
+			<text name="title_groups_text" value="グループ:"/>
+		</panel>
+	</scroll_container>
+	<panel name="profile_buttons_panel">
+		<button label="フレンド登録" name="add_friend"/>
+		<button label="IM" name="im"/>
+		<button label="コール" name="call"/>
+		<button label="テレポート" name="teleport"/>
+	</panel>
+	<panel name="profile_me_buttons_panel">
+		<button label="プロフィールの編集" name="edit_profile_btn"/>
+		<button label="容姿の編集" name="edit_appearance_btn"/>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile_view.xml b/indra/newview/skins/default/xui/ja/panel_profile_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7663851f61ac4346fce550be6436d45f9e0f8444
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_profile_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_target_profile">
+	<string name="status_online">
+		オンライン
+	</string>
+	<string name="status_offline">
+		オフライン
+	</string>
+	<text name="user_name" value="(ローディング...)"/>
+	<text name="status" value="オンライン"/>
+	<tab_container name="tabs">
+		<panel label="プロフィール" name="panel_profile"/>
+		<panel label="ピック" name="panel_picks"/>
+	</tab_container>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
new file mode 100644
index 0000000000000000000000000000000000000000..596d59b5777b51208dfa9af0369836338b22e20c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="script panel">
+	<panel.string name="loading">
+		ローディング...
+	</panel.string>
+	<panel.string name="can_not_view">
+		このスクリプトは「コピー不可」のため、表示・編集することができません。 オブジェクト内のスクリプトの表示・編集には、全権限が必要です。
+	</panel.string>
+	<panel.string name="public_objects_can_not_run">
+		公共のオブジェクトではスクリプトを実行できません
+	</panel.string>
+	<panel.string name="script_running">
+		実行中
+	</panel.string>
+	<panel.string name="Title">
+		スクリプト: [NAME]
+	</panel.string>
+	<text_editor name="Script Editor">
+		ローディング...
+	</text_editor>
+	<button label="保存" label_selected="保存" name="Save_btn"/>
+	<combo_box label="挿入..." name="Insert..."/>
+	<menu_bar name="script_menu">
+		<menu label="ファイル" name="File">
+			<menu_item_call label="保存" name="Save"/>
+			<menu_item_call label="変更を元に戻す" name="Revert All Changes"/>
+		</menu>
+		<menu label="編集" name="Edit">
+			<menu_item_call label="元に戻す" name="Undo"/>
+			<menu_item_call label="やり直し" name="Redo"/>
+			<menu_item_call label="切り取り" name="Cut"/>
+			<menu_item_call label="コピー" name="Copy"/>
+			<menu_item_call label="貼り付け" name="Paste"/>
+			<menu_item_call label="すべて選択" name="Select All"/>
+			<menu_item_call label="選択解除" name="Deselect"/>
+			<menu_item_call label="検索 / 再配置..." name="Search / Replace..."/>
+		</menu>
+		<menu label="ヘルプ" name="Help">
+			<menu_item_call label="ヘルプ..." name="Help..."/>
+			<menu_item_call label="キーワードヘルプ..." name="Keyword Help..."/>
+		</menu>
+	</menu_bar>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aea057657eb8fdb345687d788f4657e1c7e2493a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
+<panel name="panel_stand_stop_flying">
+	<button label="立ち上がる" name="stand_btn" tool_tip="ここをクリックして立ち上がります。"/>
+	<button label="飛行停止" name="stop_fly_btn" tool_tip="飛行停止"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
index 9c5fe981b8df3d7516b2e2d99ad0ad2b17efd268..05f29b75908f1194dab07a107a74249226389846 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -1,42 +1,22 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="status">
-	<text name="ParcelNameText" tool_tip="あなたが立っている土地区画の名 前。クリックすると「土地情報」が開きます。">
-		区画名はここです
-	</text>
-	<text name="BalanceText" tool_tip="口座残高">
-		ローディング...
-	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入"/>
-	<text name="TimeText" tool_tip="現在時刻(太平洋時)">
-		12:00 AM
-	</text>
-	<text name="StatBarDaysOfWeek">
-		日曜日:月曜日:火曜日:水曜日:木曜日:金曜日:土曜日
-	</text>
-	<text name="StatBarMonthsOfYear">
-		1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
-	</text>
-	<button label="" label_selected="" name="scriptout" tool_tip="スクリプト警告およびエラー"/>
-	<button label="" label_selected="" name="health" tool_tip="健康状態"/>
-	<text name="HealthText" tool_tip="健康状態">
-		100%
-	</text>
-	<button label="" label_selected="" name="fly" tool_tip="飛行禁止"/>
-	<button label="" label_selected="" name="build" tool_tip="作成禁止"/>
-	<button label="" label_selected="" name="scripts" tool_tip="スクリプトなし"/>
-	<button name="no_fly" tool_tip="飛行禁止"/>
-	<button name="no_build" tool_tip="制作/Rez禁止"/>
-	<button name="no_scripts" tool_tip="スクリプト禁止"/>
-	<button label="" label_selected="" name="restrictpush" tool_tip="プッシングを制限"/>
-	<button name="status_voice" tool_tip="ボイス有効"/>
-	<button name="status_no_voice" tool_tip="ここではボイスを使用できません。"/>
-	<button label="" label_selected="" name="buyland" tool_tip="この区画を購入"/>
-	<text name="packet_loss_tooltip">
-		パケット損失
-	</text>
-	<text name="bandwidth_tooltip">
-		帯域幅
-	</text>
-	<line_editor label="検索" name="search_editor" tool_tip="[SECOND_LIFE]を検索"/>
-	<button name="search_btn" tool_tip="[SECOND_LIFE]を検索"/>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		日曜日:月曜日:火曜日:水曜日:木曜日:金曜日:土曜日
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		1月:2月:3月:4月:5月:6月:7月:8月:9月:10月:11月:12月
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		パケット損失
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		帯域幅
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		L$ [AMT]
+	</panel.string>
+	<button label="" label_selected="" name="buycurrency" tool_tip="私の残高: ここをクリックして L$ を購入"/>
+	<text name="TimeText" tool_tip="現在時刻(太平洋時)">
+		12:00 AM
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml
index 391379b072098545f36ae44082fbd42c2ebf6d6a..6cf008c5149099e1d604950ca0790dcbf3b836e1 100644
--- a/indra/newview/skins/default/xui/ja/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/ja/panel_world_map.xml
@@ -1,51 +1,57 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="world_map">
-	<panel.string name="world_map_north">
-		北
-	</panel.string>
-	<panel.string name="world_map_east">
-		東
-	</panel.string>
-	<panel.string name="world_map_west">
-		西
-	</panel.string>
-	<panel.string name="world_map_south">
-		南
-	</panel.string>
-	<panel.string name="world_map_southeast">
-		南東
-	</panel.string>
-	<panel.string name="world_map_northeast">
-		北東
-	</panel.string>
-	<panel.string name="world_map_southwest">
-		南西
-	</panel.string>
-	<panel.string name="world_map_northwest">
-		北西
-	</panel.string>
-	<text label="北" name="floater_map_north" text="北">
-		北
-	</text>
-	<text label="東" name="floater_map_east" text="東">
-		東
-	</text>
-	<text label="西" name="floater_map_west" text="西">
-		西
-	</text>
-	<text label="南" name="floater_map_south" text="南">
-		南
-	</text>
-	<text label="南東" name="floater_map_southeast" text="南東">
-		南東
-	</text>
-	<text label="北東" name="floater_map_northeast" text="北東">
-		北東
-	</text>
-	<text label="南西" name="floater_map_southwest" text="南西">
-		南西
-	</text>
-	<text label="北西" name="floater_map_northwest" text="北西">
-		北西
-	</text>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+	<panel.string name="Loading">
+		ローディング...
+	</panel.string>
+	<panel.string name="InvalidLocation">
+		無効な位置
+	</panel.string>
+	<panel.string name="world_map_north">
+		北
+	</panel.string>
+	<panel.string name="world_map_east">
+		東
+	</panel.string>
+	<panel.string name="world_map_west">
+		西
+	</panel.string>
+	<panel.string name="world_map_south">
+		南
+	</panel.string>
+	<panel.string name="world_map_southeast">
+		南東
+	</panel.string>
+	<panel.string name="world_map_northeast">
+		北東
+	</panel.string>
+	<panel.string name="world_map_southwest">
+		南西
+	</panel.string>
+	<panel.string name="world_map_northwest">
+		北西
+	</panel.string>
+	<text label="北" name="floater_map_north" text="北">
+		北
+	</text>
+	<text label="東" name="floater_map_east" text="東">
+		東
+	</text>
+	<text label="西" name="floater_map_west" text="西">
+		西
+	</text>
+	<text label="南" name="floater_map_south" text="南">
+		南
+	</text>
+	<text label="南東" name="floater_map_southeast" text="南東">
+		南東
+	</text>
+	<text label="北東" name="floater_map_northeast" text="北東">
+		北東
+	</text>
+	<text label="南西" name="floater_map_southwest" text="南西">
+		南西
+	</text>
+	<text label="北西" name="floater_map_northwest" text="北西">
+		北西
+	</text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 0eb26754cfe270a71b3a67cfca1ed3db3a867536..ad630ab5dcd36d1f151555efe28fe22b56b3491c 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1,654 +1,3149 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- This file contains strings that used to be hardcoded in the source.
-     It is only for those strings which do not belong in a floater.
-     For example, the strings used in avatar chat bubbles, and strings 
-     that are returned from one component and may appear in many places-->
-<strings>
-	<string name="LoginInProgress">
-		ログイン中です。[APP_NAME]の表示がフリーズする場合があります。  しばらくお待ちください。
-	</string>
-	<string name="LoginAuthenticating">
-		認証しています...
-	</string>
-	<string name="LoginMaintenance">
-		アカウント・メンテナンスを実行しています...
-	</string>
-	<string name="LoginAttempt">
-		前回のログインに失敗しました。 ログイン中です([NUMBER]回目)
-	</string>
-	<string name="LoginPrecaching">
-		ワールドをロードしています...
-	</string>
-	<string name="LoginInitializingBrowser">
-		埋め込みWebブラウザを初期化しています...
-	</string>
-	<string name="LoginInitializingMultimedia">
-		マルチメディアを初期化しています...
-	</string>
-	<string name="LoginVerifyingCache">
-		キャッシュ・ファイルを検証しています(所要時間は60~90秒)...
-	</string>
-	<string name="LoginProcessingResponse">
-		応答を処理しています...
-	</string>
-	<string name="LoginInitializingWorld">
-		ワールドを初期化しています...
-	</string>
-	<string name="LoginDecodingImages">
-		画像をデコードしています...
-	</string>
-	<string name="LoginInitializingQuicktime">
-		QuickTimeを初期化しています...
-	</string>
-	<string name="LoginQuicktimeNotFound">
-		QuickTimeが見つかりません。初期化に失敗しました。
-	</string>
-	<string name="LoginQuicktimeOK">
-		QuickTimeが正常に初期化されました。
-	</string>
-	<string name="LoginWaitingForRegionHandshake">
-		地域のハンドシェイクを待っています...
-	</string>
-	<string name="LoginConnectingToRegion">
-		地域に接続しています...
-	</string>
-	<string name="LoginDownloadingClothing">
-		服をダウンロードしています...
-	</string>
-	<string name="AgentLostConnection">
-		この地域には、問題が発生している可能性があります。  インターネット接続を確認してください。
-	</string>
-	<string name="TooltipPerson">
-		人
-	</string>
-	<string name="TooltipNoName">
-		(名前なし)
-	</string>
-	<string name="TooltipOwner">
-		オーナー:
-	</string>
-	<string name="TooltipPublic">
-		公共
-	</string>
-	<string name="TooltipIsGroup">
-		(グループ)
-	</string>
-	<string name="TooltipFlagScript">
-		スクリプト
-	</string>
-	<string name="TooltipFlagPhysics">
-		物理作用
-	</string>
-	<string name="TooltipFlagTouch">
-		触る
-	</string>
-	<string name="TooltipFlagL$">
-		L$
-	</string>
-	<string name="TooltipFlagDropInventory">
-		持ち物をドロップする
-	</string>
-	<string name="TooltipFlagPhantom">
-		ファントム
-	</string>
-	<string name="TooltipFlagTemporary">
-		一時的
-	</string>
-	<string name="TooltipFlagRightClickMenu">
-		(右クリックでメニューを表示)
-	</string>
-	<string name="TooltipFreeToCopy">
-		コピー可能
-	</string>
-	<string name="TooltipForSaleL$">
-		売り出し中:L$[AMOUNT]
-	</string>
-	<string name="TooltipForSaleMsg">
-		売り出し中: [MESSAGE]
-	</string>
-	<string name="TooltipFlagGroupBuild">
-		グループ作成
-	</string>
-	<string name="TooltipFlagNoBuild">
-		作成禁止
-	</string>
-	<string name="TooltipFlagNoEdit">
-		グループ作成
-	</string>
-	<string name="TooltipFlagNotSafe">
-		危険
-	</string>
-	<string name="TooltipFlagNoFly">
-		飛行禁止
-	</string>
-	<string name="TooltipFlagGroupScripts">
-		グループ・スクリプト
-	</string>
-	<string name="TooltipFlagNoScripts">
-		スクリプトなし
-	</string>
-	<string name="TooltipLand">
-		土地:
-	</string>
-	<string name="TooltipMustSingleDrop">
-		1つのアイテムのみをここにドラッグできます
-	</string>
-	<string name="RetrievingData">
-		検索中...
-	</string>
-	<string name="ReleaseNotes">
-		リリースノート
-	</string>
-	<string name="LoadingData">
-		ロード中...
-	</string>
-	<string name="AvatarNameNobody">
-		(無人)
-	</string>
-	<string name="AvatarNameWaiting">
-		(待機中)
-	</string>
-	<string name="AvatarNameHippos">
-		(カバ)
-	</string>
-	<string name="GroupNameNone">
-		(なし)
-	</string>
-	<string name="AssetErrorNone">
-		エラーなし
-	</string>
-	<string name="AssetErrorRequestFailed">
-		資産の要求: 失敗
-	</string>
-	<string name="AssetErrorNonexistentFile">
-		資産の要求: 存在しないファイル
-	</string>
-	<string name="AssetErrorNotInDatabase">
-		資産の要求: データベースでは見つからない資産
-	</string>
-	<string name="AssetErrorEOF">
-		ファイルの終わり
-	</string>
-	<string name="AssetErrorCannotOpenFile">
-		ファイルを開くことができません
-	</string>
-	<string name="AssetErrorFileNotFound">
-		ファイルが見つかりません
-	</string>
-	<string name="AssetErrorTCPTimeout">
-		ファイル転送タイムアウトです
-	</string>
-	<string name="AssetErrorCircuitGone">
-		接続が解除されました
-	</string>
-	<string name="AssetErrorPriceMismatch">
-		ビューワとサーバーの価格が一致していません
-	</string>
-	<string name="AssetErrorUnknownStatus">
-		ステータスが不明です
-	</string>
-	<string name="AvatarEditingApparance">
-		(容姿の編集)
-	</string>
-	<string name="AvatarAway">
-		退席中
-	</string>
-	<string name="AvatarBusy">
-		取り込み中
-	</string>
-	<string name="AvatarMuted">
-		ミュート
-	</string>
-	<string name="anim_express_afraid">
-		怖れ
-	</string>
-	<string name="anim_express_anger">
-		怒り
-	</string>
-	<string name="anim_away">
-		退席中
-	</string>
-	<string name="anim_backflip">
-		後ろ宙返り
-	</string>
-	<string name="anim_express_laugh">
-		大笑い
-	</string>
-	<string name="anim_express_toothsmile">
-		満面の笑顔
-	</string>
-	<string name="anim_blowkiss">
-		投げキッス
-	</string>
-	<string name="anim_express_bored">
-		退屈
-	</string>
-	<string name="anim_bow">
-		おじぎ
-	</string>
-	<string name="anim_clap">
-		拍手
-	</string>
-	<string name="anim_courtbow">
-		深いおじぎ
-	</string>
-	<string name="anim_express_cry">
-		泣く
-	</string>
-	<string name="anim_dance1">
-		ダンス1
-	</string>
-	<string name="anim_dance2">
-		ダンス2
-	</string>
-	<string name="anim_dance3">
-		ダンス3
-	</string>
-	<string name="anim_dance4">
-		ダンス4
-	</string>
-	<string name="anim_dance5">
-		ダンス5
-	</string>
-	<string name="anim_dance6">
-		ダンス6
-	</string>
-	<string name="anim_dance7">
-		ダンス7
-	</string>
-	<string name="anim_dance8">
-		ダンス8
-	</string>
-	<string name="anim_express_disdain">
-		侮蔑
-	</string>
-	<string name="anim_drink">
-		酔っぱらう
-	</string>
-	<string name="anim_express_embarrased">
-		困惑
-	</string>
-	<string name="anim_angry_fingerwag">
-		指を振る
-	</string>
-	<string name="anim_fist_pump">
-		ガッツポーズ
-	</string>
-	<string name="anim_yoga_float">
-		ヨガ浮遊
-	</string>
-	<string name="anim_express_frown">
-		しかめっ面
-	</string>
-	<string name="anim_impatient">
-		いらいらする
-	</string>
-	<string name="anim_jumpforjoy">
-		飛び上がって喜ぶ
-	</string>
-	<string name="anim_kissmybutt">
-		挑発ポーズ
-	</string>
-	<string name="anim_express_kiss">
-		キス
-	</string>
-	<string name="anim_laugh_short">
-		笑う
-	</string>
-	<string name="anim_musclebeach">
-		力こぶを見せる
-	</string>
-	<string name="anim_no_unhappy">
-		不満げに否定する
-	</string>
-	<string name="anim_no_head">
-		否定する
-	</string>
-	<string name="anim_nyanya">
-		冷やかす
-	</string>
-	<string name="anim_punch_onetwo">
-		ワンツー・パンチ
-	</string>
-	<string name="anim_express_open_mouth">
-		口を開けて驚く
-	</string>
-	<string name="anim_peace">
-		ピース・サイン
-	</string>
-	<string name="anim_point_you">
-		他人を指差す
-	</string>
-	<string name="anim_point_me">
-		自分を指差す
-	</string>
-	<string name="anim_punch_l">
-		左パンチ
-	</string>
-	<string name="anim_punch_r">
-		右パンチ
-	</string>
-	<string name="anim_rps_countdown">
-		じゃんけんポーズ
-	</string>
-	<string name="anim_rps_paper">
-		パー
-	</string>
-	<string name="anim_rps_rock">
-		グー
-	</string>
-	<string name="anim_rps_scissors">
-		チョキ
-	</string>
-	<string name="anim_express_repulsed">
-		嫌悪感
-	</string>
-	<string name="anim_kick_roundhouse_r">
-		まわし蹴り
-	</string>
-	<string name="anim_express_sad">
-		悲しむ
-	</string>
-	<string name="anim_salute">
-		敬礼する
-	</string>
-	<string name="anim_shout">
-		叫ぶ
-	</string>
-	<string name="anim_express_shrug">
-		肩をすくめる
-	</string>
-	<string name="anim_express_smile">
-		微笑む
-	</string>
-	<string name="anim_smoke_idle">
-		たばこをくゆらす
-	</string>
-	<string name="anim_smoke_inhale">
-		たばこを吸う
-	</string>
-	<string name="anim_smoke_throw_down">
-		たばこを捨てる
-	</string>
-	<string name="anim_express_surprise">
-		驚く
-	</string>
-	<string name="anim_sword_strike_r">
-		剣で斬りつける
-	</string>
-	<string name="anim_angry_tantrum">
-		じだんだを踏む
-	</string>
-	<string name="anim_express_tongue_out">
-		舌を出す
-	</string>
-	<string name="anim_hello">
-		手を振る
-	</string>
-	<string name="anim_whisper">
-		小声で話す
-	</string>
-	<string name="anim_whistle">
-		口笛を吹く
-	</string>
-	<string name="anim_express_wink">
-		ウィンク
-	</string>
-	<string name="anim_wink_hollywood">
-		ウィンク(ハリウッド)
-	</string>
-	<string name="anim_express_worry">
-		心配する
-	</string>
-	<string name="anim_yes_happy">
-		笑顔で頷く
-	</string>
-	<string name="anim_yes_head">
-		頷く
-	</string>
-	<string name="texture_loading">
-		ロード中...
-	</string>
-	<string name="worldmap_offline">
-		オフライン
-	</string>
-	<string name="whisper">
-		のささやき:
-	</string>
-	<string name="shout">
-		の叫び:
-	</string>
-	<string name="SIM_ACCESS_PG">
-		PG
-	</string>
-	<string name="SIM_ACCESS_MATURE">
-		Mature
-	</string>
-	<string name="SIM_ACCESS_ADULT">
-		Adult
-	</string>
-	<string name="SIM_ACCESS_DOWN">
-		オフライン
-	</string>
-	<string name="SIM_ACCESS_MIN">
-		不明
-	</string>
-	<string name="land_type_unknown">
-		(不明)
-	</string>
-	<string name="covenant_never_modified">
-		最終修正: (無)
-	</string>
-	<string name="covenant_modified">
-		最終修正:
-	</string>
-	<string name="all_files">
-		全てのファイル
-	</string>
-	<string name="sound_files">
-		サウンド
-	</string>
-	<string name="animation_files">
-		アニメーション
-	</string>
-	<string name="image_files">
-		画像
-	</string>
-	<string name="save_file_verb">
-		保存
-	</string>
-	<string name="load_file_verb">
-		ロード
-	</string>
-	<string name="targa_image_files">
-		Targa画像
-	</string>
-	<string name="bitmap_image_files">
-		ビットマップ画像
-	</string>
-	<string name="avi_movie_file">
-		AVIムービーファイル
-	</string>
-	<string name="xaf_animation_file">
-		XAFアニメーションファイル
-	</string>
-	<string name="xml_file">
-		XMLファイル
-	</string>
-	<string name="dot_raw_file">
-		RAWファイル
-	</string>
-	<string name="compressed_image_files">
-		圧縮画像
-	</string>
-	<string name="load_files">
-		ファイルのロード
-	</string>
-	<string name="choose_the_directory">
-		参照
-	</string>
-	<string name="accel-mac-control">
-		&#8963;
-	</string>
-	<string name="accel-mac-command">
-		&#8984;
-	</string>
-	<string name="accel-mac-option">
-		&#8997;
-	</string>
-	<string name="accel-mac-shift">
-		&#8679;
-	</string>
-	<string name="accel-win-control">
-		Ctrl+
-	</string>
-	<string name="accel-win-alt">
-		Alt+
-	</string>
-	<string name="accel-win-shift">
-		Shift+
-	</string>
-	<string name="GraphicsQualityLow">
-		低
-	</string>
-	<string name="GraphicsQualityMid">
-		中
-	</string>
-	<string name="GraphicsQualityHigh">
-		高
-	</string>
-	
-	<!-- PARCEL_CATEGORY_UI_STRING -->
-	<string name="Linden Location">Linden所在地</string>
-	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">アートとカルチャー</string>
-	<string name="Business">ビジネス</string>
-	<string name="Educational">教育的</string>
-	<string name="Gaming">ゲーム</string>
-	<string name="Hangout">たまり場</string>
-	<string name="Newcomer Friendly">新住人に好意的</string>
-	<string name="Parks&amp;Nature">公園と自然</string>
-	<string name="Residential">住宅用</string>
-	<string name="Shopping">ショッピング</string>
-	<string name="Other">その他</string>
-	<string name="ringing">
-		インワールドボイスチャットに接続中...
-	</string>
-	<string name="connected">
-		接続しました
-	</string>
-	<string name="unavailable">
-		あなたの現在のロケーションでは、ボイスを利用できません。
-	</string>
-	<string name="hang_up">
-		インワールドボイスチャットの通話が切断されました
-	</string>
-	<string name="ScriptQuestionCautionChatGranted">
-		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を許可しました: [PERMISSIONS]
-	</string>
-	<string name="ScriptQuestionCautionChatDenied">
-		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を拒否しました: [PERMISSIONS]
-	</string>
-	<string name="ScriptTakeMoney">
-		リンデンドル(L$)を支払う
-	</string>
-	<string name="ActOnControlInputs">
-		制御入力に基づいて行動
-	</string>
-	<string name="RemapControlInputs">
-		制御入力のリマップ
-	</string>
-	<string name="AnimateYourAvatar">
-		アバターへのアニメーション動作
-	</string>
-	<string name="AttachToYourAvatar">
-		アバターに装着
-	</string>
-	<string name="ReleaseOwnership">
-		所有権を解放し公のものとする
-	</string>
-	<string name="LinkAndDelink">
-		他のオブジェクトのリンクとリンク解除
-	</string>
-	<string name="AddAndRemoveJoints">
-		他のオブジェクトとのジョイントの追加と削除
-	</string>
-	<string name="ChangePermissions">
-		権限の変更
-	</string>
-	<string name="TrackYourCamera">
-		カメラ追従
-	</string>
-	<string name="ControlYourCamera">
-		カメラのコントロール
-	</string>
-	<string name="only_user_message">
-		このセッションにいるユーザーはあなただけです。
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST]はオフラインです。
-	</string>
-	<string name="invite_message">
-		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
-	</string>
-	<string name="generic_request_error">
-		要求中にエラーが発生しました。後でもう一度試してください。
-	</string>
-	<string name="insufficient_perms_error">
-		あなたには充分な権限がありません。
-	</string>
-	<string name="session_does_not_exist_error">
-		このセッションは既に切断されています。
-	</string>
-	<string name="no_ability_error">
-		あなたにはその能力がありません。
-	</string>
-	<string name="no_ability">
-		あなたにはその能力がありません。
-	</string>
-	<string name="not_a_mod_error">
-		あなたはセッション・モデレータではありません。
-	</string>
-	<string name="muted_error">
-		グループモデレータがあなたのテキストチャットを無効化しました
-	</string>
-	<string name="add_session_event">
-		[RECIPIENT] とのチャット・セッションにユーザーを追加することができません
-	</string>
-	<string name="message_session_event">
-		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
-	</string>
-	<string name="removed_from_group">
-		あなたはグループから削除されました。
-	</string>
-	<string name="close_on_no_ability">
-		このチャット・セッションを継続することはできません
-	</string>
-			<string name="AcctTypeResident">
-				住人
-			</string>
-			<string name="AcctTypeTrial">
-				トライアル
-			</string>
-			<string name="AcctTypeCharterMember">
-				特権メンバー
-			</string>
-			<string name="AcctTypeEmployee">
-				Linden Lab従業員
-			</string>
-			<string name="PaymentInfoUsed">
-				支払い情報登録済
-			</string>
-			<string name="PaymentInfoOnFile">
-				支払い情報登録済み
-			</string>
-			<string name="NoPaymentInfoOnFile">
-				支払い情報未登録
-			</string>
-			<string name="AgeVerified">
-				年齢確認済み
-			</string>
-			<string name="NotAgeVerified">
-				年齢未確認
-			</string>
-</strings>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- This file contains strings that used to be hardcoded in the source.
+     It is only for those strings which do not belong in a floater.
+     For example, the strings used in avatar chat bubbles, and strings 
+     that are returned from one component and may appear in many places-->
+<strings>
+	<string name="SECOND_LIFE">
+		Second Life
+	</string>
+	<string name="APP_NAME">
+		Second Life
+	</string>
+	<string name="SECOND_LIFE_GRID">
+		Second Life Grid
+	</string>
+	<string name="SUPPORT_SITE">
+		Second Lifeサポートポータル
+	</string>
+	<string name="StartupDetectingHardware">
+		ハードウェアの検出中です...
+	</string>
+	<string name="StartupLoading">
+		ローディング
+	</string>
+	<string name="Fullbright">
+		明るさ全開(レガシー)
+	</string>
+	<string name="LoginInProgress">
+		ログイン中です。[APP_NAME]の表示がフリーズする場合があります。  しばらくお待ちください。
+	</string>
+	<string name="LoginInProgressNoFrozen">
+		ログイン中です...
+	</string>
+	<string name="LoginAuthenticating">
+		認証しています...
+	</string>
+	<string name="LoginMaintenance">
+		アカウント・メンテナンスを実行しています...
+	</string>
+	<string name="LoginAttempt">
+		前回のログインに失敗しました。 ログイン中です([NUMBER]回目)
+	</string>
+	<string name="LoginPrecaching">
+		ワールドをロードしています...
+	</string>
+	<string name="LoginInitializingBrowser">
+		埋め込みWebブラウザを初期化しています...
+	</string>
+	<string name="LoginInitializingMultimedia">
+		マルチメディアを初期化しています...
+	</string>
+	<string name="LoginVerifyingCache">
+		キャッシュ・ファイルを検証しています(所要時間は60~90秒)...
+	</string>
+	<string name="LoginProcessingResponse">
+		応答を処理しています...
+	</string>
+	<string name="LoginInitializingWorld">
+		ワールドを初期化しています...
+	</string>
+	<string name="LoginDecodingImages">
+		画像をデコードしています...
+	</string>
+	<string name="LoginInitializingQuicktime">
+		QuickTimeを初期化しています...
+	</string>
+	<string name="LoginQuicktimeNotFound">
+		QuickTimeが見つかりません。初期化に失敗しました。
+	</string>
+	<string name="LoginQuicktimeOK">
+		QuickTimeが正常に初期化されました。
+	</string>
+	<string name="LoginWaitingForRegionHandshake">
+		地域のハンドシェイクを待っています...
+	</string>
+	<string name="LoginConnectingToRegion">
+		地域に接続しています...
+	</string>
+	<string name="LoginDownloadingClothing">
+		服をダウンロードしています...
+	</string>
+	<string name="AgentLostConnection">
+		この地域には、問題が発生している可能性があります。  インターネット接続を確認してください。
+	</string>
+	<string name="TooltipPerson">
+		人
+	</string>
+	<string name="TooltipNoName">
+		(名前なし)
+	</string>
+	<string name="TooltipOwner">
+		オーナー:
+	</string>
+	<string name="TooltipPublic">
+		公共
+	</string>
+	<string name="TooltipIsGroup">
+		(グループ)
+	</string>
+	<string name="TooltipForSaleL$">
+		売り出し中:L$[AMOUNT]
+	</string>
+	<string name="TooltipFlagGroupBuild">
+		グループ作成
+	</string>
+	<string name="TooltipFlagNoBuild">
+		作成禁止
+	</string>
+	<string name="TooltipFlagNoEdit">
+		グループ作成
+	</string>
+	<string name="TooltipFlagNotSafe">
+		危険
+	</string>
+	<string name="TooltipFlagNoFly">
+		飛行禁止
+	</string>
+	<string name="TooltipFlagGroupScripts">
+		グループ・スクリプト
+	</string>
+	<string name="TooltipFlagNoScripts">
+		スクリプトなし
+	</string>
+	<string name="TooltipLand">
+		土地:
+	</string>
+	<string name="TooltipMustSingleDrop">
+		1つのアイテムのみをここにドラッグできます
+	</string>
+	<string name="TooltipHttpUrl">
+		クリックしてこのWebページを見る
+	</string>
+	<string name="TooltipSLURL">
+		クリックしてこの場所の情報を見る
+	</string>
+	<string name="TooltipAgentUrl">
+		クリックしてこの住人のプロフィールを見る
+	</string>
+	<string name="TooltipGroupUrl">
+		クリックしてこのグループの説明文を見る
+	</string>
+	<string name="TooltipEventUrl">
+		クリックしてこのグループの説明文を見る
+	</string>
+	<string name="TooltipClassifiedUrl">
+		クリックしてこのクラシファイド広告を見る
+	</string>
+	<string name="TooltipParcelUrl">
+		クリックしてこの区画の説明文を見る
+	</string>
+	<string name="TooltipTeleportUrl">
+		クリックしてこの場所にテレポートする
+	</string>
+	<string name="TooltipObjectIMUrl">
+		クリックしてこのオブジェクトの説明文を見る
+	</string>
+	<string name="TooltipSLAPP">
+		クリックして secondlife:// コマンドを出す
+	</string>
+	<string name="BUTTON_CLOSE_DARWIN">
+		閉じる (⌘-W)
+	</string>
+	<string name="BUTTON_CLOSE_WIN">
+		閉じる (Ctrl+W)
+	</string>
+	<string name="BUTTON_RESTORE">
+		復元
+	</string>
+	<string name="BUTTON_MINIMIZE">
+		元に戻す(縮小)
+	</string>
+	<string name="BUTTON_TEAR_OFF">
+		別ウィンドウで開く
+	</string>
+	<string name="BUTTON_DOCK">
+		ドッキング
+	</string>
+	<string name="BUTTON_UNDOCK">
+		切り離す
+	</string>
+	<string name="BUTTON_HELP">
+		ヘルプを表示
+	</string>
+	<string name="RetrievingData">
+		検索中...
+	</string>
+	<string name="ReleaseNotes">
+		リリースノート
+	</string>
+	<string name="LoadingData">
+		ロード中...
+	</string>
+	<string name="AvatarNameNobody">
+		(無人)
+	</string>
+	<string name="AvatarNameWaiting">
+		(待機中)
+	</string>
+	<string name="AvatarNameHippos">
+		(カバ)
+	</string>
+	<string name="GroupNameNone">
+		(なし)
+	</string>
+	<string name="AssetErrorNone">
+		エラーなし
+	</string>
+	<string name="AssetErrorRequestFailed">
+		資産の要求: 失敗
+	</string>
+	<string name="AssetErrorNonexistentFile">
+		資産の要求: 存在しないファイル
+	</string>
+	<string name="AssetErrorNotInDatabase">
+		資産の要求: データベースでは見つからない資産
+	</string>
+	<string name="AssetErrorEOF">
+		ファイルの終わり
+	</string>
+	<string name="AssetErrorCannotOpenFile">
+		ファイルを開くことができません
+	</string>
+	<string name="AssetErrorFileNotFound">
+		ファイルが見つかりません
+	</string>
+	<string name="AssetErrorTCPTimeout">
+		ファイル転送タイムアウトです
+	</string>
+	<string name="AssetErrorCircuitGone">
+		接続が解除されました
+	</string>
+	<string name="AssetErrorPriceMismatch">
+		ビューワとサーバーの価格が一致していません
+	</string>
+	<string name="AssetErrorUnknownStatus">
+		ステータスが不明です
+	</string>
+	<string name="texture">
+		テクスチャ
+	</string>
+	<string name="sound">
+		サウンド
+	</string>
+	<string name="calling card">
+		コーリングカード
+	</string>
+	<string name="landmark">
+		ランドマーク
+	</string>
+	<string name="legacy script">
+		レガシースクリプト
+	</string>
+	<string name="clothing">
+		衣類
+	</string>
+	<string name="object">
+		オブジェクト
+	</string>
+	<string name="note card">
+		ノートカード
+	</string>
+	<string name="folder">
+		フォルダ
+	</string>
+	<string name="root">
+		ルート
+	</string>
+	<string name="lsl2 script">
+		lsl2 スクリプト
+	</string>
+	<string name="lsl bytecode">
+		LSL バイトコード
+	</string>
+	<string name="tga texture">
+		tga テクスチャ
+	</string>
+	<string name="body part">
+		身体部位
+	</string>
+	<string name="snapshot">
+		スナップショット
+	</string>
+	<string name="lost and found">
+		紛失物
+	</string>
+	<string name="targa image">
+		targa 画像
+	</string>
+	<string name="trash">
+		ゴミ箱
+	</string>
+	<string name="jpeg image">
+		jpeg 画像
+	</string>
+	<string name="animation">
+		アニメーション
+	</string>
+	<string name="gesture">
+		ジェスチャー
+	</string>
+	<string name="simstate">
+		統計
+	</string>
+	<string name="favorite">
+		お気に入り
+	</string>
+	<string name="symbolic link">
+		リンク
+	</string>
+	<string name="AvatarAway">
+		退席中
+	</string>
+	<string name="AvatarBusy">
+		取り込み中
+	</string>
+	<string name="AvatarMuted">
+		ミュート
+	</string>
+	<string name="anim_express_afraid">
+		怖れ
+	</string>
+	<string name="anim_express_anger">
+		怒り
+	</string>
+	<string name="anim_away">
+		退席中
+	</string>
+	<string name="anim_backflip">
+		後ろ宙返り
+	</string>
+	<string name="anim_express_laugh">
+		大笑い
+	</string>
+	<string name="anim_express_toothsmile">
+		満面の笑顔
+	</string>
+	<string name="anim_blowkiss">
+		投げキッス
+	</string>
+	<string name="anim_express_bored">
+		退屈
+	</string>
+	<string name="anim_bow">
+		おじぎ
+	</string>
+	<string name="anim_clap">
+		拍手
+	</string>
+	<string name="anim_courtbow">
+		深いおじぎ
+	</string>
+	<string name="anim_express_cry">
+		泣く
+	</string>
+	<string name="anim_dance1">
+		ダンス1
+	</string>
+	<string name="anim_dance2">
+		ダンス2
+	</string>
+	<string name="anim_dance3">
+		ダンス3
+	</string>
+	<string name="anim_dance4">
+		ダンス4
+	</string>
+	<string name="anim_dance5">
+		ダンス5
+	</string>
+	<string name="anim_dance6">
+		ダンス6
+	</string>
+	<string name="anim_dance7">
+		ダンス7
+	</string>
+	<string name="anim_dance8">
+		ダンス8
+	</string>
+	<string name="anim_express_disdain">
+		侮蔑
+	</string>
+	<string name="anim_drink">
+		酔っぱらう
+	</string>
+	<string name="anim_express_embarrased">
+		困惑
+	</string>
+	<string name="anim_angry_fingerwag">
+		指を振る
+	</string>
+	<string name="anim_fist_pump">
+		ガッツポーズ
+	</string>
+	<string name="anim_yoga_float">
+		ヨガ浮遊
+	</string>
+	<string name="anim_express_frown">
+		しかめっ面
+	</string>
+	<string name="anim_impatient">
+		いらいらする
+	</string>
+	<string name="anim_jumpforjoy">
+		飛び上がって喜ぶ
+	</string>
+	<string name="anim_kissmybutt">
+		挑発ポーズ
+	</string>
+	<string name="anim_express_kiss">
+		キス
+	</string>
+	<string name="anim_laugh_short">
+		笑う
+	</string>
+	<string name="anim_musclebeach">
+		力こぶを見せる
+	</string>
+	<string name="anim_no_unhappy">
+		不満げに否定する
+	</string>
+	<string name="anim_no_head">
+		否定する
+	</string>
+	<string name="anim_nyanya">
+		冷やかす
+	</string>
+	<string name="anim_punch_onetwo">
+		ワンツー・パンチ
+	</string>
+	<string name="anim_express_open_mouth">
+		口を開けて驚く
+	</string>
+	<string name="anim_peace">
+		ピース・サイン
+	</string>
+	<string name="anim_point_you">
+		他人を指差す
+	</string>
+	<string name="anim_point_me">
+		自分を指差す
+	</string>
+	<string name="anim_punch_l">
+		左パンチ
+	</string>
+	<string name="anim_punch_r">
+		右パンチ
+	</string>
+	<string name="anim_rps_countdown">
+		じゃんけんポーズ
+	</string>
+	<string name="anim_rps_paper">
+		パー
+	</string>
+	<string name="anim_rps_rock">
+		グー
+	</string>
+	<string name="anim_rps_scissors">
+		チョキ
+	</string>
+	<string name="anim_express_repulsed">
+		嫌悪感
+	</string>
+	<string name="anim_kick_roundhouse_r">
+		まわし蹴り
+	</string>
+	<string name="anim_express_sad">
+		悲しむ
+	</string>
+	<string name="anim_salute">
+		敬礼する
+	</string>
+	<string name="anim_shout">
+		叫ぶ
+	</string>
+	<string name="anim_express_shrug">
+		肩をすくめる
+	</string>
+	<string name="anim_express_smile">
+		微笑む
+	</string>
+	<string name="anim_smoke_idle">
+		たばこをくゆらす
+	</string>
+	<string name="anim_smoke_inhale">
+		たばこを吸う
+	</string>
+	<string name="anim_smoke_throw_down">
+		たばこを捨てる
+	</string>
+	<string name="anim_express_surprise">
+		驚く
+	</string>
+	<string name="anim_sword_strike_r">
+		剣で斬りつける
+	</string>
+	<string name="anim_angry_tantrum">
+		じだんだを踏む
+	</string>
+	<string name="anim_express_tongue_out">
+		舌を出す
+	</string>
+	<string name="anim_hello">
+		手を振る
+	</string>
+	<string name="anim_whisper">
+		小声で話す
+	</string>
+	<string name="anim_whistle">
+		口笛を吹く
+	</string>
+	<string name="anim_express_wink">
+		ウィンク
+	</string>
+	<string name="anim_wink_hollywood">
+		ウィンク(ハリウッド)
+	</string>
+	<string name="anim_express_worry">
+		心配する
+	</string>
+	<string name="anim_yes_happy">
+		笑顔で頷く
+	</string>
+	<string name="anim_yes_head">
+		頷く
+	</string>
+	<string name="texture_loading">
+		ロード中...
+	</string>
+	<string name="worldmap_offline">
+		オフライン
+	</string>
+	<string name="Ok">
+		OK
+	</string>
+	<string name="Premature end of file">
+		不完全なファイル
+	</string>
+	<string name="ST_NO_JOINT">
+		ROOT または JOINT が見つかりません
+	</string>
+	<string name="whisper">
+		のささやき:
+	</string>
+	<string name="shout">
+		の叫び:
+	</string>
+	<string name="ringing">
+		インワールドボイスチャットに接続中...
+	</string>
+	<string name="connected">
+		接続しました
+	</string>
+	<string name="unavailable">
+		あなたの現在のロケーションでは、ボイスを利用できません。
+	</string>
+	<string name="hang_up">
+		インワールドボイスチャットの通話が切断されました
+	</string>
+	<string name="ScriptQuestionCautionChatGranted">
+		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を許可しました: [PERMISSIONS]
+	</string>
+	<string name="ScriptQuestionCautionChatDenied">
+		[REGIONNAME]の[REGIONPOS]という場所にある「[OWNERNAME]」所有の「[OBJECTNAME]」というオブジェクトは、次の権限を拒否しました: [PERMISSIONS]
+	</string>
+	<string name="ScriptTakeMoney">
+		リンデンドル(L$)を支払う
+	</string>
+	<string name="ActOnControlInputs">
+		制御入力に基づいて行動
+	</string>
+	<string name="RemapControlInputs">
+		制御入力のリマップ
+	</string>
+	<string name="AnimateYourAvatar">
+		アバターへのアニメーション動作
+	</string>
+	<string name="AttachToYourAvatar">
+		アバターに装着
+	</string>
+	<string name="ReleaseOwnership">
+		所有権を解放し公のものとする
+	</string>
+	<string name="LinkAndDelink">
+		他のオブジェクトのリンクとリンク解除
+	</string>
+	<string name="AddAndRemoveJoints">
+		他のオブジェクトとのジョイントの追加と削除
+	</string>
+	<string name="ChangePermissions">
+		権限の変更
+	</string>
+	<string name="TrackYourCamera">
+		カメラ追従
+	</string>
+	<string name="ControlYourCamera">
+		カメラのコントロール
+	</string>
+	<string name="SIM_ACCESS_PG">
+		PG
+	</string>
+	<string name="SIM_ACCESS_MATURE">
+		Mature
+	</string>
+	<string name="SIM_ACCESS_ADULT">
+		Adult
+	</string>
+	<string name="SIM_ACCESS_DOWN">
+		オフライン
+	</string>
+	<string name="SIM_ACCESS_MIN">
+		不明
+	</string>
+	<string name="land_type_unknown">
+		(不明)
+	</string>
+	<string name="all_files">
+		全てのファイル
+	</string>
+	<string name="sound_files">
+		サウンド
+	</string>
+	<string name="animation_files">
+		アニメーション
+	</string>
+	<string name="image_files">
+		画像
+	</string>
+	<string name="save_file_verb">
+		保存
+	</string>
+	<string name="load_file_verb">
+		ロード
+	</string>
+	<string name="targa_image_files">
+		Targa画像
+	</string>
+	<string name="bitmap_image_files">
+		ビットマップ画像
+	</string>
+	<string name="avi_movie_file">
+		AVIムービーファイル
+	</string>
+	<string name="xaf_animation_file">
+		XAFアニメーションファイル
+	</string>
+	<string name="xml_file">
+		XMLファイル
+	</string>
+	<string name="dot_raw_file">
+		RAWファイル
+	</string>
+	<string name="compressed_image_files">
+		圧縮画像
+	</string>
+	<string name="load_files">
+		ファイルのロード
+	</string>
+	<string name="choose_the_directory">
+		参照
+	</string>
+	<string name="AvatarSetNotAway">
+		一時退席中を解除
+	</string>
+	<string name="AvatarSetAway">
+		一時退席中
+	</string>
+	<string name="AvatarSetNotBusy">
+		取り込み中を解除
+	</string>
+	<string name="AvatarSetBusy">
+		取り込み中
+	</string>
+	<string name="shape">
+		シェイプ
+	</string>
+	<string name="skin">
+		スキン
+	</string>
+	<string name="hair">
+		髪型
+	</string>
+	<string name="eyes">
+		ç›®
+	</string>
+	<string name="shirt">
+		シャツ
+	</string>
+	<string name="pants">
+		ズボン
+	</string>
+	<string name="shoes">
+		靴
+	</string>
+	<string name="socks">
+		靴下
+	</string>
+	<string name="jacket">
+		上着
+	</string>
+	<string name="gloves">
+		手袋
+	</string>
+	<string name="undershirt">
+		下着シャツ
+	</string>
+	<string name="underpants">
+		下着パンツ
+	</string>
+	<string name="skirt">
+		スカート
+	</string>
+	<string name="invalid">
+		無効
+	</string>
+	<string name="BodyPartsRightArm">
+		右腕
+	</string>
+	<string name="BodyPartsHead">
+		é ­
+	</string>
+	<string name="BodyPartsLeftArm">
+		左腕
+	</string>
+	<string name="BodyPartsLeftLeg">
+		左脚
+	</string>
+	<string name="BodyPartsTorso">
+		é ­
+	</string>
+	<string name="BodyPartsRightLeg">
+		右脚
+	</string>
+	<string name="GraphicsQualityLow">
+		低
+	</string>
+	<string name="GraphicsQualityMid">
+		中
+	</string>
+	<string name="GraphicsQualityHigh">
+		高
+	</string>
+	<string name="LeaveMouselook">
+		ESC キーを押してワールドビューに戻る
+	</string>
+	<string name="InventoryNoMatchingItems">
+		一致するアイテムが持ち物にありませんでした
+	</string>
+	<string name="InventoryNoTexture">
+		持ち物内にこのテクスチャのコピーがありません
+	</string>
+	<string name="LoadingContents">
+		コンテンツをロード中です...
+	</string>
+	<string name="NoContents">
+		コンテンツなし
+	</string>
+	<string name="InvFolder My Inventory">
+		私の持ち物
+	</string>
+	<string name="InvFolder My Favorites">
+		お気に入り
+	</string>
+	<string name="InvFolder Library">
+		ライブラリ
+	</string>
+	<string name="InvFolder Textures">
+		テクスチャ
+	</string>
+	<string name="InvFolder Sounds">
+		サウンド
+	</string>
+	<string name="InvFolder Calling Cards">
+		コーリングカード
+	</string>
+	<string name="InvFolder Landmarks">
+		ランドマーク
+	</string>
+	<string name="InvFolder Scripts">
+		スクリプト
+	</string>
+	<string name="InvFolder Clothing">
+		衣類
+	</string>
+	<string name="InvFolder Objects">
+		オブジェクト
+	</string>
+	<string name="InvFolder Notecards">
+		ノートカード
+	</string>
+	<string name="InvFolder New Folder">
+		新規フォルダ
+	</string>
+	<string name="InvFolder Inventory">
+		持ち物
+	</string>
+	<string name="InvFolder Uncompressed Images">
+		圧縮されていない画像
+	</string>
+	<string name="InvFolder Body Parts">
+		身体部位
+	</string>
+	<string name="InvFolder Trash">
+		ゴミ箱
+	</string>
+	<string name="InvFolder Photo Album">
+		フォトアルバム
+	</string>
+	<string name="InvFolder Lost And Found">
+		紛失物
+	</string>
+	<string name="InvFolder Uncompressed Sounds">
+		圧縮されていないサウンド
+	</string>
+	<string name="InvFolder Animations">
+		アニメーション
+	</string>
+	<string name="InvFolder Gestures">
+		ジェスチャー
+	</string>
+	<string name="InvFolder favorite">
+		お気に入り
+	</string>
+	<string name="InvFolder Current Outfit">
+		着用中のアウトフィット
+	</string>
+	<string name="InvFolder My Outfits">
+		私のアウトフィット
+	</string>
+	<string name="InvFolder Friends">
+		フレンド
+	</string>
+	<string name="InvFolder All">
+		全員
+	</string>
+	<string name="Buy">
+		買う
+	</string>
+	<string name="BuyforL$">
+		Buy for L$
+	</string>
+	<string name="Stone">
+		石
+	</string>
+	<string name="Metal">
+		金属
+	</string>
+	<string name="Glass">
+		ガラス
+	</string>
+	<string name="Wood">
+		木
+	</string>
+	<string name="Flesh">
+		肌
+	</string>
+	<string name="Plastic">
+		プラスチック
+	</string>
+	<string name="Rubber">
+		ゴム
+	</string>
+	<string name="Light">
+		ライト
+	</string>
+	<string name="KBShift">
+		Shift
+	</string>
+	<string name="KBCtrl">
+		Ctrl
+	</string>
+	<string name="Chest">
+		胸部
+	</string>
+	<string name="Skull">
+		é ­è“‹
+	</string>
+	<string name="Left Shoulder">
+		左肩
+	</string>
+	<string name="Right Shoulder">
+		右肩
+	</string>
+	<string name="Left Hand">
+		左手
+	</string>
+	<string name="Right Hand">
+		右手
+	</string>
+	<string name="Left Foot">
+		左足
+	</string>
+	<string name="Right Foot">
+		右足
+	</string>
+	<string name="Spine">
+		背骨
+	</string>
+	<string name="Pelvis">
+		骨盤
+	</string>
+	<string name="Mouth">
+		口
+	</string>
+	<string name="Chin">
+		あご
+	</string>
+	<string name="Left Ear">
+		左耳
+	</string>
+	<string name="Right Ear">
+		右耳
+	</string>
+	<string name="Left Eyeball">
+		左目眼球
+	</string>
+	<string name="Right Eyeball">
+		右目眼球
+	</string>
+	<string name="Nose">
+		é¼»
+	</string>
+	<string name="R Upper Arm">
+		右上腕
+	</string>
+	<string name="R Forearm">
+		右前腕
+	</string>
+	<string name="L Upper Arm">
+		左上腕
+	</string>
+	<string name="L Forearm">
+		左前腕
+	</string>
+	<string name="Right Hip">
+		右腰
+	</string>
+	<string name="R Upper Leg">
+		右上脚
+	</string>
+	<string name="R Lower Leg">
+		右下脚
+	</string>
+	<string name="Left Hip">
+		左腰
+	</string>
+	<string name="L Upper Leg">
+		左上脚
+	</string>
+	<string name="L Lower Leg">
+		左下脚
+	</string>
+	<string name="Stomach">
+		è…¹
+	</string>
+	<string name="Left Pec">
+		左胸筋
+	</string>
+	<string name="Right Pec">
+		右胸筋
+	</string>
+	<string name="YearsMonthsOld">
+		[AGEYEARS] [AGEMONTHS]
+	</string>
+	<string name="YearsOld">
+		[AGEYEARS]
+	</string>
+	<string name="MonthsOld">
+		[AGEMONTHS]
+	</string>
+	<string name="WeeksOld">
+		[AGEWEEKS]
+	</string>
+	<string name="DaysOld">
+		[AGEDAYS]
+	</string>
+	<string name="TodayOld">
+		今日参加
+	</string>
+	<string name="AgeYearsA">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeYearsB">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeYearsC">
+		[COUNT] å¹´
+	</string>
+	<string name="AgeMonthsA">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeMonthsB">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeMonthsC">
+		[COUNT] ヶ月
+	</string>
+	<string name="AgeWeeksA">
+		[COUNT] 週間
+	</string>
+	<string name="AgeWeeksB">
+		[COUNT] 週間
+	</string>
+	<string name="AgeWeeksC">
+		[COUNT] 週間
+	</string>
+	<string name="AgeDaysA">
+		[COUNT] 日間
+	</string>
+	<string name="AgeDaysB">
+		[COUNT] 日間
+	</string>
+	<string name="AgeDaysC">
+		[COUNT] 日間
+	</string>
+	<string name="AcctTypeResident">
+		住人
+	</string>
+	<string name="AcctTypeTrial">
+		トライアル
+	</string>
+	<string name="AcctTypeCharterMember">
+		特権メンバー
+	</string>
+	<string name="AcctTypeEmployee">
+		Linden Lab従業員
+	</string>
+	<string name="PaymentInfoUsed">
+		支払い情報登録済
+	</string>
+	<string name="PaymentInfoOnFile">
+		支払い情報登録済み
+	</string>
+	<string name="NoPaymentInfoOnFile">
+		支払い情報未登録
+	</string>
+	<string name="AgeVerified">
+		年齢確認済み
+	</string>
+	<string name="NotAgeVerified">
+		年齢未確認
+	</string>
+	<string name="Center 2">
+		中心 2
+	</string>
+	<string name="Top Right">
+		右上
+	</string>
+	<string name="Top">
+		上部
+	</string>
+	<string name="Top Left">
+		左上
+	</string>
+	<string name="Center">
+		中心
+	</string>
+	<string name="Bottom Left">
+		Bottom Left
+	</string>
+	<string name="Bottom">
+		Bottom
+	</string>
+	<string name="Bottom Right">
+		Bottom Right
+	</string>
+	<string name="CompileQueueDownloadedCompiling">
+		ダウンロード完了、コンパイル中
+	</string>
+	<string name="CompileQueueScriptNotFound">
+		サーバー上にスクリプトが見つかりません。
+	</string>
+	<string name="CompileQueueProblemDownloading">
+		ダウンロードに問題があります
+	</string>
+	<string name="CompileQueueInsufficientPermDownload">
+		権限不足のためスクリプトをダウンロードできません。
+	</string>
+	<string name="CompileQueueInsufficientPermFor">
+		権限不足:
+	</string>
+	<string name="CompileQueueUnknownFailure">
+		原因不明の失敗によりダウンロードができません
+	</string>
+	<string name="CompileQueueTitle">
+		リコンパイル進行
+	</string>
+	<string name="CompileQueueStart">
+		リコンパイル
+	</string>
+	<string name="ResetQueueTitle">
+		進行をリセット
+	</string>
+	<string name="ResetQueueStart">
+		リセット
+	</string>
+	<string name="RunQueueTitle">
+		実行を続けるよう設定
+	</string>
+	<string name="RunQueueStart">
+		実行中に設定
+	</string>
+	<string name="NotRunQueueTitle">
+		実行を停止するよう設定
+	</string>
+	<string name="NotRunQueueStart">
+		実行停止に設定
+	</string>
+	<string name="CompileSuccessful">
+		コンパイルが完了しました!
+	</string>
+	<string name="CompileSuccessfulSaving">
+		コンパイル完了、保存中です...
+	</string>
+	<string name="SaveComplete">
+		保存完了。
+	</string>
+	<string name="ObjectOutOfRange">
+		スクリプト(オブジェクトが範囲外にあります)
+	</string>
+	<string name="GodToolsObjectOwnedBy">
+		[OWNER] 所有のオブジェクト「[OBJECT]」
+	</string>
+	<string name="GroupsNone">
+		なし
+	</string>
+	<string name="Unknown">
+		(不明)
+	</string>
+	<string name="Balance">
+		残高
+	</string>
+	<string name="Credits">
+		収入
+	</string>
+	<string name="Debits">
+		支出
+	</string>
+	<string name="Total">
+		合計
+	</string>
+	<string name="NoGroupDataFound">
+		グループのデータが見つかりませんでした
+	</string>
+	<string name="IMParentEstate">
+		parent estate
+	</string>
+	<string name="IMMainland">
+		メインランド
+	</string>
+	<string name="IMTeen">
+		ティーン
+	</string>
+	<string name="RegionInfoError">
+		エラー
+	</string>
+	<string name="RegionInfoAllEstatesOwnedBy">
+		[OWNER] が所有するすべての不動産
+	</string>
+	<string name="RegionInfoAllEstatesYouOwn">
+		あなたが所有するすべての不動産
+	</string>
+	<string name="RegionInfoAllEstatesYouManage">
+		あなたが [OWNER] のために管理するすべての不動産
+	</string>
+	<string name="RegionInfoAllowedResidents">
+		許可された住人: ([ALLOWEDAGENTS] 人、最大 [MAXACCESS] 人)
+	</string>
+	<string name="RegionInfoAllowedGroups">
+		許可されたグループ: ([ALLOWEDGROUPS]、最大 [MAXACCESS] グループ)
+	</string>
+	<string name="CursorPos">
+		[LINE] 行目、[COLUMN] 列目
+	</string>
+	<string name="PanelDirCountFound">
+		[COUNT] 件見つかりました
+	</string>
+	<string name="PanelContentsNewScript">
+		新規スクリプト
+	</string>
+	<string name="MuteByName">
+		(名称別)
+	</string>
+	<string name="MuteAgent">
+		(住人)
+	</string>
+	<string name="MuteObject">
+		(オブジェクト)
+	</string>
+	<string name="MuteGroup">
+		(グループ)
+	</string>
+	<string name="RegionNoCovenant">
+		この不動産には約款がありません。
+	</string>
+	<string name="RegionNoCovenantOtherOwner">
+		この不動産には約款がありません。 この不動産上の土地は不動産所有者により販売され、Linden Lab では販売していません。  販売に関するお問い合わせは、不動産所有者までお願い致します。
+	</string>
+	<string name="covenant_last_modified">
+		最終修正日:
+	</string>
+	<string name="GroupOwned">
+		グループ所有
+	</string>
+	<string name="Public">
+		パブリック
+	</string>
+	<string name="ClassifiedClicksTxt">
+		クリック数: [TELEPORT] テレポート、 [MAP] 地図、 [PROFILE] プロフィール
+	</string>
+	<string name="ClassifiedUpdateAfterPublish">
+		(掲載後更新)
+	</string>
+	<string name="GroupVoteYes">
+		はい
+	</string>
+	<string name="GroupVoteNo">
+		いいえ
+	</string>
+	<string name="GroupVoteNoActiveProposals">
+		継続中の提案は現在ありません
+	</string>
+	<string name="GroupVoteNoArchivedProposals">
+		提案のアーカイブは現在ありません
+	</string>
+	<string name="GroupVoteRetrievingArchivedProposals">
+		提案のアーカイブを取得中です
+	</string>
+	<string name="GroupVoteRetrievingActiveProposals">
+		継続中の提案を取得中です
+	</string>
+	<string name="MultiPreviewTitle">
+		プレビュー
+	</string>
+	<string name="MultiPropertiesTitle">
+		Properties
+	</string>
+	<string name="InvOfferAnObjectNamed">
+		オブジェクト名
+	</string>
+	<string name="InvOfferOwnedByGroup">
+		所有グループ
+	</string>
+	<string name="InvOfferOwnedByUnknownGroup">
+		不明なグループ所有
+	</string>
+	<string name="InvOfferOwnedBy">
+		所有者
+	</string>
+	<string name="InvOfferOwnedByUnknownUser">
+		不明なユーザー所有
+	</string>
+	<string name="InvOfferGaveYou">
+		gave you
+	</string>
+	<string name="InvOfferYouDecline">
+		You decline
+	</string>
+	<string name="InvOfferFrom">
+		from
+	</string>
+	<string name="GroupMoneyTotal">
+		合計
+	</string>
+	<string name="GroupMoneyBought">
+		bought
+	</string>
+	<string name="GroupMoneyPaidYou">
+		paid you
+	</string>
+	<string name="GroupMoneyPaidInto">
+		paid into
+	</string>
+	<string name="GroupMoneyBoughtPassTo">
+		bought pass to
+	</string>
+	<string name="GroupMoneyPaidFeeForEvent">
+		paid fee for event
+	</string>
+	<string name="GroupMoneyPaidPrizeForEvent">
+		paid prize for event
+	</string>
+	<string name="GroupMoneyBalance">
+		残高
+	</string>
+	<string name="GroupMoneyCredits">
+		収入
+	</string>
+	<string name="GroupMoneyDebits">
+		支出
+	</string>
+	<string name="ViewerObjectContents">
+		中身
+	</string>
+	<string name="AcquiredItems">
+		取得アイテム
+	</string>
+	<string name="Cancel">
+		キャンセル
+	</string>
+	<string name="UploadingCosts">
+		%s のアップロード代金:
+	</string>
+	<string name="UnknownFileExtension">
+		不明の拡張子: %s
+使用可能な拡張子: .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
+	</string>
+	<string name="AddLandmarkNavBarMenu">
+		ランドマークを追加...
+	</string>
+	<string name="EditLandmarkNavBarMenu">
+		ランドマークを編集...
+	</string>
+	<string name="accel-mac-control">
+		⌃
+	</string>
+	<string name="accel-mac-command">
+		⌘
+	</string>
+	<string name="accel-mac-option">
+		⌥
+	</string>
+	<string name="accel-mac-shift">
+		⇧
+	</string>
+	<string name="accel-win-control">
+		Ctrl+
+	</string>
+	<string name="accel-win-alt">
+		Alt+
+	</string>
+	<string name="accel-win-shift">
+		Shift+
+	</string>
+	<string name="FileSaved">
+		ファイルが保存されました
+	</string>
+	<string name="Receiving">
+		取得中
+	</string>
+	<string name="AM">
+		AM
+	</string>
+	<string name="PM">
+		PM
+	</string>
+	<string name="PST">
+		米国西部標準時
+	</string>
+	<string name="PDT">
+		米国西部夏時間
+	</string>
+	<string name="Forward">
+		前
+	</string>
+	<string name="Left">
+		å·¦
+	</string>
+	<string name="Right">
+		右
+	</string>
+	<string name="Back">
+		後ろ
+	</string>
+	<string name="North">
+		北
+	</string>
+	<string name="South">
+		南
+	</string>
+	<string name="West">
+		西
+	</string>
+	<string name="East">
+		東
+	</string>
+	<string name="Up">
+		上
+	</string>
+	<string name="Down">
+		下
+	</string>
+	<string name="Any Category">
+		全カテゴリ
+	</string>
+	<string name="Shopping">
+		ショッピング
+	</string>
+	<string name="Land Rental">
+		土地のレンタル
+	</string>
+	<string name="Property Rental">
+		建物のレンタル
+	</string>
+	<string name="Special Attraction">
+		特別アトラクション
+	</string>
+	<string name="New Products">
+		新製品
+	</string>
+	<string name="Employment">
+		雇用
+	</string>
+	<string name="Wanted">
+		求む
+	</string>
+	<string name="Service">
+		サービス
+	</string>
+	<string name="Personal">
+		パーソナル
+	</string>
+	<string name="None">
+		なし
+	</string>
+	<string name="Linden Location">
+		Linden所在地
+	</string>
+	<string name="Adult">
+		Adult
+	</string>
+	<string name="Arts&amp;Culture">
+		アートとカルチャー
+	</string>
+	<string name="Business">
+		ビジネス
+	</string>
+	<string name="Educational">
+		教育的
+	</string>
+	<string name="Gaming">
+		ゲーム
+	</string>
+	<string name="Hangout">
+		たまり場
+	</string>
+	<string name="Newcomer Friendly">
+		新住人に好意的
+	</string>
+	<string name="Parks&amp;Nature">
+		公園と自然
+	</string>
+	<string name="Residential">
+		住宅用
+	</string>
+	<string name="Stage">
+		ステージ
+	</string>
+	<string name="Other">
+		その他
+	</string>
+	<string name="Any">
+		全員
+	</string>
+	<string name="You">
+		あなた
+	</string>
+	<string name=":">
+		:
+	</string>
+	<string name=",">
+		,
+	</string>
+	<string name="...">
+		...
+	</string>
+	<string name="***">
+		***
+	</string>
+	<string name="(">
+		(
+	</string>
+	<string name=")">
+		)
+	</string>
+	<string name=".">
+		.
+	</string>
+	<string name="&apos;">
+		&apos;
+	</string>
+	<string name="---">
+		---
+	</string>
+	<string name="MBCmdLineError">
+		コマンドラインにエラーが見つかりました。
+リンク先を参照してください: http://wiki.secondlife.com/wiki/Client_parameters
+エラー:
+	</string>
+	<string name="MBCmdLineUsg">
+		[APP_NAME] コマンドライン使用:
+	</string>
+	<string name="MBUnableToAccessFile">
+		[APP_NAME] は必要なファイルにアクセスできません。
+
+複数のコピーを実行中か、ファイルが既に開いているとあなたのシステムが誤認識している可能性があります。
+このメッセージが何度も出る場合は、コンピューターを再起動してもう一度お試しください。
+それでも問題が続く場合、[APP_NAME] を完全にアンインストールして、再インストールをしてください。
+	</string>
+	<string name="MBFatalError">
+		致命的なエラー
+	</string>
+	<string name="MBRequiresAltiVec">
+		[APP_NAME] は、AltiVec搭載のプロセッサが必要です。(G4 以降)
+	</string>
+	<string name="MBAlreadyRunning">
+		[APP_NAME] はすでに実行中です。
+最小化されたプログラムのコピーをタスクバーで確認してください。
+このメッセージが何度も出る場合はコンピューターを再起動してください。
+	</string>
+	<string name="MBFrozenCrashed">
+		[APP_NAME] は前回の実行時にフリーズしています。
+クラッシュ報告を送信しますか?
+	</string>
+	<string name="MBAlert">
+		警告
+	</string>
+	<string name="MBNoDirectX">
+		[APP_NAME] は DirectX 9.0b 及びそれ以降のバージョンを検出することができませんでした。
+[APP_NAME] は DirectX を使用して安定性の問題、低パフォーマンス、クラッシュ等悪影響を与えるハードウェアや古いドライバを検出します。  DirectX 9.0b がなくても [APP_NAME] を実行できますが、DirectX 9.0bとのご使用を強く推奨します。
+
+続けますか?
+	</string>
+	<string name="MBWarning">
+		警告
+	</string>
+	<string name="MBNoAutoUpdate">
+		自動更新は現在 Linux には対応していません。
+www.secondlife.com から最新バージョンをダウンロードしてください。
+	</string>
+	<string name="MBRegClassFailed">
+		RegisterClass 失敗
+	</string>
+	<string name="MBError">
+		エラー
+	</string>
+	<string name="MBFullScreenErr">
+		[WIDTH] x [HEIGHT] では全画面で実行することができません。
+ウィンドウモードで実行中です。
+	</string>
+	<string name="MBDestroyWinFailed">
+		シャットダウンエラー(DestroyWindow() 失敗)
+	</string>
+	<string name="MBShutdownErr">
+		シャットダウンエラー
+	</string>
+	<string name="MBDevContextErr">
+		GL ディバイスコンテキストが作れません
+	</string>
+	<string name="MBPixelFmtErr">
+		適切なピクセル形式が見つかりません
+	</string>
+	<string name="MBPixelFmtDescErr">
+		ピクセル形式情報が見つかりません
+	</string>
+	<string name="MBTrueColorWindow">
+		[APP_NAME] をウィンドウで実行するには、True Color(32ビット)が必要です。
+「コントロールパネル」>「画面」>「設定」に行き、「最高 (32 ビット)」に設定してください。
+全画面を選択した場合、実行時に [APP_NAME] は自動的にスクリーンを調整します。
+	</string>
+	<string name="MBAlpha">
+		[APP_NAME] は 8 ビットのアルファチャンネルを取得できないため実行できません。  通常ビデオカードのドライバの問題で起こります。
+お使いのコンピューターに最新のビデオカードドライバがインストールされているかご確認ください。
+また、「コントロールパネル」>「画面」>「設定」内で、モニターが「最高 (32ビット)」に設定されていることもご確認ください。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</string>
+	<string name="MBPixelFmtSetErr">
+		ピクセル形式が設定できません
+	</string>
+	<string name="MBGLContextErr">
+		GL レンダーコンテキストが作れません
+	</string>
+	<string name="MBGLContextActErr">
+		GL レンダーコンテキストをアクティベートできません
+	</string>
+	<string name="MBVideoDrvErr">
+		お使いのコンピューターのビデオカードドライバが正常にインストールできなかった、または古いかサポート対象外のため、[APP_NAME] は実行できません。 最新のビデオカードドライバがインストールされているのを確認し、されている場合は再インストールをお試しください。
+
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+	</string>
+	<string name="5 O&apos;Clock Shadow">
+		うっすらとしたヒゲ
+	</string>
+	<string name="All White">
+		真っ白
+	</string>
+	<string name="Anime Eyes">
+		アニメ風の目
+	</string>
+	<string name="Arced">
+		アーチ
+	</string>
+	<string name="Arm Length">
+		腕の長さ
+	</string>
+	<string name="Attached">
+		小
+	</string>
+	<string name="Attached Earlobes">
+		耳たぶ
+	</string>
+	<string name="Back Bangs">
+		後ろにかき上げた前髪
+	</string>
+	<string name="Back Bangs Down">
+		後ろにかき上げて下ろした前髪
+	</string>
+	<string name="Back Bangs Up">
+		後ろにかき上げて持ち上げた前髪
+	</string>
+	<string name="Back Fringe">
+		後ろ髪の毛先
+	</string>
+	<string name="Back Hair">
+		後ろ髪
+	</string>
+	<string name="Back Hair Down">
+		下ろした後ろ髪
+	</string>
+	<string name="Back Hair Up">
+		アップにした後ろ髪
+	</string>
+	<string name="Baggy">
+		たるんでいる
+	</string>
+	<string name="Bangs">
+		前髪
+	</string>
+	<string name="Bangs Down">
+		下ろした前髪
+	</string>
+	<string name="Bangs Up">
+		持ち上げた前髪
+	</string>
+	<string name="Beady Eyes">
+		ビーズのような目
+	</string>
+	<string name="Belly Size">
+		お腹の大きさ
+	</string>
+	<string name="Big">
+		大
+	</string>
+	<string name="Big Butt">
+		大
+	</string>
+	<string name="Big Eyeball">
+		大きい眼球
+	</string>
+	<string name="Big Hair Back">
+		髪の大部分: 後ろ
+	</string>
+	<string name="Big Hair Front">
+		髪の大部分: 前
+	</string>
+	<string name="Big Hair Top">
+		髪の大部分: 上部
+	</string>
+	<string name="Big Head">
+		大
+	</string>
+	<string name="Big Pectorals">
+		大
+	</string>
+	<string name="Big Spikes">
+		とげあり
+	</string>
+	<string name="Black">
+		é»’
+	</string>
+	<string name="Blonde">
+		ブロンド
+	</string>
+	<string name="Blonde Hair">
+		ブロンドの髪
+	</string>
+	<string name="Blush">
+		チーク
+	</string>
+	<string name="Blush Color">
+		チークカラー
+	</string>
+	<string name="Blush Opacity">
+		チークの濃さ
+	</string>
+	<string name="Body Definition">
+		体の精細度
+	</string>
+	<string name="Body Fat">
+		体脂肪
+	</string>
+	<string name="Body Freckles">
+		体のしみ・そばかす
+	</string>
+	<string name="Body Thick">
+		骨太
+	</string>
+	<string name="Body Thickness">
+		体の厚み
+	</string>
+	<string name="Body Thin">
+		細め
+	</string>
+	<string name="Bow Legged">
+		外股
+	</string>
+	<string name="Breast Buoyancy">
+		胸の重力
+	</string>
+	<string name="Breast Cleavage">
+		胸の谷間
+	</string>
+	<string name="Breast Size">
+		胸の大きさ
+	</string>
+	<string name="Bridge Width">
+		両目の間の幅
+	</string>
+	<string name="Broad">
+		広
+	</string>
+	<string name="Brow Size">
+		眉毛の大きさ
+	</string>
+	<string name="Bug Eyes">
+		Bug Eyes
+	</string>
+	<string name="Bugged Eyes">
+		突き出た目
+	</string>
+	<string name="Bulbous">
+		だんご
+	</string>
+	<string name="Bulbous Nose">
+		だんご鼻
+	</string>
+	<string name="Bushy Eyebrows">
+		太
+	</string>
+	<string name="Bushy Hair">
+		ぼさぼさヘア
+	</string>
+	<string name="Butt Size">
+		お尻の大きさ
+	</string>
+	<string name="bustle skirt">
+		後ろの膨らみ
+	</string>
+	<string name="no bustle">
+		膨らみなし
+	</string>
+	<string name="more bustle">
+		膨らみ大
+	</string>
+	<string name="Chaplin">
+		Chaplin
+	</string>
+	<string name="Cheek Bones">
+		ほお骨
+	</string>
+	<string name="Chest Size">
+		胸部の大きさ
+	</string>
+	<string name="Chin Angle">
+		あごの角度
+	</string>
+	<string name="Chin Cleft">
+		あごの先の割れ具合
+	</string>
+	<string name="Chin Curtains">
+		あごに沿ったひげ
+	</string>
+	<string name="Chin Depth">
+		あごの長さ
+	</string>
+	<string name="Chin Heavy">
+		あごに重点
+	</string>
+	<string name="Chin In">
+		ひいたあご
+	</string>
+	<string name="Chin Out">
+		突き出たあご
+	</string>
+	<string name="Chin-Neck">
+		あごと首
+	</string>
+	<string name="Clear">
+		クリア
+	</string>
+	<string name="Cleft">
+		割れた
+	</string>
+	<string name="Close Set Eyes">
+		顔の中心寄りの目
+	</string>
+	<string name="Closed">
+		クローズ
+	</string>
+	<string name="Closed Back">
+		後ろとじ
+	</string>
+	<string name="Closed Front">
+		前とじ
+	</string>
+	<string name="Closed Left">
+		左とじ
+	</string>
+	<string name="Closed Right">
+		右とじ
+	</string>
+	<string name="Coin Purse">
+		コイン入れ
+	</string>
+	<string name="Collar Back">
+		後ろえり
+	</string>
+	<string name="Collar Front">
+		前えり
+	</string>
+	<string name="Corner Down">
+		ダウン
+	</string>
+	<string name="Corner Normal">
+		ノーマル
+	</string>
+	<string name="Corner Up">
+		アップ
+	</string>
+	<string name="Creased">
+		重いまぶた
+	</string>
+	<string name="Crooked Nose">
+		曲がった鼻
+	</string>
+	<string name="Cropped Hair">
+		短く刈り込んだ髪
+	</string>
+	<string name="Cuff Flare">
+		袖口のフレア
+	</string>
+	<string name="Dark">
+		ダーク
+	</string>
+	<string name="Dark Green">
+		ダークグリーン
+	</string>
+	<string name="Darker">
+		ダーク
+	</string>
+	<string name="Deep">
+		尖った
+	</string>
+	<string name="Default Heels">
+		デフォルトのかかと
+	</string>
+	<string name="Default Toe">
+		デフォルトのつま先
+	</string>
+	<string name="Dense">
+		濃
+	</string>
+	<string name="Dense hair">
+		密度の多い髪
+	</string>
+	<string name="Double Chin">
+		二重あご
+	</string>
+	<string name="Downturned">
+		下向き
+	</string>
+	<string name="Duffle Bag">
+		ダッフルバッグ
+	</string>
+	<string name="Ear Angle">
+		耳の角度
+	</string>
+	<string name="Ear Size">
+		耳の大きさ
+	</string>
+	<string name="Ear Tips">
+		耳の先
+	</string>
+	<string name="Egg Head">
+		たまご頭
+	</string>
+	<string name="Eye Bags">
+		下まぶた
+	</string>
+	<string name="Eye Color">
+		瞳の色
+	</string>
+	<string name="Eye Depth">
+		目のくぼみ
+	</string>
+	<string name="Eye Lightness">
+		瞳の明るさ
+	</string>
+	<string name="Eye Opening">
+		見開き具合
+	</string>
+	<string name="Eye Pop">
+		両目の大きさの対称
+	</string>
+	<string name="Eye Size">
+		目の大きさ
+	</string>
+	<string name="Eye Spacing">
+		目と目のあいだの幅
+	</string>
+	<string name="Eyeball Size">
+		眼球の大きさ
+	</string>
+	<string name="Eyebrow Arc">
+		眉毛のアーチ
+	</string>
+	<string name="Eyebrow Density">
+		眉毛の密集度
+	</string>
+	<string name="Eyebrow Height">
+		眉毛の高さ
+	</string>
+	<string name="Eyebrow Points">
+		眉毛の角
+	</string>
+	<string name="Eyebrow Size">
+		眉毛の大きさ
+	</string>
+	<string name="Eyelash Length">
+		まつげの長さ
+	</string>
+	<string name="Eyeliner">
+		アイライナー
+	</string>
+	<string name="Eyeliner Color">
+		アイライナーの色
+	</string>
+	<string name="Eyes Back">
+		目・戻る
+	</string>
+	<string name="Eyes Bugged">
+		下まぶたがたるんだ目
+	</string>
+	<string name="Eyes Forward">
+		目・次へ
+	</string>
+	<string name="Eyes Long Head">
+		Eyes Long Head
+	</string>
+	<string name="Eyes Shear Left Up">
+		Eyes Shear Left Up
+	</string>
+	<string name="Eyes Shear Right Up">
+		Eyes Shear Right Up
+	</string>
+	<string name="Eyes Short Head">
+		Eyes Short Head
+	</string>
+	<string name="Eyes Spread">
+		離れた目
+	</string>
+	<string name="Eyes Sunken">
+		くぼんだ目
+	</string>
+	<string name="Eyes Together">
+		Eyes Together
+	</string>
+	<string name="Face Shear">
+		顔のゆがみ
+	</string>
+	<string name="Facial Definition">
+		顔の精細度
+	</string>
+	<string name="Far Set Eyes">
+		離れた目
+	</string>
+	<string name="Fat">
+		太った
+	</string>
+	<string name="Fat Head">
+		太めの頭
+	</string>
+	<string name="Fat Lips">
+		大
+	</string>
+	<string name="Fat Lower">
+		Fat Lower
+	</string>
+	<string name="Fat Lower Lip">
+		厚めの下唇
+	</string>
+	<string name="Fat Torso">
+		太めの頭部
+	</string>
+	<string name="Fat Upper">
+		Fat Upper
+	</string>
+	<string name="Fat Upper Lip">
+		厚めの上唇
+	</string>
+	<string name="Female">
+		女性
+	</string>
+	<string name="Fingerless">
+		指なし
+	</string>
+	<string name="Fingers">
+		指あり
+	</string>
+	<string name="Flared Cuffs">
+		広がった袖口
+	</string>
+	<string name="Flat">
+		平ら
+	</string>
+	<string name="Flat Butt">
+		小
+	</string>
+	<string name="Flat Head">
+		絶壁頭
+	</string>
+	<string name="Flat Toe">
+		フラット
+	</string>
+	<string name="Foot Size">
+		足の大きさ
+	</string>
+	<string name="Forehead Angle">
+		ひたいの角度
+	</string>
+	<string name="Forehead Heavy">
+		ひたいに重点
+	</string>
+	<string name="Freckles">
+		しみ・そばかす
+	</string>
+	<string name="Front Bangs Down">
+		下ろした前髪
+	</string>
+	<string name="Front Bangs Up">
+		上げた前髪
+	</string>
+	<string name="Front Fringe">
+		前髪の毛先
+	</string>
+	<string name="Front Hair">
+		前髪
+	</string>
+	<string name="Front Hair Down">
+		下ろした前髪
+	</string>
+	<string name="Front Hair Up">
+		アップにした前髪
+	</string>
+	<string name="Full Back">
+		刈られていない髪
+	</string>
+	<string name="Full Eyeliner">
+		あり
+	</string>
+	<string name="Full Front">
+		刈られていない髪
+	</string>
+	<string name="Full Hair Sides">
+		サイドの髪
+	</string>
+	<string name="Full Sides">
+		生え揃ったサイド
+	</string>
+	<string name="Glossy">
+		あり
+	</string>
+	<string name="Glove Fingers">
+		手袋の指
+	</string>
+	<string name="Glove Length">
+		手袋の長さ
+	</string>
+	<string name="Hair">
+		髪
+	</string>
+	<string name="Hair Back">
+		髪: 後ろ
+	</string>
+	<string name="Hair Front">
+		髪: 前
+	</string>
+	<string name="Hair Sides">
+		髪: サイド
+	</string>
+	<string name="Hair Sweep">
+		流す
+	</string>
+	<string name="Hair Thickess">
+		髪の量
+	</string>
+	<string name="Hair Thickness">
+		髪の量
+	</string>
+	<string name="Hair Tilt">
+		髪の向き
+	</string>
+	<string name="Hair Tilted Left">
+		左向き
+	</string>
+	<string name="Hair Tilted Right">
+		右向き
+	</string>
+	<string name="Hair Volume">
+		髪: ボリューム
+	</string>
+	<string name="Hand Size">
+		手の大きさ
+	</string>
+	<string name="Handlebars">
+		ハンドルバー
+	</string>
+	<string name="Head Length">
+		頭の長さ
+	</string>
+	<string name="Head Shape">
+		頭の形
+	</string>
+	<string name="Head Size">
+		頭の大きさ
+	</string>
+	<string name="Head Stretch">
+		頭の伸び具合
+	</string>
+	<string name="Heel Height">
+		ヒールの高さ
+	</string>
+	<string name="Heel Shape">
+		ヒールの形
+	</string>
+	<string name="Height">
+		身長
+	</string>
+	<string name="High">
+		高
+	</string>
+	<string name="High Heels">
+		ハイヒール
+	</string>
+	<string name="High Jaw">
+		高
+	</string>
+	<string name="High Platforms">
+		厚底
+	</string>
+	<string name="High and Tight">
+		高めでタイト
+	</string>
+	<string name="Higher">
+		高
+	</string>
+	<string name="Hip Length">
+		腰の長さ
+	</string>
+	<string name="Hip Width">
+		腰の幅
+	</string>
+	<string name="In">
+		内向き
+	</string>
+	<string name="In Shdw Color">
+		内側のシャドウカラー
+	</string>
+	<string name="In Shdw Opacity">
+		内側のシャドウの濃さ
+	</string>
+	<string name="Inner Eye Corner">
+		目頭
+	</string>
+	<string name="Inner Eye Shadow">
+		内側のアイシャドウ
+	</string>
+	<string name="Inner Shadow">
+		内側のシャドウ
+	</string>
+	<string name="Jacket Length">
+		ジャケット丈
+	</string>
+	<string name="Jacket Wrinkles">
+		ジャケットのしわ
+	</string>
+	<string name="Jaw Angle">
+		あごの角度
+	</string>
+	<string name="Jaw Jut">
+		あごの突出
+	</string>
+	<string name="Jaw Shape">
+		あごの形
+	</string>
+	<string name="Join">
+		寄せた
+	</string>
+	<string name="Jowls">
+		えら
+	</string>
+	<string name="Knee Angle">
+		膝の角度
+	</string>
+	<string name="Knock Kneed">
+		内股
+	</string>
+	<string name="Large">
+		大
+	</string>
+	<string name="Large Hands">
+		大
+	</string>
+	<string name="Left Part">
+		左分け
+	</string>
+	<string name="Leg Length">
+		脚の長さ
+	</string>
+	<string name="Leg Muscles">
+		脚の筋肉
+	</string>
+	<string name="Less">
+		小
+	</string>
+	<string name="Less Body Fat">
+		少なめ
+	</string>
+	<string name="Less Curtains">
+		少なめ
+	</string>
+	<string name="Less Freckles">
+		少なめ
+	</string>
+	<string name="Less Full">
+		薄い
+	</string>
+	<string name="Less Gravity">
+		å°‘
+	</string>
+	<string name="Less Love">
+		å°‘
+	</string>
+	<string name="Less Muscles">
+		少なめ
+	</string>
+	<string name="Less Muscular">
+		少なめ
+	</string>
+	<string name="Less Rosy">
+		少な目
+	</string>
+	<string name="Less Round">
+		丸み少な目
+	</string>
+	<string name="Less Saddle">
+		小
+	</string>
+	<string name="Less Square">
+		小
+	</string>
+	<string name="Less Volume">
+		ボリューム少な目
+	</string>
+	<string name="Less soul">
+		小
+	</string>
+	<string name="Lighter">
+		ライト
+	</string>
+	<string name="Lip Cleft">
+		唇の山
+	</string>
+	<string name="Lip Cleft Depth">
+		唇の山の高さ
+	</string>
+	<string name="Lip Fullness">
+		唇の厚み
+	</string>
+	<string name="Lip Pinkness">
+		唇の赤み
+	</string>
+	<string name="Lip Ratio">
+		上下唇の大きさ
+	</string>
+	<string name="Lip Thickness">
+		唇の前後幅
+	</string>
+	<string name="Lip Width">
+		口の大きさ
+	</string>
+	<string name="Lipgloss">
+		リップグロス
+	</string>
+	<string name="Lipstick">
+		口紅
+	</string>
+	<string name="Lipstick Color">
+		口紅の色
+	</string>
+	<string name="Long">
+		é•·
+	</string>
+	<string name="Long Head">
+		前後幅が広い頭
+	</string>
+	<string name="Long Hips">
+		é•·
+	</string>
+	<string name="Long Legs">
+		é•·
+	</string>
+	<string name="Long Neck">
+		é•·
+	</string>
+	<string name="Long Pigtails">
+		é•·
+	</string>
+	<string name="Long Ponytail">
+		é•·
+	</string>
+	<string name="Long Torso">
+		é•·
+	</string>
+	<string name="Long arms">
+		é•·
+	</string>
+	<string name="Longcuffs">
+		ロングカフス
+	</string>
+	<string name="Loose Pants">
+		ゆったり
+	</string>
+	<string name="Loose Shirt">
+		ゆるめ
+	</string>
+	<string name="Loose Sleeves">
+		ゆるめ
+	</string>
+	<string name="Love Handles">
+		ウエスト周り
+	</string>
+	<string name="Low">
+		低
+	</string>
+	<string name="Low Heels">
+		ローヒール
+	</string>
+	<string name="Low Jaw">
+		低
+	</string>
+	<string name="Low Platforms">
+		低め
+	</string>
+	<string name="Low and Loose">
+		低めでゆったり
+	</string>
+	<string name="Lower">
+		低
+	</string>
+	<string name="Lower Bridge">
+		鼻筋
+	</string>
+	<string name="Lower Cheeks">
+		ほおの下部
+	</string>
+	<string name="Male">
+		男性
+	</string>
+	<string name="Middle Part">
+		真ん中分け
+	</string>
+	<string name="More">
+		大
+	</string>
+	<string name="More Blush">
+		きつめ
+	</string>
+	<string name="More Body Fat">
+		多め
+	</string>
+	<string name="More Curtains">
+		多め
+	</string>
+	<string name="More Eyeshadow">
+		あり
+	</string>
+	<string name="More Freckles">
+		多め
+	</string>
+	<string name="More Full">
+		厚い
+	</string>
+	<string name="More Gravity">
+		大
+	</string>
+	<string name="More Lipstick">
+		あり
+	</string>
+	<string name="More Love">
+		大
+	</string>
+	<string name="More Lower Lip">
+		大
+	</string>
+	<string name="More Muscles">
+		多め
+	</string>
+	<string name="More Muscular">
+		筋骨隆々
+	</string>
+	<string name="More Rosy">
+		多め
+	</string>
+	<string name="More Round">
+		まる
+	</string>
+	<string name="More Saddle">
+		大
+	</string>
+	<string name="More Sloped">
+		なだらか
+	</string>
+	<string name="More Square">
+		四角
+	</string>
+	<string name="More Upper Lip">
+		大
+	</string>
+	<string name="More Vertical">
+		åž‚ç›´
+	</string>
+	<string name="More Volume">
+		大
+	</string>
+	<string name="More soul">
+		大
+	</string>
+	<string name="Moustache">
+		口ひげ
+	</string>
+	<string name="Mouth Corner">
+		口角
+	</string>
+	<string name="Mouth Position">
+		口の位置
+	</string>
+	<string name="Mowhawk">
+		モヒカン
+	</string>
+	<string name="Muscular">
+		筋骨たくましい
+	</string>
+	<string name="Mutton Chops">
+		マトンチョップス
+	</string>
+	<string name="Nail Polish">
+		マニキュア
+	</string>
+	<string name="Nail Polish Color">
+		マニキュアの色
+	</string>
+	<string name="Narrow">
+		ç‹­
+	</string>
+	<string name="Narrow Back">
+		ç‹­
+	</string>
+	<string name="Narrow Front">
+		ç‹­
+	</string>
+	<string name="Narrow Lips">
+		おちょぼ口
+	</string>
+	<string name="Natural">
+		ナチュラル
+	</string>
+	<string name="Neck Length">
+		首の長さ
+	</string>
+	<string name="Neck Thickness">
+		首の太さ
+	</string>
+	<string name="No Blush">
+		なし
+	</string>
+	<string name="No Eyeliner">
+		なし
+	</string>
+	<string name="No Eyeshadow">
+		なし
+	</string>
+	<string name="No Heels">
+		なし
+	</string>
+	<string name="No Lipgloss">
+		なし
+	</string>
+	<string name="No Lipstick">
+		なし
+	</string>
+	<string name="No Part">
+		なし
+	</string>
+	<string name="No Polish">
+		なし
+	</string>
+	<string name="No Red">
+		なし
+	</string>
+	<string name="No Spikes">
+		なし
+	</string>
+	<string name="No White">
+		なし
+	</string>
+	<string name="No Wrinkles">
+		なし
+	</string>
+	<string name="Normal Lower">
+		Normal Lower
+	</string>
+	<string name="Normal Upper">
+		Normal Upper
+	</string>
+	<string name="Nose Left">
+		左曲がり
+	</string>
+	<string name="Nose Right">
+		右曲がり
+	</string>
+	<string name="Nose Size">
+		鼻の大きさ
+	</string>
+	<string name="Nose Thickness">
+		鼻の厚み
+	</string>
+	<string name="Nose Tip Angle">
+		鼻先の角度
+	</string>
+	<string name="Nose Tip Shape">
+		鼻先の形
+	</string>
+	<string name="Nose Width">
+		鼻の幅
+	</string>
+	<string name="Nostril Division">
+		鼻の穴の高さ
+	</string>
+	<string name="Nostril Width">
+		鼻の穴の幅
+	</string>
+	<string name="Old">
+		Old
+	</string>
+	<string name="Opaque">
+		濃いめ
+	</string>
+	<string name="Open">
+		オープン
+	</string>
+	<string name="Open Back">
+		後ろあき
+	</string>
+	<string name="Open Front">
+		前あき
+	</string>
+	<string name="Open Left">
+		左あき
+	</string>
+	<string name="Open Right">
+		右あき
+	</string>
+	<string name="Orange">
+		オレンジ
+	</string>
+	<string name="Out">
+		外向き
+	</string>
+	<string name="Out Shdw Color">
+		外側のシャドウカラー
+	</string>
+	<string name="Out Shdw Opacity">
+		外側のシャドウの濃さ
+	</string>
+	<string name="Outer Eye Corner">
+		目尻
+	</string>
+	<string name="Outer Eye Shadow">
+		外側のアイシャドウ
+	</string>
+	<string name="Outer Shadow">
+		外側のシャドウ
+	</string>
+	<string name="Overbite">
+		出っ歯
+	</string>
+	<string name="Package">
+		パッケージ
+	</string>
+	<string name="Painted Nails">
+		あり
+	</string>
+	<string name="Pale">
+		悪い
+	</string>
+	<string name="Pants Crotch">
+		パンツの股
+	</string>
+	<string name="Pants Fit">
+		パンツのフィット感
+	</string>
+	<string name="Pants Length">
+		パンツ丈
+	</string>
+	<string name="Pants Waist">
+		ウエスト
+	</string>
+	<string name="Pants Wrinkles">
+		パンツのしわ
+	</string>
+	<string name="Part">
+		あり
+	</string>
+	<string name="Part Bangs">
+		分けた前髪
+	</string>
+	<string name="Pectorals">
+		胸筋
+	</string>
+	<string name="Pigment">
+		色素
+	</string>
+	<string name="Pigtails">
+		下げ髪
+	</string>
+	<string name="Pink">
+		ピンク
+	</string>
+	<string name="Pinker">
+		ピンク
+	</string>
+	<string name="Platform Height">
+		靴底の高さ
+	</string>
+	<string name="Platform Width">
+		靴底の幅
+	</string>
+	<string name="Pointy">
+		尖った
+	</string>
+	<string name="Pointy Heels">
+		å¹…ç‹­
+	</string>
+	<string name="Pointy Toe">
+		先の細いつま先
+	</string>
+	<string name="Ponytail">
+		ポニーテール
+	</string>
+	<string name="Poofy Skirt">
+		ふんわり
+	</string>
+	<string name="Pop Left Eye">
+		左目を大きく
+	</string>
+	<string name="Pop Right Eye">
+		右目を大きく
+	</string>
+	<string name="Puffy">
+		ふっくら
+	</string>
+	<string name="Puffy Eyelids">
+		目の周りの膨らみ
+	</string>
+	<string name="Rainbow Color">
+		虹色
+	</string>
+	<string name="Red Hair">
+		赤毛
+	</string>
+	<string name="Red Skin">
+		赤い肌
+	</string>
+	<string name="Regular">
+		均整のとれた
+	</string>
+	<string name="Regular Muscles">
+		均整のとれた筋肉
+	</string>
+	<string name="Right Part">
+		右分け
+	</string>
+	<string name="Rosy Complexion">
+		ほおの赤らみ
+	</string>
+	<string name="Round">
+		まるっこい
+	</string>
+	<string name="Round Forehead">
+		丸みを帯びた額
+	</string>
+	<string name="Ruddiness">
+		血色
+	</string>
+	<string name="Ruddy">
+		良い
+	</string>
+	<string name="Rumpled Hair">
+		くしゃくしゃヘア
+	</string>
+	<string name="Saddle Bags">
+		腰回りの肉付き
+	</string>
+	<string name="Saddlebags">
+		腰回りの肉付き
+	</string>
+	<string name="Scrawny">
+		骨張った
+	</string>
+	<string name="Scrawny Leg">
+		骨張った脚
+	</string>
+	<string name="Separate">
+		離れた
+	</string>
+	<string name="Shading">
+		Shading
+	</string>
+	<string name="Shadow hair">
+		Shadow hair
+	</string>
+	<string name="Shallow">
+		なだらか
+	</string>
+	<string name="Shear Back">
+		後方を刈る
+	</string>
+	<string name="Shear Face">
+		顔のゆがみ
+	</string>
+	<string name="Shear Front">
+		前方を刈る
+	</string>
+	<string name="Shear Left">
+		左側
+	</string>
+	<string name="Shear Left Up">
+		左半分を上に
+	</string>
+	<string name="Shear Right">
+		右側
+	</string>
+	<string name="Shear Right Up">
+		右半分を上に
+	</string>
+	<string name="Sheared Back">
+		後ろを刈られた髪
+	</string>
+	<string name="Sheared Front">
+		前を刈られた髪
+	</string>
+	<string name="Shift Left">
+		左向き
+	</string>
+	<string name="Shift Mouth">
+		口の向き
+	</string>
+	<string name="Shift Right">
+		右向き
+	</string>
+	<string name="Shirt Bottom">
+		シャツの裾
+	</string>
+	<string name="Shirt Fit">
+		シャツのフィット感
+	</string>
+	<string name="Shirt Wrinkles">
+		シャツのしわ
+	</string>
+	<string name="Shoe Height">
+		靴の長さ
+	</string>
+	<string name="Short">
+		短
+	</string>
+	<string name="Short Arms">
+		短
+	</string>
+	<string name="Short Legs">
+		短
+	</string>
+	<string name="Short Neck">
+		短
+	</string>
+	<string name="Short Pigtails">
+		短
+	</string>
+	<string name="Short Ponytail">
+		短
+	</string>
+	<string name="Short Sideburns">
+		短め
+	</string>
+	<string name="Short Torso">
+		短
+	</string>
+	<string name="Short hips">
+		短
+	</string>
+	<string name="Shoulders">
+		è‚©
+	</string>
+	<string name="Side Bangs">
+		サイドに流した前髪
+	</string>
+	<string name="Side Bangs Down">
+		ダウン
+	</string>
+	<string name="Side Bangs Up">
+		アップ
+	</string>
+	<string name="Side Fringe">
+		サイドの毛先
+	</string>
+	<string name="Sideburns">
+		もみあげ
+	</string>
+	<string name="Sides Hair">
+		サイドの髪
+	</string>
+	<string name="Sides Hair Down">
+		ダウン
+	</string>
+	<string name="Sides Hair Up">
+		アップ
+	</string>
+	<string name="Skinny">
+		細身
+	</string>
+	<string name="Skinny Neck">
+		ç´°
+	</string>
+	<string name="Skirt Fit">
+		スカートのフィット感
+	</string>
+	<string name="Skirt Length">
+		スカート丈
+	</string>
+	<string name="Slanted Forehead">
+		傾斜した額
+	</string>
+	<string name="Sleeve Length">
+		袖丈
+	</string>
+	<string name="Sleeve Looseness">
+		袖のフィット感
+	</string>
+	<string name="Slit Back">
+		スリット: 後ろ
+	</string>
+	<string name="Slit Front">
+		スリット: 前
+	</string>
+	<string name="Slit Left">
+		スリット: 左
+	</string>
+	<string name="Slit Right">
+		スリット: 右
+	</string>
+	<string name="Small">
+		小
+	</string>
+	<string name="Small Hands">
+		小
+	</string>
+	<string name="Small Head">
+		小
+	</string>
+	<string name="Smooth">
+		滑らか
+	</string>
+	<string name="Smooth Hair">
+		スムーズ
+	</string>
+	<string name="Socks Length">
+		靴下丈
+	</string>
+	<string name="Some">
+		Some
+	</string>
+	<string name="Soulpatch">
+		ソウルパッチ
+	</string>
+	<string name="Sparse">
+		è–„
+	</string>
+	<string name="Spiked Hair">
+		とげとげヘア
+	</string>
+	<string name="Square">
+		角張った
+	</string>
+	<string name="Square Toe">
+		スクエアトゥ
+	</string>
+	<string name="Squash Head">
+		カボチャ型
+	</string>
+	<string name="Squash/Stretch Head">
+		カボチャ/縦長頭
+	</string>
+	<string name="Stretch Head">
+		縦長
+	</string>
+	<string name="Sunken">
+		こけた
+	</string>
+	<string name="Sunken Chest">
+		小
+	</string>
+	<string name="Sunken Eyes">
+		くぼんだ目
+	</string>
+	<string name="Sweep Back">
+		後ろへ
+	</string>
+	<string name="Sweep Forward">
+		前へ
+	</string>
+	<string name="Swept Back">
+		オールバック
+	</string>
+	<string name="Swept Back Hair">
+		オールバックヘア
+	</string>
+	<string name="Swept Forward">
+		前へ
+	</string>
+	<string name="Swept Forward Hair">
+		後ろへ
+	</string>
+	<string name="Tall">
+		高
+	</string>
+	<string name="Taper Back">
+		後ろに先細
+	</string>
+	<string name="Taper Front">
+		前に先細
+	</string>
+	<string name="Thick Heels">
+		幅広
+	</string>
+	<string name="Thick Neck">
+		太
+	</string>
+	<string name="Thick Toe">
+		厚め
+	</string>
+	<string name="Thickness">
+		厚み
+	</string>
+	<string name="Thin">
+		薄い
+	</string>
+	<string name="Thin Eyebrows">
+		ç´°
+	</string>
+	<string name="Thin Lips">
+		小
+	</string>
+	<string name="Thin Nose">
+		細い鼻
+	</string>
+	<string name="Tight Chin">
+		ひきしまったあご
+	</string>
+	<string name="Tight Cuffs">
+		タイト
+	</string>
+	<string name="Tight Pants">
+		タイト
+	</string>
+	<string name="Tight Shirt">
+		タイト
+	</string>
+	<string name="Tight Skirt">
+		タイト
+	</string>
+	<string name="Tight Sleeves">
+		タイト
+	</string>
+	<string name="Tilt Left">
+		左に傾斜
+	</string>
+	<string name="Tilt Right">
+		右に傾斜
+	</string>
+	<string name="Toe Shape">
+		つま先の形
+	</string>
+	<string name="Toe Thickness">
+		つま先の厚み
+	</string>
+	<string name="Torso Length">
+		上半身の長さ
+	</string>
+	<string name="Torso Muscles">
+		上半身の筋肉
+	</string>
+	<string name="Torso Scrawny">
+		上半身の骨張り
+	</string>
+	<string name="Unattached">
+		大
+	</string>
+	<string name="Uncreased">
+		軽いまぶた
+	</string>
+	<string name="Underbite">
+		受け口
+	</string>
+	<string name="Unnatural">
+		ユニーク
+	</string>
+	<string name="Upper Bridge">
+		両目のあいだ
+	</string>
+	<string name="Upper Cheeks">
+		ほおの上部
+	</string>
+	<string name="Upper Chin Cleft">
+		あご上部の割れ具合
+	</string>
+	<string name="Upper Eyelid Fold">
+		二重の幅
+	</string>
+	<string name="Upturned">
+		上向き
+	</string>
+	<string name="Very Red">
+		真っ赤
+	</string>
+	<string name="Waist Height">
+		ウエストの高さ
+	</string>
+	<string name="Well-Fed">
+		つまった
+	</string>
+	<string name="White Hair">
+		白髪
+	</string>
+	<string name="Wide">
+		広
+	</string>
+	<string name="Wide Back">
+		広
+	</string>
+	<string name="Wide Front">
+		広
+	</string>
+	<string name="Wide Lips">
+		大きい口
+	</string>
+	<string name="Wild">
+		ワイルド
+	</string>
+	<string name="Wrinkles">
+		しわあり
+	</string>
+	<string name="LocationCtrlAddLandmarkTooltip">
+		マイ ランドマークに追加
+	</string>
+	<string name="LocationCtrlEditLandmarkTooltip">
+		マイ ランドマークを編集
+	</string>
+	<string name="UpdaterWindowTitle">
+		[APP_NAME] アップデート
+	</string>
+	<string name="UpdaterNowUpdating">
+		只今 [APP_NAME] をアップデート中です...
+	</string>
+	<string name="UpdaterNowInstalling">
+		[APP_NAME] をインストール中です...
+	</string>
+	<string name="UpdaterUpdatingDescriptive">
+		お使いの [APP_NAME] ビューワが最新バージョンにアップデートされています。  数分かかることがありますのでしばらくお待ちください。
+	</string>
+	<string name="UpdaterProgressBarTextWithEllipses">
+		アップデートをダウンロード中です...
+	</string>
+	<string name="UpdaterProgressBarText">
+		アップデートをダウンロード中
+	</string>
+	<string name="UpdaterFailDownloadTitle">
+		アップデートのダウンロードに失敗しました
+	</string>
+	<string name="UpdaterFailUpdateDescriptive">
+		[APP_NAME] をアップデート中にエラーが発生しました。 www.secondlife.com から最新バージョンをダウンロードしてください。
+	</string>
+	<string name="UpdaterFailInstallTitle">
+		アップデートのインストールに失敗しました
+	</string>
+	<string name="UpdaterFailStartTitle">
+		ビューワの起動に失敗しました
+	</string>
+	<string name="only_user_message">
+		このセッションにいるユーザーはあなただけです。
+	</string>
+	<string name="offline_message">
+		[FIRST] [LAST]はオフラインです。
+	</string>
+	<string name="invite_message">
+		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
+	</string>
+	<string name="generic_request_error">
+		要求中にエラーが発生しました。後でもう一度試してください。
+	</string>
+	<string name="insufficient_perms_error">
+		あなたには充分な権限がありません。
+	</string>
+	<string name="session_does_not_exist_error">
+		このセッションは既に切断されています。
+	</string>
+	<string name="no_ability_error">
+		あなたにはその能力がありません。
+	</string>
+	<string name="no_ability">
+		あなたにはその能力がありません。
+	</string>
+	<string name="not_a_mod_error">
+		あなたはセッション・モデレータではありません。
+	</string>
+	<string name="muted_error">
+		グループモデレータがあなたのテキストチャットを無効化しました
+	</string>
+	<string name="add_session_event">
+		[RECIPIENT] とのチャット・セッションにユーザーを追加することができません
+	</string>
+	<string name="message_session_event">
+		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
+	</string>
+	<string name="removed_from_group">
+		あなたはグループから削除されました。
+	</string>
+	<string name="close_on_no_ability">
+		このチャット・セッションを継続することはできません
+	</string>
+</strings>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
index 7e99d2562ee058c7e9582dcf44c554121ed0695f..ef7571cac4981d11c9571af2b38a8bcda72cd08c 100644
--- a/indra/newview/skins/default/xui/ja/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/ja/teleport_strings.xml
@@ -1,79 +1,79 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<teleport_messages name="">
-	<message_set name="errors">
-		<message name="invalid_tport">
-			テレポート・リクエストの処理中に問題が発生しました。テレポートするには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-		</message>
-		<message name="invalid_region_handoff">
-			地域間の移動の処理中に問題が発生しました。地域間を移動するには、再度ログインする必要があります。
-このメッセージが引き続き表示される場合は、技術サポートFAQ(www.secondlife.com/support)を参照してください。
-		</message>
-		<message name="blocked_tport">
-			申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
-やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
-		</message>
-		<message name="nolandmark_tport">
-			残念ながら、システムはランドマーク目的地を探せませんでした。
-		</message>
-		<message name="timeout_tport">
-			申し訳ございません。システムはテレポート接続を完了できませんでした。
-もう少し後でやり直してください。
-		</message>
-		<message name="noaccess_tport">
-			残念ながら、そのテレポート目的地へのアクセスがありません。
-		</message>
-		<message name="missing_attach_tport">
-			添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
-		</message>
-		<message name="too_many_uploads_tport">
-			この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
-数分後にやり直すか、または混雑していない他の地域をお試しください。
-		</message>
-		<message name="expired_tport">
-			申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
-		</message>
-		<message name="expired_region_handoff">
-			申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
-数分後にやり直してください。
-		</message>
-		<message name="no_host">
-			テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
-		</message>
-		<message name="no_inventory_host">
-			持ち物システムは現在利用できません。
-		</message>
-	</message_set>
-	<message_set name="progress">
-		<message name="sending_dest">
-			目的地に送信しています。
-		</message>
-		<message name="redirecting">
-			別の目的地に再案内しています。
-		</message>
-		<message name="relaying">
-			目的地に中継しています。
-		</message>
-		<message name="sending_home">
-			ホーム位置リクエストを送信しています。
-		</message>
-		<message name="sending_landmark">
-			ランドマーク位置リクエストを送信しています。
-		</message>
-		<message name="completing">
-			テレポートを完了しています。
-		</message>
-		<message name="resolving">
-			目的地を解決しています。
-		</message>
-		<message name="contacting">
-			新しい地域にコンタクトしています。
-		</message>
-		<message name="arriving">
-			到着...
-		</message>
-		<message name="requesting">
-			テレポートをリクエスト...
-		</message>
-	</message_set>
-</teleport_messages>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<teleport_messages name="">
+	<message_set name="errors">
+		<message name="invalid_tport">
+			テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+		</message>
+		<message name="invalid_region_handoff">
+			リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。
+このメッセージが何度も出る場合は、[SUPPORT_SITE] へご連絡ください。
+		</message>
+		<message name="blocked_tport">
+			申し訳ございません。テレポートは現在、ブロックされています。もう少し後でやり直してください。
+やり直してもテレポートできない場合は、いったんログアウトし、再度ログインして問題を解決してください。
+		</message>
+		<message name="nolandmark_tport">
+			残念ながら、システムはランドマーク目的地を探せませんでした。
+		</message>
+		<message name="timeout_tport">
+			申し訳ございません。システムはテレポート接続を完了できませんでした。
+もう少し後でやり直してください。
+		</message>
+		<message name="noaccess_tport">
+			残念ながら、そのテレポート目的地へのアクセスがありません。
+		</message>
+		<message name="missing_attach_tport">
+			添付物は、まだ到着していません。あと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてからテレポートをやり直してださい。
+		</message>
+		<message name="too_many_uploads_tport">
+			この地域の資産キューが現在込み合っているため、テレポート・リクエストを時間通りに処理することが難しい状況です。
+数分後にやり直すか、または混雑していない他の地域をお試しください。
+		</message>
+		<message name="expired_tport">
+			申し訳ございません。システムはテレポート・リクエストを時間どおりに完了できませんでした。数分後にやり直してください。
+		</message>
+		<message name="expired_region_handoff">
+			申し訳ございません。システムは地域間の移動を時間どおりに完了できませんでした。
+数分後にやり直してください。
+		</message>
+		<message name="no_host">
+			テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、またはすでに消滅している可能性があります。数分後にやり直してください。
+		</message>
+		<message name="no_inventory_host">
+			持ち物システムは現在利用できません。
+		</message>
+	</message_set>
+	<message_set name="progress">
+		<message name="sending_dest">
+			目的地に送信しています。
+		</message>
+		<message name="redirecting">
+			別の目的地に再案内しています。
+		</message>
+		<message name="relaying">
+			目的地に中継しています。
+		</message>
+		<message name="sending_home">
+			ホーム位置リクエストを送信しています。
+		</message>
+		<message name="sending_landmark">
+			ランドマーク位置リクエストを送信しています。
+		</message>
+		<message name="completing">
+			テレポートを完了しています。
+		</message>
+		<message name="resolving">
+			目的地を解決しています。
+		</message>
+		<message name="contacting">
+			新しい地域にコンタクトしています。
+		</message>
+		<message name="arriving">
+			到着...
+		</message>
+		<message name="requesting">
+			テレポートをリクエスト...
+		</message>
+	</message_set>
+</teleport_messages>
diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml
index 9ad947df662eebd606b972cf814fa15ff10a1c38..0c57a22be1fd84504f81c1c9fb935f6c82231099 100644
--- a/indra/newview/skins/default/xui/nl/floater_about.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Over [APP_NAME]">
+<floater name="floater_about" title="OVER [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml
index 6aa80c00dbe60bca60cb78fb48749f3676ad057e..3a77de70d281f2db63762cd310c9cfa9c326f587 100644
--- a/indra/newview/skins/default/xui/nl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Over land">
+<floater name="floaterland" title="OVER LAND">
 	<tab_container name="landtab">
 		<panel label="Algemeen" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/nl/floater_auction.xml b/indra/newview/skins/default/xui/nl/floater_auction.xml
index eb061e028d520b89ae7efdcb4b99f08537e6b7c4..611024699bed7f68e0668965f4d3dbfdb9df8105 100644
--- a/indra/newview/skins/default/xui/nl/floater_auction.xml
+++ b/indra/newview/skins/default/xui/nl/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Start Linden Land Verkoop">
+<floater name="floater_auction" title="START LINDEN LAND VERKOOP">
 	<check_box label="Voeg geel selectie kader toe" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_beacons.xml b/indra/newview/skins/default/xui/nl/floater_beacons.xml
index 84196ac14f67d67170e2ea6a6133c0f22f369007..ecc485e354b89dcd8c6337170841e162cbf84a2c 100644
--- a/indra/newview/skins/default/xui/nl/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/nl/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Bakens">
+<floater name="beacons" title="BAKENS">
 	<panel name="beacons_panel">
 		<check_box label="Gescripte objecten met alleen Aanraken" name="touch_only"/>
 		<check_box label="Gescripte objecten" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
index 7f35ec45a9745039e1224985c9e40dc3ba1c7dc8..5374ffc26ab078631db0accc9c74c6616ed6dad6 100644
--- a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Bulk wijzigen inhoud permissies">
+<floater name="floaterbulkperms" title="BULK WIJZIGEN INHOUD PERMISSIES">
 	<text name="applyto">
 		Inhoud Typen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml
index 9dbfe405aa4698ea28c56a9577e82962b3e6c738..df9a99d62ef8bfb81cbdb4bdfc50622e3713529b 100644
--- a/indra/newview/skins/default/xui/nl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/nl/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Botsingen, duwen &amp; slaan">
+<floater name="floater_bumps" title="BOTSINGEN, DUWEN &amp; SLAAN">
 	<string name="none_detected">
 		Geen gedetecteerd
 	</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
index df0614b3d2c14aef8b5f229009cddbdff565edf0..4c0ff7d04a01bf7404029b6a19b5e8bf6fa493bb 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Koop inhoud">
+<floater name="floater_buy_contents" title="KOOP INHOUD">
 	<text name="contains_text">
 		[NAME] bevat:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
index 9f740b86c848a73a0c62d7cca6ab9bdc30f2391c..b6fc743abe08bb9d473dca893f5f8bffc582a281 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Koop valuta">
+<floater name="buy currency" title="KOOP VALUTA">
 	<text name="info_buying">
 		Valuta kopen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_land.xml b/indra/newview/skins/default/xui/nl/floater_buy_land.xml
index 1bb02cc7d069d4cc21e8011ead35a3406d2d0de8..04990e78dbcd2e6b8e1b5d338b26ea1289490e8f 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Koop land">
+<floater name="buy land" title="KOOP LAND">
 	<text name="region_name_label">
 		Regio:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_object.xml b/indra/newview/skins/default/xui/nl/floater_buy_object.xml
index c83f2008c6131a2649c8ab6a3029bb3a3ade39a5..5d2d9dd3d01a96b62a284648bbf0c08e757af569 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Koop een kopie van object">
+<floater name="contents" title="KOOP EEN KOPIE VAN OBJECT">
 	<text name="contents_text">
 		en zijn inhoud:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_choose_group.xml b/indra/newview/skins/default/xui/nl/floater_choose_group.xml
index 3f6ce44cfdcace49b437ad77d7eccea4d27df990..8d54d62d2d06c7b17498218d5177b2acb2012afa 100644
--- a/indra/newview/skins/default/xui/nl/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/nl/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="Groepen">
+<floater name="groups" title="GROEPEN">
 	<text name="groupdesc">
 		Kies een groep:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_color_picker.xml b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
index a357e874f7ce1a130f6d843f6796ca5b8d6c86e1..9b61af07102118591a9060b33733f56e8c2819db 100644
--- a/indra/newview/skins/default/xui/nl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Kleurkiezer">
+<floater name="ColorPicker" title="KLEURKIEZER">
 	<text name="r_val_text">
 		Rood:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml
index 99a109ab782b9af2dbc44708b0a9ced7f7e877a9..4de26347e13870ece50a3576b2f1747b99e18af1 100644
--- a/indra/newview/skins/default/xui/nl/floater_customize.xml
+++ b/indra/newview/skins/default/xui/nl/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Uiterlijk" width="551">
+<floater name="floater customize" title="UITERLIJK" width="551">
 	<tab_container name="customize tab container" tab_min_width="120" width="549">
 		<placeholder label="Lichaamsdelen" name="body_parts_placeholder"/>
 		<panel label="Postuur" name="Shape" left="124" width="389">
diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
index d66c0b220564be3217a210db7f6582f7bdc23240..3c207040d226caecece73b54aadc7a2757530da3 100644
--- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Omgeving editor">
+<floater name="Environment Editor Floater" title="OMGEVING EDITOR">
 	<text bottom="-42" name="EnvTimeText">
 		Tijd van de 
 dag
diff --git a/indra/newview/skins/default/xui/nl/floater_font_test.xml b/indra/newview/skins/default/xui/nl/floater_font_test.xml
index 8e8b07ee1a59eeb3bb3fc144be51c4acd30108da..31e53e7fba9c51f37acf720debb59b990eaca2d0 100644
--- a/indra/newview/skins/default/xui/nl/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/nl/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Lettertypetest">
+<floater name="contents" title="LETTERTYPETEST">
 	<text name="linea">
 		Overschrijf test, zou hier moeten verschijnen als Times (vanuit default/xui/en-us).
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_gesture.xml b/indra/newview/skins/default/xui/nl/floater_gesture.xml
index d38972d5fe09411a0c0d053455c69af4061b3fd3..4fa994c69ec601430cb3f26c9403e215f565c8f3 100644
--- a/indra/newview/skins/default/xui/nl/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/nl/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Actieve gebaren">
+<floater name="gestures" title="ACTIEVE GEBAREN">
 	<text name="help_label">
 		Dubbelklik een gebaar om animaties en geluiden af te spelen
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_hud.xml b/indra/newview/skins/default/xui/nl/floater_hud.xml
index 9da732ff2f3603859a25221f1f1fdce8e5c47fd9..8ef7de1b02b9ea4c63b5bbd3f16d4a02744a79e0 100644
--- a/indra/newview/skins/default/xui/nl/floater_hud.xml
+++ b/indra/newview/skins/default/xui/nl/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Handleiding"/>
+<floater name="floater_hud" title="HANDLEIDING"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_inspect.xml b/indra/newview/skins/default/xui/nl/floater_inspect.xml
index 96c9d59f905fed6910a042c175b2e140bdb4581c..6a0885b57f586da078d18753edd999a3f7163b30 100644
--- a/indra/newview/skins/default/xui/nl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/nl/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Objecten inspecteren">
+<floater name="inspect" title="OBJECTEN INSPECTEREN">
 	<scroll_list name="object_list" tool_tip="Selecteer een object van deze lijst om het in-wereld te markeren">
 		<column label="Objectnaam" name="object_name"/>
 		<column label="Eigenaar" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_inventory.xml b/indra/newview/skins/default/xui/nl/floater_inventory.xml
index 272fa3c899de4fb1b5dec9bec8e98d6db5d637a7..a69039d811eb6f27e8282da08bcaafd8218fb50f 100644
--- a/indra/newview/skins/default/xui/nl/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/nl/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventaris">
+<floater name="Inventory" title="INVENTARIS">
 	<search_editor label="Typ hier om te zoeken" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Alle items" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml
index ccc39034f5e58af37502da9a3f81fd35e93ebf90..505e3cd719d56899bd04616913bc5934976a9571 100644
--- a/indra/newview/skins/default/xui/nl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Joystick configuratie">
+<floater name="Joystick" title="JOYSTICK CONFIGURATIE">
 	<check_box name="enable_joystick" width="80" label="Joystick inschakelen:"/>
 	<text left="146" name="joystick_type" width="360"/>
 	<spinner label="X-as mapping" name="JoystickAxis1"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
index e8b1fb14bc4272b637642030f4c905b1756466a5..e3943c2470f1afa9f86585183857249c90acc751 100644
--- a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Lag meter">
+<floater name="floater_lagmeter" title="LAG METER">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Client lag status"/>
 	<text name="client">
 		Client:
diff --git a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
index 556d151c8c79477772d4360a3cb78d53c42b879c..27b3ff834ee2f5ae9b9141044dda25fe0340c395 100644
--- a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Volg cursor" name="lock_check"/>
 	<combo_box label="Vergrendelen" name="history_combo"/>
 	<button label="Terug" name="back_btn"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
index 1c7e070e4a0cd33c44280546012522da79c0fa55..d0b25587b68882334bdb8c191d27e512a34fe092 100644
--- a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Geheugenlek simulatie">
+<floater name="MemLeak" title="GEHEUGENLEK SIMULATIE">
 	<spinner label="Leksnelheid (bytes per frame):" name="leak_speed"/>
 	<spinner label="Max gelekt geheugen (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
index ca3b34c3a2e2f08c15206e7e7769e6eef6ef2998..7a34be1bd7c71370b36e4496302ef775f0ab677b 100644
--- a/indra/newview/skins/default/xui/nl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Negeer object op naam">
+<floater name="mute by name" title="NEGEER OBJECT OP NAAM">
 	<text name="message" bottom_delta="-40">
 		Negeer op naam heeft alleen invloed op object chat
 en IM, niet op geluiden. U dient de naam van het object 
diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
index ed81e6baf9a24b5b97cecc998537e099600a8c20..8d709d3c0046392d747ed1ad183b9ced693c5cb2 100644
--- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contacten">
+<floater name="floater_my_friends" title="CONTACTEN">
 	<tab_container name="friends_and_groups">
 		<panel label="Vrienden" name="friends_panel"/>
 		<panel label="Groepen" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_openobject.xml b/indra/newview/skins/default/xui/nl/floater_openobject.xml
index 10b502be1cbe61b9fd3fb1eee248f05913b8b49e..832c63403d9833ffcd6e08060f05deae5ec9ec0b 100644
--- a/indra/newview/skins/default/xui/nl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/nl/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Object inhoud">
+<floater name="objectcontents" title="OBJECT INHOUD">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
index c1c949228610577f957f3d811c739fd9fa921270..f946c42678c8b2a5642a3d902302346827ac0b0d 100644
--- a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Standaard upload Permissies">
+<floater name="perm prefs" title="STANDAARD UPLOAD PERMISSIES">
 	<panel label="Permissies" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Delen met groep" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_post_process.xml b/indra/newview/skins/default/xui/nl/floater_post_process.xml
index 45fc211aeb44c0cf85a9c96155516a71ff6f0c98..e627f81a70afe86f36f3856c74828c863844dcd3 100644
--- a/indra/newview/skins/default/xui/nl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/nl/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Nabewerkinginstellingen">
+<floater name="Post-Process Floater" title="NABEWERKINGINSTELLINGEN">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Kleurfilter" name="wmiColorFilterPanel">
 			<check_box label="Inschakelen" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_postcard.xml b/indra/newview/skins/default/xui/nl/floater_postcard.xml
index a6d10f2244a24f06c6a4b284155baa82c4a09b76..c2d092fdd46cc95a4533f3627e5e2cf7d233b1fd 100644
--- a/indra/newview/skins/default/xui/nl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/nl/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Email foto">
+<floater name="Postcard" title="EMAIL FOTO">
 	<text name="to_label">
 		Ontvanger e-mail:
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_preferences.xml b/indra/newview/skins/default/xui/nl/floater_preferences.xml
index 25984ee65a20b4216eab172349403bb32b173850..6fc8005fd24764bb622aa1fd724598d8618164b8 100644
--- a/indra/newview/skins/default/xui/nl/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/nl/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Voorkeuren">
+<floater name="Preferences" title="VOORKEUREN">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
 	<button label="Toepassen" label_selected="Toepassen" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_region_info.xml b/indra/newview/skins/default/xui/nl/floater_region_info.xml
index 3d4386bc1637a3d8030fc58aca90425fb29fcf92..0a98da3b4e0a9e407125788edfcfc8208a48a653 100644
--- a/indra/newview/skins/default/xui/nl/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/nl/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Regio/estate"/>
+<floater name="regioninfo" title="REGIO/ESTATE"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
index 012198d7b6f579331180ab90449395a4170e2386..19b11ede0a963a5fd4fc2b948029347852a90067 100644
--- a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Misbruik rapporteren">
+<floater name="floater_report_abuse" title="MISBRUIK RAPPORTEREN">
 	<check_box label="Voeg schermafbeelding toe" name="screen_check"/>
 	<text name="reporter_title" width="110">
 		Rapporteur:
diff --git a/indra/newview/skins/default/xui/nl/floater_script_debug.xml b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
index 306ad5d1a3d1e08c9095625d45d3d4f21fe1e179..15e57f30d66bfb14833577cbe96b5320a8e0a311 100644
--- a/indra/newview/skins/default/xui/nl/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/nl/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Script waarschuwing/fout">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Alle scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_script_queue.xml b/indra/newview/skins/default/xui/nl/floater_script_queue.xml
index 38c227e53c2ea7a6244295541f26eac103261acb..f79ad8faf3cece6aa2d17b409d0d12b75191cc7c 100644
--- a/indra/newview/skins/default/xui/nl/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/nl/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Voortgang opnieuw instellen">
+<floater name="queue" title="VOORTGANG OPNIEUW INSTELLEN">
 	<button label="Sluiten" label_selected="Sluiten" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_sell_land.xml b/indra/newview/skins/default/xui/nl/floater_sell_land.xml
index 3981f3ccc23efc71c43bf826f92deb4b28785ba4..468a383cfc0060c76ac4e6bd247de8831114bf3e 100644
--- a/indra/newview/skins/default/xui/nl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Verkoop land">
+<floater name="sell land" title="VERKOOP LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/nl/floater_snapshot.xml b/indra/newview/skins/default/xui/nl/floater_snapshot.xml
index c7174d42f3c908775402fd4530c669f8913f299d..251f3690da06c6935321caa1c42625c725acdb00 100644
--- a/indra/newview/skins/default/xui/nl/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/nl/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Fotovoorbeeld">
+<floater name="Snapshot" title="FOTOVOORBEELD">
 	<text name="type_label">
 		Fotobestemming
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml
index b899c32a56c19935d3e954dd856358b48df9930a..7684a73663b63eee7fa0670d5ec7d63608d64bfc 100644
--- a/indra/newview/skins/default/xui/nl/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/nl/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statistieken"/>
+<floater name="stats floater" title="STATISTIEKEN"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_telehub.xml b/indra/newview/skins/default/xui/nl/floater_telehub.xml
index 8fe8e06c03af7aa971e95a75fb3726140a1629fa..7b745d967c931dfcdbff25293209cdf490ebdf2b 100644
--- a/indra/newview/skins/default/xui/nl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/nl/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" width="292">
+<floater name="telehub" title="TELEHUB" width="292">
 	<text name="status_text_connected">
 		Telehub verbonden met object [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
index 13a68747c6febc11d49a8a0e835d7edae7c252fb..c8caa8caf4928c2b9fa6abc6e5bcc58ef93813c9 100644
--- a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Kies: Textuur">
+<floater name="texture picker" title="KIES: TEXTUUR">
 	<string name="choose_picture">
 		Klik om een afbeelding te kiezen
 	</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index cb0c1ad89a9bb5ab8cc8ff7c1a10e2f0b30ed20e..f79d3dbd6b99f7883fd59db1ea2d223c13112576 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Bouwen" width="288">
+<floater name="toolbox floater" title="" short_title="BOUWEN" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_top_objects.xml b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
index cc252352ebc1f8f19752cb5e0b9aa022a51adb66..2bbb701df8dd39688fad0cb1c6ea34091b7d65c0 100644
--- a/indra/newview/skins/default/xui/nl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="laden…">
+<floater name="top_objects" title="LADEN…">
 	<text name="title_text">
 		Laden…
 	</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml
index 2238008fd80ed38dba326d9878ca7fca89ea8dd1..1fb1ca241b95e6a128670530ee4c56b7d54afcde 100644
--- a/indra/newview/skins/default/xui/nl/floater_water.xml
+++ b/indra/newview/skins/default/xui/nl/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Geavanceerde water editor">
+<floater name="Water Floater" title="GEAVANCEERDE WATER EDITOR">
 	<combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" />
 	<text name="KeyFramePresetsText">
 		Watervoorinstellingen
diff --git a/indra/newview/skins/default/xui/nl/floater_world_map.xml b/indra/newview/skins/default/xui/nl/floater_world_map.xml
index e1eebaf92f36338be7d564d3a887125a76a7097f..bc14f92126b86e4dc401cb32b194fefaceacb3f3 100644
--- a/indra/newview/skins/default/xui/nl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/nl/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Wereldkaart">
+<floater name="worldmap" title="WERELDKAART">
 	<tab_container name="maptab">
 		<panel label="Objecten" name="objects_mapview"/>
 		<panel label="Terrein" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
index 00f8c087de94185cc423c228fe2d6e4476ddfa1c..172395e20a27b6ca938f09d58240b33ee8ac636e 100644
--- a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Inwoner" />
-   <string name="AcctTypeTrial"
-    value="Proef" />
-   <string name="AcctTypeCharterMember"
-    value="Charter lid" />
-   <string name="AcctTypeEmployee"
-    value="Linden Lab werknemer" />
-   <string name="PaymentInfoUsed"
-    value="Betalingsinformatie gebruikt" />
-   <string name="PaymentInfoOnFile"
-    value="Betalingsinformatie aanwezig" />
-   <string name="NoPaymentInfoOnFile"
-    value="Geen betalingsinfo aanwezig" />
-   <string name="AgeVerified"
-    value="Leeftijd geverifieerd" />
-   <string name="NotAgeVerified"
-    value="Leeftijd niet geverifieerd" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=nl
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Antwoord bij Niet Storen:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Inwoner" />
+   <string name="AcctTypeTrial"
+    value="Proef" />
+   <string name="AcctTypeCharterMember"
+    value="Charter lid" />
+   <string name="AcctTypeEmployee"
+    value="Linden Lab werknemer" />
+   <string name="PaymentInfoUsed"
+    value="Betalingsinformatie gebruikt" />
+   <string name="PaymentInfoOnFile"
+    value="Betalingsinformatie aanwezig" />
+   <string name="NoPaymentInfoOnFile"
+    value="Geen betalingsinfo aanwezig" />
+   <string name="AgeVerified"
+    value="Leeftijd geverifieerd" />
+   <string name="NotAgeVerified"
+    value="Leeftijd niet geverifieerd" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=nl
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Partner:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Antwoord bij Niet Storen:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
index 83d4b717a76555530c13f992b1cd41b5db9086c9..d456ea26b422892480e8634ffbc5a0d3f6190fe0 100755
--- a/indra/newview/skins/default/xui/pl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="O Posiadłości">
+<floater name="floaterland" title="O POSIADŁOŚCI">
 	<tab_container name="landtab">
 		<panel label="Ogólne" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml
index 65a1bb85ea696730f9e7b224d204ce107c4e6056..37e35ed1e96efa7165d6e52d896f4e2769c7d3c0 100755
--- a/indra/newview/skins/default/xui/pl/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pl/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_auction" title="Rozpocznij Sprzedaż Posiadłości">
+<floater name="floater_auction" title="ROZPOCZNIJ SPRZEDAŻ POSIADŁOŚCI">
 	<check_box label="Zawierając żółte ogrodzenie" name="fence_check" />
 	<button label="Zdjęce" label_selected="Zdjęce" name="snapshot_btn" />
 	<button label="OK" label_selected="OK" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
index cf4dcb91bf70327b423be70822c4c0109566f2db..8c09f7294ca84965b6e272e444ad3667db9f7ac5 100755
--- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Wybierz Rezydenta">
+<floater name="avatarpicker" title="WYBIERZ REZYDENTA">
 	<tab_container name="ResidentChooserTabs">
 		<panel label="Znajdź" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
index b27c90b8f2f14ee4077aed70a6831e2306428e88..dce2330807f8390f3a265fbb001a1a71ae1de57a 100755
--- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="avatar_texture_debug" title="Tekstury Awatara">
+<floater name="avatar_texture_debug" title="TEKSTURY AWATARA">
 	<text name="baked_label">
 		Tekstury Renderowane
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml
index fd12d1359595648ef838bd4ac47a922c61df8f2c..6e7013f2d7418430a9896d43dab045061dbd3d3a 100644
--- a/indra/newview/skins/default/xui/pl/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/pl/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Emitery">
+<floater name="beacons" title="EMITERY">
 	<panel name="beacons_panel">
 		<check_box label="Obiekty Dotykalne" name="touch_only"/>
 		<check_box label="Obiekty Skryptowane" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml
index 7cbc4106144366eabf5892fde0b306eb51c7aa28..f538be218cffb7f41d5da5d51232432cdb190856 100755
--- a/indra/newview/skins/default/xui/pl/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="build options floater" title="Opcje Siatki">
+<floater name="build options floater" title="OPCJE SIATKI">
 	<spinner label="Jednostka Siatki (metry)" name="GridResolution" />
 	<spinner label="Rozmiary Siatki (metry)" name="GridDrawSize" />
 	<check_box label="Udostępnij Podjednostkowe Dopasowywanie" name="GridSubUnit" />
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index a99acdb23853b55d2d0dfcb6ca2ee3cc7f67047f..f06615642eea90677170efb9921f406c378bac63 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Hurtowa zmiana praw zawartości">
+<floater name="floaterbulkperms" title="HURTOWA ZMIANA PRAW ZAWARTOÅšCI">
 	<text name="applyto">
 		Rodzaj Zawartości
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml
index 365268dbd671c23ce564d6b3f20cbd01f159b429..10f9d73284f2a051deff896e1ffa4c8c16c8550f 100755
--- a/indra/newview/skins/default/xui/pl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_bumps" title="Zderzenia, Popchnięcia, Uderzenia">
+<floater name="floater_bumps" title="ZDERZENIA, POPCHNIĘCIA, UDERZENIA">
 	<string name="none_detected">
 		Brak
 	</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
index 395bcb4ea9cc014cf12434ae9009fcf72df376f4..ebe1c9dfd8936a0ee3fe70ae8f2cd4f5958dfcdb 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Kup Zawartość">
+<floater name="floater_buy_contents" title="KUP ZAWARTOŚĆ">
 	<text name="contains_text">
 		[NAME] zawiera:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
index a5c0a2498ab68c3c555d307a585701518649c5de..b0b8935433c4e93392b0b666ff3f6e1d731c5706 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="buy currency" title="Kup $L">
+<floater name="buy currency" title="KUP $L">
 	<text name="info_buying">
 		Kup L$:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
index ff371b38c083a77989d44b559e47314c01f12956..648888828be926b032bbe3541065a7b47e1ea60f 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Buy Land">
+<floater name="buy land" title="BUY LAND">
 	<text name="region_name_label">
 		Region:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
index b0868a46a249110600c31c6b8bba83e18d57e773..bad798222864676174fae10eb1357da1147ab8ac 100755
--- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="contents" title="Kup kopiÄ™ obiektu">
+<floater name="contents" title="KUP KOPIĘ OBIEKTU">
 	<text name="contents_text">
 		i jej zawartość:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
index 789c40e48c6876a32ff61dd403632b7541df09d0..72b6617094894d6d965c029e2ee914c9fd2e55d6 100755
--- a/indra/newview/skins/default/xui/pl/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupy">
+<floater name="groups" title="GRUPY">
 	<text name="groupdesc">
 		Wybierz grupÄ™:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
index d6ffe1837ab9e8e3ad8c484d0231e06516ecb868..904a2cc2704ace9038d2bf7e0f6d8cf3d6f0f727 100755
--- a/indra/newview/skins/default/xui/pl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="ColorPicker" title="Wybór Koloru">
+<floater name="ColorPicker" title="WYBÓR KOLORU">
 	<text name="r_val_text">
 		Czerwony:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml
index 64d9300621c534e5a5b51ded84b647f888c6ea5f..0c01d15faff7f26c56805a703fda7cda372b3f5c 100755
--- a/indra/newview/skins/default/xui/pl/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pl/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="WyglÄ…d">
+<floater name="floater customize" title="WYGLÄ„D">
 	<tab_container name="customize tab container">
 		<placeholder label="Części Ciała" name="body_parts_placeholder"/>
 		<panel label="Kształt" name="Shape">
diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
index ea8db99570f269f4b59469a2b954ebf59978c346..6671bb853e40e746ad1167e4b3d6a2fd1ce42448 100755
--- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Day Cycle Floater" title="Edytor Cyklu Dnia">
+<floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Cykl Dnia" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp" />
diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
index 0122aa819eb758a848f43a06d183f4e7a70b36d0..e79478731d143fbd279422ed332471dce26999fe 100755
--- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="floater_device_settings"
-     title="Ustawienia Urządzeń Komunikacji Głosowej" />
+     title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ" />
diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
index 3e0809b193de75ad8464655bc984cd3dd3b7b52c..e197d94b271da6412211d426c422b8eea836f283 100755
--- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Environment Editor Floater" title="Edytor Åšrodowiska">
+<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA">
 	<text name="EnvTimeText">
 		Czas
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_font_test.xml b/indra/newview/skins/default/xui/pl/floater_font_test.xml
index 586d2690b3c7388904323fee552b76df157d8521..019cee3e1e55da88866422f5fab45bad04590cc1 100644
--- a/indra/newview/skins/default/xui/pl/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/pl/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Czcionka Tekstu">
+<floater name="contents" title="CZCIONKA TEKSTU">
 	<text name="linea">
 		OverrideTest, powinno wyświetlać się jako Times. (From default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml
index a05408dfc5c70ed79dd355ade067da306e2ed3f0..4685eb6afe6fdb3291417c249dc3e06d93be887e 100755
--- a/indra/newview/skins/default/xui/pl/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="gestures" title="Aktywne Gesty">
+<floater name="gestures" title="AKTYWNE GESTY">
 	<text name="help_label">
 		Kliknij podwójnie by aktywować głos i animację gestu.
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
index df821f3b6d0bbc83d6f9a85383c1fdf0b59e5397..a3ccffac03322425a74c9f4fddfdbd2b46ae260f 100755
--- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Boskie Narzędzia">
+<floater name="godtools floater" title="BOSKIE NARZĘDZIA">
 	<tab_container name="GodTools Tabs">
 		<panel label="Grid" name="grid">
 			<button width="205" label="Usuń wszystkich użytkowników" label_selected="Usuń wszystkich użytkowników" name="Kick all users"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
index f1e6e5ea9e2f43bd7e8b18f93830ee5e2d1cc301..39695a67b6ccf3111e609bbb0ee309f436cd315e 100755
--- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Hardware Settings Floater" title="Ustawienia Sprzętowe">
+<floater name="Hardware Settings Floater" title="USTAWIENIA SPRZĘTOWE">
 	<text name="Filtering:">
 		Filtrowanie:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml
index 916473f063d80dd646a74aafffeaec3d4547a77e..ff2d702132dd2f382abcd4f77899d8ac84ece777 100755
--- a/indra/newview/skins/default/xui/pl/floater_hud.xml
+++ b/indra/newview/skins/default/xui/pl/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_hud" title="Samouczek" />
+<floater name="floater_hud" title="SAMOUCZEK" />
diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml
index 1efdced5278fd3aa54345237df9605e0a387bfb4..c98e0541d82bff7ce598a8d91fb6fab643877958 100755
--- a/indra/newview/skins/default/xui/pl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="inspect" title="Inspekcja Obiektów">
+<floater name="inspect" title="INSPEKCJA OBIEKTÓW">
 	<scroll_list name="object_list" tool_tip="">
 		<column label="Nazwa" name="object_name" />
 		<column label="Właściciel" name="owner_name" />
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml
index 6df978de6950c62d9dc7e93e832bf50e378e3504..157be76c4d5f779b426f5eec62db731444d22c0b 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Moja Szafa">
+<floater name="Inventory" title="MOJA SZAFA">
 	<search_editor label="Wyszukiwarka" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Wszystkie Obiekty" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
index c32d1eeabfb5c58d07b3c5072684e87257e37d59..665172dd49a589c7c30c61c3516d2143dc2c0889 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="item properties" title="Właściwości Obiektów w Szafie">
+<floater name="item properties" title="WŁAŚCIWOŚCI OBIEKTÓW W SZAFIE">
 	<text name="LabelItemNameTitle">
 		Nazwa:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
index 2224c026ef0977f50a91acb8d05e1603add15bf9..9204262304d0a24240645e571bfd887e501d1135 100755
--- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Inventory Finder" title="Nowe Obiekty">
+<floater name="Inventory Finder" title="NOWE OBIEKTY">
 	<check_box label="Animacje" name="check_animation" />
 	<check_box label="Wizytówki" name="check_calling_card" />
 	<check_box label="Ubrania" name="check_clothing" />
diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml
index 2ab92dfbb7b4f0e09e5465141695e0ec1c2032ee..22ac458b85d3cbebad9a5b6dd7d597d574c556b0 100755
--- a/indra/newview/skins/default/xui/pl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" width="590" title="Konfiguracja Joysticka">
+<floater name="Joystick" width="590" title="KONFIGURACJA JOYSTICKA">
   <check_box name="enable_joystick" label="Aktywuj Joystick:"/>
 	<text left="130" name="joystick_type" width="360"/>
   <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130"  name="JoystickAxis1"/>
@@ -116,4 +116,4 @@
   <string name="NoDevice">
 		brak podłącznego urządzenia
 	</string>
-</floater>
\ No newline at end of file
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
index 949289594e005f55629756d5f0b924219f06b696..69d563bdbabdbf297d5d7f860d1df4f714e55be2 100755
--- a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_lagmeter" title="Pomiar Lagów">
+<floater name="floater_lagmeter" title="POMIAR LAGÓW">
 	<button label="" label_selected="" name="client_lagmeter"
 	     tool_tip="Status lagów klienta" />
 	<text name="client">
diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
index 29268f0e97644b0b533ffc58f226b6640b239bdf..13e6a8b16de737dbcd1374fe416f7858975f4d25 100755
--- a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Moja posiadłość">
+<floater name="land holdings floater" title="MOJA POSIADŁOŚĆ">
 	<scroll_list name="parcel list">
 		<column label="Nazwa posiadłości" name="name"/>
 		<column label="Region" name="location"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
index 94efd7afcb3eb199a6f8c18d48407511405b7926..8120ff8c777d8b481807fae0932bc9e1cd1fd958 100755
--- a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="Skrypt: Nowy Skrypt">
+<floater name="script ed float" title="SKRYPT: NOWY SKRYPT">
 	<button label="Zresetuj" label_selected="Zresetuj" name="Reset" />
 	<check_box label="WÅ‚Ä…cz" name="running" />
 	<check_box label="Mono" name="mono" />
diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
index a0fa00dffea57a29f31381fc4f2e02165377b861..5601aa44649cd4f80950e80049da2dec50cf6f8e 100755
--- a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Idź za kursorem" name="lock_check" />
 	<combo_box label="Zablokuj" name="history_combo" />
 	<button label="Wróć" name="back_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
index 2fb4287d900a77303fd03059f643cc713df66d27..74210c75e59a5e15a4be92bd05da0557739d0525 100755
--- a/indra/newview/skins/default/xui/pl/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_about" title="Przeglądarka Mediów">
+<floater name="floater_about" title="PRZEGLĄDARKA MEDIÓW">
 	<layout_stack name="stack1">
 		<layout_panel name="nav_controls">
 			<button label="Wróć" name="back" />
diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
index fe977e96c5dbddc8090f35b44bd843769215ea16..88a878af7257e7820413d1a35bb2460a9d3cf5b3 100755
--- a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="MemLeak" title="Symulacja Przecieków Alokacji Pamięci">
+<floater name="MemLeak" title="SYMULACJA PRZECIEKÓW ALOKACJI PAMIĘCI">
 	<spinner label="Prędkość Przecieków (byty na klatkę):" name="leak_speed" />
 	<spinner label="Max Przecieki (MB):" name="max_leak" />
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
index 310810db76af97d3171ee282787129b2ba3d760e..dd30f749e303a9b8a4684aec61be700c1354df4b 100755
--- a/indra/newview/skins/default/xui/pl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="mute by name" title="Wycisz Obiekt Według Nazwy" height="160" min_height="160" >
+<floater name="mute by name" title="WYCISZ OBIEKT WEDŁUG NAZWY" height="160" min_height="160" >
 	<text name="message">
 		Wyciszenie obiektu jest skuteczne jedynie na czacie oraz w
 wiadomościach IM. Nie obejmuje natomiast dźwięków.
diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
index cc5f1f2a01ba11d37000ad5c432e5e2636775210..0bcf6ba4d50e1dbdf945122c05ab7e859b0609e5 100755
--- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_my_friends" title="Kontakty">
+<floater name="floater_my_friends" title="KONTAKTY">
 	<tab_container name="friends_and_groups">
 		<panel label="Znajomi" name="friends_panel" />
 		<panel label="Grupy" name="groups_panel" />
diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml
index 0470f4d6dcf2acc1a8817554477271ac34ff2575..fbbed0f11dfaf2f1902fb83395dd46d5ce3fedb3 100755
--- a/indra/newview/skins/default/xui/pl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="objectcontents" title="Zawartość Obiektu">
+<floater name="objectcontents" title="ZAWARTOŚĆ OBIEKTU">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
index dd7cbe1f79932269ad4916e26bd0dafdbe7ee1aa..834552e2b005ef7973ffac1f5a69a0508a680353 100644
--- a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Prawa Domyślne">
+<floater name="perm prefs" title="PRAWA DOMYÅšLNE">
 	<panel label="Prawa" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Udostępnij grupie" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml
index 0081d1d3a7e4d15f742011d5f2db4f471e28d649..6bd91f97b1b8fefad9108e2e6ca3e43a9a11efc9 100755
--- a/indra/newview/skins/default/xui/pl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Post-Process Floater" title="Ustawienia Przetwarzania Końcowego">
+<floater name="Post-Process Floater" title="USTAWIENIA PRZETWARZANIA KOŃCOWEGO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Kolor Filtru" name="wmiColorFilterPanel">
 			<check_box label="Udostępnij" name="wmiColorFilterToggle" />
diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml
index e5bdaf2ba991d98928633512fcc61d20f83864f7..8f4018924d0c8d4fbd3075d95504148a53b78dfa 100755
--- a/indra/newview/skins/default/xui/pl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Wyślij Pocztówkę">
+<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ">
 	<text name="to_label">
 		Email Odbiorcy:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml
index 380738425efd088e949a07a1b4af70cc675d2b4f..2be663283fba0b3400fc2fa6d027bff303ecb41f 100755
--- a/indra/newview/skins/default/xui/pl/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Preferences" title="Ustawienia">
+<floater name="Preferences" title="USTAWIENIA">
 	<button label="OK" label_selected="OK" name="OK" />
 	<button label="Anuluj" label_selected="Anuluj" name="Cancel" />
 	<button label="Zastosuj" label_selected="Zastosuj" name="Apply" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
index cc7d2761178551929eacd86ff132a5d64119be2f..eae9ba2690f1a92c1c2cf89fae3e3ccf09c1e20b 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="classified_preview" title="Reklama" />
+<floater name="classified_preview" title="REKLAMA" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
index 75e17f6fa26bf7154d225b66d69fd026e6cdb585..9fc0ff4da61d3c2cd1c7e9eb9e35b2fb2acb4f32 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="event_preview" title="Informacje o Imprezie" />
+<floater name="event_preview" title="INFORMACJE O IMPREZIE" />
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
index 0b3b9063c42d0037d70e9c018a1011a169290e68..b9f80490ab021118228bc2e6157bab0da17accfd 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Zapisz" label_selected="Zapisz" name="Save" />
 	<text name="desc txt">
 		Opis:
diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml
index 6e632fd9c31d4ca7c478be3618845b3da444ff09..ca3c1391db1eb5365267fab3a13456a4623a3ba9 100755
--- a/indra/newview/skins/default/xui/pl/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/pl/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="regioninfo" title="Region/MajÄ…tek" />
+<floater name="regioninfo" title="REGION/MAJÄ„TEK" />
diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
index 853c669adefbd4a5e31bfd7e84ab9f2bdf8872c5..c1efcffb1e32bc4dc878b0066e93508acb9854af 100755
--- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Raport o Nadużyciu">
+<floater name="floater_report_abuse" title="RAPORT O NADUŻYCIU">
 	<texture_picker label="" name="screenshot"/>
 	<check_box label="Załącz zdjęcie ekranu" name="screen_check"/>
 	<text name="reporter_title">
diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug.xml b/indra/newview/skins/default/xui/pl/floater_script_debug.xml
index b41add8246540167ccd410d13cb803dad0277d53..714a600262850c5f1c6d92da465fff02034abbe9 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <multi_floater name="script debug floater" title="Ostrzeżenie/Błąd Skryptu">
 	<tab_container name="Preview Tabs">
-		<floater label="Skrypt" name="all_scripts" title="[All scripts]" />
+		<floater label="Skrypt" name="all_scripts" title="[ALL SCRIPTS]" />
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
index ca3fde33e7c6fba377f5494fbe85d38d19c07648..e3e72e15a3d8d8ddfad7585161bf2dfbb60ec565 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Skrypt: Skrypt Obrotu">
+<floater name="preview lsl text" title="SKRYPT: SKRYPT OBROTU">
 	<text name="desc txt">
 		Opis:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
index 70d4669a077d6e1906edf396120793a40486732b..7655f5fcaced47628e32f52c1108764194685f8c 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="queue" title="Zresetuj PracÄ™ w Toku">
+<floater name="queue" title="ZRESETUJ PRACĘ W TOKU">
 	<button label="Zamknij" label_selected="Zamknij" name="close" />
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml
index 50a9de15005199812ff2782b96e58886aa171d6d..255ab4264c0843710c158709b4d5dd66b81827e8 100755
--- a/indra/newview/skins/default/xui/pl/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script search" title="Szukaj Skryptu">
+<floater name="script search" title="SZUKAJ SKRYPTU">
 	<check_box label="CapsLoock Nieaktywny" name="case_text" />
 	<button label="Szukaj" label_selected="Szukaj" name="search_btn" />
 	<button label="Zamień" label_selected="Zamień" name="replace_btn" />
diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
index 579dcd6745dd681f41516673b7193b236d7e13c2..a306ec2c346d5071787f5fc44cdd27fa5abeb348 100755
--- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="sell land" title="Sell Land">
+<floater name="sell land" title="SELL LAND">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
index 99fa444a1bcbbdf8761647056b1c06f4623361fd..f87e2edecc2bd095ac76d58b5958356cb107c157 100755
--- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Ustawienia Usuwania Błędów">
+<floater name="settings_debug" title="USTAWIENIA USUWANIA BŁĘDÓW">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="PRAWDA" />
 		<combo_box.item name="FALSE" label="NIEPRAWDA" />
diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
index 4945cf641324cccf7271d38cd305ef92a2be9570..c807087170a59a2e00126311966836c8354ebc03 100755
--- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Wygląd Zdjęcia">
+<floater name="Snapshot" title="WYGLĄD ZDJĘCIA">
 	<text name="type_label">
 		Lokacja zapisu
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
index 2461aebbcf1ca1e05fc3f6cc60c0caa8179e0a8f..0826508fd6c7bdfc69463475b7bc836f574eb3d0 100755
--- a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="dźwięk.wav">
+<floater name="Sound Preview" title="DŹWIĘK.WAV">
 	<text name="name_label">
 		Opis:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml
index 933801bbda23f4406a0aaa253769f4e6cce6dbfb..b7025e484d50a385427d8c9fdbe7b641d8ca549c 100644
--- a/indra/newview/skins/default/xui/pl/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/pl/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statystyki"/>
+<floater name="stats floater" title="STATYSTYKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml
index 917ab95eccb14b11dacef064293573a2cb44019d..9f564452a925447dccfc6d028e5325c46f982f89 100755
--- a/indra/newview/skins/default/xui/pl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pl/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="telehub" title="Obsługa Teleportera" min_height="300" height="300" >
+<floater name="telehub" title="OBSŁUGA TELEPORTERA" min_height="300" height="300" >
 	<text name="status_text_connected" width="250">
 		Teleporter połączony z obiektem [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
index 6d4df12e4bb16875e8de7f09d34bd15311116c2a..48366e2b6459798673902a6837b7576d09768929 100755
--- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Wybór Tekstury">
+<floater name="texture picker" title="WYBÓR TEKSTURY">
 	<string name="choose_picture">
 		Kliknij by wybrać obraz
 	</string>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index c9e7a7e9eb8370b2c2358258c44248c20fc5d772..e898c283c586a6b6188d773a99d503568c95c82c 100755
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Buduj">
+<floater name="toolbox floater" title="" short_title="BUDUJ">
 	<button label="" label_selected="" name="button focus" tool_tip="Zbliżenie"/>
 	<button label="" label_selected="" name="button move" tool_tip="Przesunięcie"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Edycja"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
index 44d838035d145d4f1883a0882b65905459264bd4..e7299b0abb8c434bf39ede64ef082d633b66ec33 100755
--- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="Ładowanie...">
+<floater name="top_objects" title="ŁADOWANIE...">
 	<text name="title_text">
 		Ładowanie...
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml
index a22b5809dc10223d14de99ab33af1f7fbfa83a6d..7333633c1d7dbeb74c6bf3f14852b34e2707ea5f 100755
--- a/indra/newview/skins/default/xui/pl/floater_water.xml
+++ b/indra/newview/skins/default/xui/pl/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Water Floater" title="Zaawansowany Edytor Wody">
+<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY">
 	<text name="KeyFramePresetsText">
 		Ustawienia Wody:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
index 94c20c06f72bda940cdcbe89d23fa64622c40d54..86ef9300da38f4c4c0c99fc4f4ebd1455f626c72 100755
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="Zaawansowany Edytor Nieba">
+<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA">
 	<text name="KeyFramePresetsText">
 		Ustawienia Nieba:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml
index 65f1c8ae592551b3503de822b6bcfcc27c8c9cc3..36e3b0651bf51be9c630dabaa506328efa21f4d9 100755
--- a/indra/newview/skins/default/xui/pl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa Åšwiata">
+<floater name="worldmap" title="MAPA ÅšWIATA">
 	<tab_container name="maptab">
 		<panel label="Obiekty" name="objects_mapview"/>
 		<panel label="Teren" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index e449a92d7e58796c1339edb9b4d6afa48f3b3768..97fa3118f8fd4c45c57c3f863e1adbfdfc933b7e 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Rezydent" />
-   <string name="AcctTypeTrial"
-    value="Próbne" />
-   <string name="AcctTypeCharterMember"
-    value="Członek-zalożyciel" />
-   <string name="AcctTypeEmployee"
-    value="Pracownik Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Dane Konta Używane" />
-   <string name="PaymentInfoOnFile"
-    value="Dane Konta Dostępne" />
-   <string name="NoPaymentInfoOnFile"
-    value="Brak Danych Konta" />
-   <string name="AgeVerified"
-    value="Wiek Zweryfikowany" />
-   <string name="NotAgeVerified"
-    value="Brak Weryfikacji Wieku" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=pl
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Partner:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Pracuś Mówi:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Rezydent" />
+   <string name="AcctTypeTrial"
+    value="Próbne" />
+   <string name="AcctTypeCharterMember"
+    value="Członek-zalożyciel" />
+   <string name="AcctTypeEmployee"
+    value="Pracownik Linden Lab" />
+   <string name="PaymentInfoUsed"
+    value="Dane Konta Używane" />
+   <string name="PaymentInfoOnFile"
+    value="Dane Konta Dostępne" />
+   <string name="NoPaymentInfoOnFile"
+    value="Brak Danych Konta" />
+   <string name="AgeVerified"
+    value="Wiek Zweryfikowany" />
+   <string name="NotAgeVerified"
+    value="Brak Weryfikacji Wieku" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=pl
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Partner:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Pracuś Mówi:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index 12cc879cbc4cc7d87332ad736a99c9bc93fe04f3..9c19b128937f225e5a87f9f338e5fb262f0b78b4 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_about" title="Sobre o [APP_NAME]">
+<floater name="floater_about" title="SOBRE O [APP_NAME]">
 <tab_container name="about_tab">
 	<panel name="credits_panel">
 	<text_editor name="credits_editor">
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index 417d24608e418d14fbb3b63705ef81df23ebd6c7..19981cf48cc3f34478ab7b27af84ea0d68d9c5e8 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterland" title="Sobre o Terreno">
+<floater name="floaterland" title="SOBRE O TERRENO">
 	<tab_container name="landtab">
 		<panel label="Geral" name="land_general_panel">
 			<text name="Name:">
diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml
index 48e0b924006841186767e41f6f820835e5fbb4ea..34cd17d781be787491cf4aaf39d9ca0e828f2f75 100644
--- a/indra/newview/skins/default/xui/pt/floater_auction.xml
+++ b/indra/newview/skins/default/xui/pt/floater_auction.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_auction" title="Iniciar a venda de terrenos da Linden">
+<floater name="floater_auction" title="INICIAR A VENDA DE TERRENOS DA LINDEN">
 	<check_box label="Incluir marcador de seleção amarelo" name="fence_check"/>
 	<button label="Foto" label_selected="Foto" name="snapshot_btn"/>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
index 4e1598c8fafed7443cf62a0009f1cac869f5f253..186ef30e1b47adfdb548823462356e5e4cfa700f 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Escolha o Residente" min_width="285" width="285">
+<floater name="avatarpicker" title="ESCOLHA O RESIDENTE" min_width="285" width="285">
 	<tab_container name="ResidentChooserTabs" width="275">
 		<panel label="Buscar" name="SearchPanel">
 			<text name="InstructSearchResidentName">
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
index db0023d748b8ef3f1191b109f4d3c8cb63d1ad7d..04a78efb124e039bee65fece067a7a44812eacf7 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatar_texture_debug" title="Texturas do Avatar">
+<floater name="avatar_texture_debug" title="TEXTURAS DO AVATAR">
 	<text name="baked_label">
 		Texturas sobrepostas
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml
index edd1e080948de38d1a5f5de6671a7ac3f223f5c9..82f055745fbacc78c81fc8d5171bf78014efb07a 100644
--- a/indra/newview/skins/default/xui/pt/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/pt/floater_beacons.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="beacons" title="Balizas">
+<floater name="beacons" title="BALIZAS">
 	<panel name="beacons_panel">
 		<check_box label="Objetos programados com toque apenas" name="touch_only"/>
 		<check_box label="Objetos programados" name="scripted"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
index ebc9d0f0c8d2f931949de4fe456ed4af4ce3ca3f..bce78fad217c0706efcc9f403705eb618aed84a9 100644
--- a/indra/newview/skins/default/xui/pt/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="build options floater" title="Opções de grade">
+<floater name="build options floater" title="OPÇÕES DE GRADE">
 	<spinner label="Uni. Grade (metros)" name="GridResolution" width="180" label_width="122"/>
 	<spinner label="Ext. da Grade (metros)" name="GridDrawSize" width="180" label_width="122"/>
 	<check_box label="Habilitar ajuste de sub-grade" name="GridSubUnit"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
index c064d24f9627d01b92a06a860d35e60644c2d6e9..7443e197214dd58cf05ccc5371e9eaa371e81196 100644
--- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="Mudança conjunta das permissões de conteúdo">
+<floater name="floaterbulkperms" title="MUDANÇA CONJUNTA DAS PERMISSÕES DE CONTEÚDO">
 	<text name="applyto">
 		Tipos de Conteúdo
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml
index 0bc254627595dda9e21c4f98a190a040976a6c8a..1833cd4335bfa6010e9e0c6b5de1c6664b3dc39d 100644
--- a/indra/newview/skins/default/xui/pt/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bumps.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_bumps" title="Colisões, impulsos e batidas">
+<floater name="floater_bumps" title="COLISÕES, IMPULSOS E BATIDAS">
 	<text name="none_detected">
 		Nada detectado
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
index 3e8713d59efce0a6f88c22f2c20fdaa2a51e018b..322a07575a3cec44e181fe6b62a4edbf2a79b135 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_buy_contents" title="Comprar conteúdo">
+<floater name="floater_buy_contents" title="COMPRAR CONTEÚDO">
 	<text name="contains_text">
 		[NAME] contém:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
index 42ba2054757a1c3411098ccd761412aafd4b5542..ceeb070c4e47bd5da15e7d29a4af5bc3a2223c4f 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy currency" title="Comprar Dinheiro">
+<floater name="buy currency" title="COMPRAR DINHEIRO">
 	<text name="info_buying">
 		Comprando Dinheiro:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
index 2caf057283f42acd94d59981c2a972e2d6cdeaed..6e502ad6e56e483f7e9578a5e4d3212cdf12e5b3 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="buy land" title="Comprar terra">
+<floater name="buy land" title="COMPRAR TERRA">
 	<text name="region_name_label">
 		Região:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
index b8e1085471894b42bda447cd1f6a5cfc8eabcf9a..e9968ed8f81e620e1317be9e5b0cfb2a26a083c9 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Comprar cópia do objeto">
+<floater name="contents" title="COMPRAR CÓPIA DO OBJETO">
 	<text name="contents_text">
 		e seus conteúdos:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
index 449d57871601056ad9ee040a96789c288f4802c1..ae395734e9fa15bdfe91809a4d8d1bde78da27b0 100644
--- a/indra/newview/skins/default/xui/pt/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="groups" title="Grupos">
+<floater name="groups" title="GRUPOS">
 	<text name="groupdesc">
 		Escolha um grupo:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
index 76da972b5d8d2f0950f4b344cd7529d86169d24d..6a4263f4ff349e418a86e225b233983ebff94f72 100644
--- a/indra/newview/skins/default/xui/pt/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="ColorPicker" title="Seletor de Cor">
+<floater name="ColorPicker" title="SELETOR DE COR">
 	<text name="r_val_text">
 		Vermelho:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
index 4bced69664ef9d238074c745643f1f27ed59c2e7..55946933e7c723bfae47e658e2df01fb9ac1068f 100644
--- a/indra/newview/skins/default/xui/pt/floater_customize.xml
+++ b/indra/newview/skins/default/xui/pt/floater_customize.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="Aparência" width="546">
+<floater name="floater customize" title="APARÊNCIA" width="546">
 	<tab_container name="customize tab container" tab_min_width="115" width="544">
 		<placeholder label="Partes de corpo" name="body_parts_placeholder"/>
 		<panel label="Forma" name="Shape">
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
index f02cca9c2543fcec0c2f9523cd252c544421e9c2..42f34a3d827d5b81ca960b47c8c43a60b3cb3638 100644
--- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="Editor de ciclo de dia">
+<floater name="Day Cycle Floater" title="EDITOR DE CICLO DE DIA">
 	<tab_container name="Day Cycle Tabs">
 		<panel label="Ciclo do dia" name="Day Cycle">
 			<button label="?" name="WLDayCycleHelp"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
index 9ce773116c4cf2091add5ab10bedf51660d1c024..fa4da834b8743283c5d4f7a478f62f9c9202100b 100644
--- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="Ajustes do Dispositivo de Conversa por Voz"/>
+<floater name="floater_device_settings" title="AJUSTES DO DISPOSITIVO DE CONVERSA POR VOZ"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
index d3ed760551b122bc119d15e489415c7816b603cc..4a43801b48fab43bb2a5aa076f489fec92be1cc9 100644
--- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="Editor do Ambiente">
+<floater name="Environment Editor Floater" title="EDITOR DO AMBIENTE">
 	<text name="EnvTimeText">
 		Hora do Dia
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml
index eb52d3341d90851598c19b86d6baadce3f686da2..c506cdb12d6d0838f11ce144a9fb880eb1dd3a7d 100644
--- a/indra/newview/skins/default/xui/pt/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/pt/floater_font_test.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="Teste de Fonte">
+<floater name="contents" title="TESTE DE FONTE">
 	<text name="linea">
 		OverrideTest, deveria aparecer aqui como Times. (De default/xui/en-us)
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml
index ac50f32dd145ac555a7923e6794624ed1afce5f3..b0bc42685d5ffbe2f0a09f3191f7df74e0fab572 100644
--- a/indra/newview/skins/default/xui/pt/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pt/floater_gesture.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="gestures" title="Gestos Ativos">
+<floater name="gestures" title="GESTOS ATIVOS">
 	<text name="help_label">
 		Clicar duas vezes no gesto para executar animações e sons.
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
index 9406658f62df6279a18bac8a5b7afdeb96dcef44..4b7b2eb34eefddfeeac9647e5e274c53a60bf61e 100644
--- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="godtools floater" title="Ferramentas de Deus">
+<floater name="godtools floater" title="FERRAMENTAS DE DEUS">
 	<tab_container name="GodTools Tabs">
 		<panel label="Grade" name="grid">
 			<button label="Desconectar todos os usuários" label_selected="Desconectar todos os usuários" name="Kick all users"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
index 0f9c1fd4871d1118d3127893010610298a0afec3..8921e6ea125e727849a853ed73ca13fd43faaf7b 100644
--- a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Hardware Settings Floater" title="Ajustes de Hardware">
+<floater name="Hardware Settings Floater" title="AJUSTES DE HARDWARE">
 	<text name="Filtering:">
 		Filtragem:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml
index d31bcedf05e8a65a275f09aedb8d98f19799181b..e458913452f0c3afb7d2244af3b00a0ab3fc51a1 100644
--- a/indra/newview/skins/default/xui/pt/floater_hud.xml
+++ b/indra/newview/skins/default/xui/pt/floater_hud.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_hud" title="Tutorial"/>
+<floater name="floater_hud" title="TUTORIAL"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml
index f3c23f008e610ed1f349bb3ea3c553272f4f2151..97c2c6eaeb8277a9490a34c8dfce16d81a11fefe 100644
--- a/indra/newview/skins/default/xui/pt/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inspect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecionar Objeto" min_width="450">
+<floater name="inspect" title="INSPECIONAR OBJETO" min_width="450">
 	<scroll_list name="object_list" tool_tip="Selecione um objeto nesta lista para destacá-lo in-world">
 		<column label="Nome do Objeto" name="object_name"/>
 		<column label="Proprietário" name="owner_name"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml
index 8a06fefe3c21c247eb1640a312d4a311664e90d7..1c2a3a923392e28deab3004c936acfbe7727f3e8 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="Inventário">
+<floater name="Inventory" title="INVENTÁRIO">
 	<search_editor label="Escreva aqui para busca" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
 		<inventory_panel label="Todos os Itens" name="All Items"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
index 69752253b6db25f69efa23bbbc925f8c69a5fd99..2a6b02f9c27cbd9c9a89ed47c4d2cdfa68be786b 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="item properties" title="Propriedades do Item de Inventário">
+<floater name="item properties" title="PROPRIEDADES DO ITEM DE INVENTÁRIO">
 	<text name="LabelItemNameTitle">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
index 83df449ae6fdf0d3627190d4a9872aecd700aa54..57cdd50dccad2e18c3db450a0fce751571136537 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="itens_de_inventário_recentes" width="165">
+<floater name="Inventory Finder" title="ITENS_DE_INVENTÁRIO_RECENTES" width="165">
 	<check_box label="Animação" name="check_animation"/>
 	<check_box label="Cartões de chamadas" name="check_calling_card"/>
 	<check_box label="Roupas" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml
index ac7b7fd02a0c8a4c6de55442f4208524e86364f7..0793a0b161daa4cac9b9c83a0592f88f92759c5a 100644
--- a/indra/newview/skins/default/xui/pt/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Joystick" title="Configuração do Joystick">
+<floater name="Joystick" title="CONFIGURAÇÃO DO JOYSTICK">
 	<check_box name="enable_joystick" label="Habilitar Joystick:"/>
 	<text left="135" name="joystick_type" width="360"/>
 	<spinner label="Mapeamento: eixo X" name="JoystickAxis1" label_width="124" width="164"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
index 6657641992b75677c38671826cb690855cdb66d1..27286334386d98bf3cab321409e6fdce25b77e42 100644
--- a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_lagmeter" title="Medidor de Atraso">
+<floater name="floater_lagmeter" title="MEDIDOR DE ATRASO">
 	<button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/>
 	<text left="30" name="client_lag_cause" right="-10" />
 	<text left="30" name="network_lag_cause" right="-10" />
diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
index 4734d665efb092e2e656754ff642d6f3c58d5d59..d8588e2f05c6d2e3142839d2db8a13697184db03 100644
--- a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="Meu terreno">
+<floater name="land holdings floater" title="MEU TERRENO">
 	<scroll_list name="parcel list">
 		<column label="Nome do Lote" name="name"/>
 		<column label="Região" name="location"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
index d2654de5898e477122032c4c1001395f096382ae..c0b726c476b563f81503fa757a0dd01f1b971ab1 100644
--- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script ed float" title="Script: Novo Script">
+<floater name="script ed float" title="SCRIPT: NOVO SCRIPT">
 	<button label="Resetar" label_selected="Resetar" name="Reset"/>
 	<check_box label="Correndo" name="running"/>
 	<check_box label="Mono" name="mono" left="86"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
index 4f60ef23a61de207dae2dadfaa8ad2d44a5762d8..49a9e7fcf5d2bdcfedc3b08683fa4929661f9b48 100644
--- a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="script ed float" title="LSL Wiki">
+<floater name="script ed float" title="LSL WIKI">
 	<check_box label="Seguir o Cursor" name="lock_check" />
 	<combo_box label="Bloquear" name="history_combo"  left_delta="120" width="70"/>
 	<button label="Anterior" name="back_btn"  left_delta="75"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
index cfaec5b410c1383beb0070ebc6fc7401238fcfdc..3437dfcdba3c6d66753532b76d22a6b6ab618804 100644
--- a/indra/newview/skins/default/xui/pt/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="477" name="floater_about" title="Navegador de Mídia" width="570">
+<floater min_width="477" name="floater_about" title="NAVEGADOR DE MÍDIA" width="570">
 	<layout_stack name="stack1" width="550">
 		<layout_panel name="nav_controls">
 			<button label="Para trás" name="back" width="75"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
index 374592f0e2a9feba6caec6288ba19ada8a546a03..4f93eb90e564e513bb0174e5b0a82f85cd3cf68a 100644
--- a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="MemLeak" title="Simulação de Perda de Memória">
+<floater name="MemLeak" title="SIMULAÇÃO DE PERDA DE MEMÓRIA">
 	<spinner label="Velocidade da Perda (bytes por quadro):" name="leak_speed"/>
 	<spinner label="Máximo de Memória Perdida (MB):" name="max_leak"/>
 	<text name="total_leaked_label">
diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
index 7ec0051a7d5e0157bd57ff2a8bde2f5469478dfd..cc669951c3f9ff93cd973305ff4dc1068a5e11a8 100644
--- a/indra/newview/skins/default/xui/pt/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="mute by name" title="Silenciar objeto pelo nome">
+<floater name="mute by name" title="SILENCIAR OBJETO PELO NOME">
 	<text name="message">
 		Silenciar pelo nome afeta apenas conversa de objeto e MI,
 não sons. Você deve digitar o nome exato do objeto.
diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
index a78b255f8aba0d8d4d26339d701a32221ad443c2..68f2a19998df9a9f60e4c61e377701cd6ba73471 100644
--- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="Contatos">
+<floater name="floater_my_friends" title="CONTATOS">
 	<tab_container name="friends_and_groups">
 		<panel label="Amigos" name="friends_panel"/>
 		<panel label="Grupos" name="groups_panel"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml
index d3b72b4b18a961dd664f542ec12f9c0366390506..0dc2852bac301fc05fc957b21f47ea5bfdb17d4c 100644
--- a/indra/newview/skins/default/xui/pt/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="objectcontents" title="Conteúdo do objeto">
+<floater name="objectcontents" title="CONTEÚDO DO OBJETO">
 	<text name="object_name">
 		[DESC]:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
index 9bb7f04256f9ccc703aac9e5a2a560973a788530..33a0d6a456bec2e13b2eed768aca193b0e31c4fd 100644
--- a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="Permissões Padrão de Upload">
+<floater name="perm prefs" title="PERMISSÕES PADRÃO DE UPLOAD">
 	<panel label="Permissões" name="permissions">
 		<button label="?" label_selected="?" name="help"/>
 		<check_box label="Compartilhar com o grupo" name="share_with_group"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml
index 8f5f5db7430cc76f20b7fe0a760eb45877c559c9..d4f2e96539abd4105a394d02907e0b91b78dee6a 100644
--- a/indra/newview/skins/default/xui/pt/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pt/floater_post_process.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Post-Process Floater" title="Ajustes de Pós-processamento">
+<floater name="Post-Process Floater" title="AJUSTES DE PÓS-PROCESSAMENTO">
 	<tab_container name="Post-Process Tabs">
 		<panel label="Filtro de Cor" name="wmiColorFilterPanel">
 			<check_box label="Habilitar" name="wmiColorFilterToggle"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml
index 62fd050ea47142824bdc123dbfc898a38e7d0d58..cf63726df2a2066c9c71e48dfe50df9596e2a122 100644
--- a/indra/newview/skins/default/xui/pt/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_postcard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="Foto por email">
+<floater name="Postcard" title="FOTO POR EMAIL">
 	<text name="to_label" width="135">
 		Email do Destinatário:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
index 0e9ef768b5ad9e7f9734da997e1bb20277ac0040..d2c3c791601e308e0fee98453328f8d7830cf984 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferências" min_width="332" width="628">
+<floater name="Preferences" title="PREFERÊNCIAS" min_width="332" width="628">
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
index 4c583c28fb14e11c5917b2b77518e48d28b85ede..0e8814b9f8ac449e98bbe2adc0086c462d13edaf 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="Informação do Anúncio Classificado"/>
+<floater name="classified_preview" title="INFORMAÇÃO DO ANÚNCIO CLASSIFICADO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
index 3c8ebcf95a9e77f3911fe486594ada755b94aeb2..c03feacf0cf4cc8ed7cc938c0e1602176791c567 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="Informação do Evento"/>
+<floater name="event_preview" title="INFORMAÇÃO DO EVENTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
index e0a133d8ab6483ec465591c17a7e29284b9baffc..6f8944942a1099574b5fa53f9b859093ea16b73c 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="preview notecard" title="Nota:">
+<floater name="preview notecard" title="NOTA:">
 	<button label="Salvar" label_selected="Salvar" name="Save"/>
 	<text name="desc txt">
 		Descrição:
diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml
index fe228ab405f7526906d097e983ee589e9ebaf3a2..cc5e0d59d4518e0b58352e757a7e7e8e399f3517 100644
--- a/indra/newview/skins/default/xui/pt/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/pt/floater_region_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="regioninfo" title="Região/Propriedade"/>
+<floater name="regioninfo" title="REGIÃO/PROPRIEDADE"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
index 51d7ef8190b39d2f0ea7849ad2f81c8634faa266..0d226a9502f009ba0343825562d62d70e4549ed8 100644
--- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_report_abuse" title="Reportar abuso">
+<floater name="floater_report_abuse" title="REPORTAR ABUSO">
 	<check_box label="Incluir cópia da tela" name="screen_check"/>
 	<text name="reporter_title">
 		Denunciador:
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
index 48c73b93a3e9b26ce977045e1e25e44269b96921..6d1d981ca7bcf4eb9f35452f50ee258b21471026 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <multi_floater name="script debug floater" title="Aviso de script/erro">
 	<tab_container name="Preview Tabs">
-		<floater label="Script" name="all_scripts" title="[Todos os scripts]"/>
+		<floater label="Script" name="all_scripts" title="[ALL SCRIPTS]"/>
 	</tab_container>
 </multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
index 2a7680565f5c417eac0836d62a9f323398d10a95..3c0570791c1ee2ce750eb0ca7b7af6017200ef63 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="preview lsl text" title="Script: Rotation Script">
+<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
 	<text name="desc txt">
 		Descrição:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
index 7b35226bdb466382de0917b3e0ceed5621a1aae9..6e0e174c079cf4bd0fdae5f5e4c78041203c3470 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="queue" title="Resetar Progresso">
+<floater name="queue" title="RESETAR PROGRESSO">
 	<button label="Fechar" label_selected="Fechar" name="close"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml
index c904c0f816f05fbd20db046e3ee1285aea256262..3a62f1711f2875f2d069d10f74970ce18455a254 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_search.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Busca de Script" width="320">
+<floater name="script search" title="BUSCA DE SCRIPT" width="320">
 	<check_box label="Não diferenciar Maiúsculas de Minúsculas" name="case_text" left="75"/>
 	<button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
 	<button label="Substituir" label_selected="Substituir" name="replace_btn" left="100" width="85"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
index d3581405ffe6bc153b2c99dba169d231af4c3439..f58c4098ef4954dcde15e92ff77a7251f9ebc0d8 100644
--- a/indra/newview/skins/default/xui/pt/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="sell land" title="Vender terreno">
+<floater name="sell land" title="VENDER TERRENO">
     <scroll_container name="profile_scroll">
     <panel name="scroll_content_panel">
 	<text name="info_parcel_label">
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
index f7b468bb22022f9d70b10a03b1f0e133f49db51e..394a9771e0cc403b879094b9baf95d35b3de65bf 100644
--- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="settings_debug" title="Configurações de Debug">
+<floater name="settings_debug" title="CONFIGURAÇÕES DE DEBUG">
 	<combo_box name="boolean_combo">
 		<combo_box.item name="TRUE" label="VERDADEIRO" />
 		<combo_box.item name="FALSE" label="FALSO" />
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
index a924706cb9903ae47f36398ea74690c69571f054..c3c4c73a89de12d871d38b8a5a90e1c4e5e4f464 100644
--- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Snapshot" title="Prévia da foto">
+<floater name="Snapshot" title="PRÉVIA DA FOTO">
 	<text name="type_label">
 		Destino da foto
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
index df76499f42bf40a793ed9f5460f896d5d9adae8f..d5d252c0ddd9f39268a6a50b8e327067f3d8f426 100644
--- a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Sound Preview" title="SOUND.WAV">
 	<text name="name_label">
 		Nome:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml
index d26c7081cc903d49b29adaacff7198af1ef39970..c56c9fb2e05015e610fdab47b4d2bc0b9e0c0dbc 100644
--- a/indra/newview/skins/default/xui/pt/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/pt/floater_statistics.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="Statística"/>
+<floater name="stats floater" title="STATÍSTICA"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml
index 11886c7cabf096ec73bbbad1227050663c61965f..5c775ab45d0d6b3233bdc55817a37b78354e3dbd 100644
--- a/indra/newview/skins/default/xui/pt/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pt/floater_telehub.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="TELEHUB" min_height="310" height="310" width="286">
 	<text name="status_text_connected">
 		Telehub conectado ao objeto [OBJECT]
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
index 784540a48e6701785392f03c4f478691bf2f984f..b63c4a9bbf3a22d499072aa8305b41f12d30616f 100644
--- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="texture picker" title="Pegar: Textura">
+<floater name="texture picker" title="PEGAR: TEXTURA">
 	<string name="choose_picture">
 		Clique para escolher uma imagem
 	</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index d7227deacc1dfca281417a9c8f44f69ebf9c816f..b9ab0186066dc1929881a5e4b0b00b24d1a05c3f 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="" short_title="CONSTRUIR" width="288">
 	<button label="" label_selected="" name="button focus" tool_tip="Foco"/>
 	<button label="" label_selected="" name="button move" tool_tip="Mover"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
index cd94b51b16771ff4f1ade9654a60fcbee492e4c5..15e69c450cc9faf19b5c39d9e22fdfc53d7c19fd 100644
--- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="top_objects" title="Carregando...">
+<floater name="top_objects" title="CARREGANDO...">
 	<text name="title_text">
 		Carregando...
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
index ceb4414058e55bac0ba5c2d29ccb82c801187077..bad9aa0943c3d56ee0e03f82dcc6d1ff8bd0156d 100644
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ b/indra/newview/skins/default/xui/pt/floater_water.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="Editor de Água Avançado">
+<floater name="Water Floater" title="EDITOR DE ÁGUA AVANÇADO">
 	<text name="KeyFramePresetsText" width="154">
 		Pré-configurações da Água:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
index 0de8bd22f8bf2d14f39e6ba4dcf010c1e975463e..951e37a1a653502eb10fe857d7f9fa183da298f0 100644
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="Editor de Céu Avançado">
+<floater name="WindLight floater" title="EDITOR DE CÉU AVANÇADO">
 	<text name="KeyFramePresetsText" width="130">
 		Pré-definições de Céu:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml
index 056d12152029b696a3fcccdb136f9eefadb04089..034602d6ea6190af74094fd69a3a1604fe9fa7c7 100644
--- a/indra/newview/skins/default/xui/pt/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="worldmap" title="Mapa Mundi">
+<floater name="worldmap" title="MAPA MUNDI">
 	<tab_container name="maptab">
 		<panel label="Objetos" name="objects_mapview"/>
 		<panel label="Terreno" name="terrain_mapview"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
index e97e77cfe6f69cbe1fd9f6da732f0e9f216ccc60..a989cab16718680136f46cdac23e7ab24f6354f9 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
@@ -1,45 +1,45 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="edit_profile_panel">
-   <string name="CaptionTextAcctInfo">
-       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
-   </string>
-   <string name="AcctTypeResident"
-    value="Residente" />
-   <string name="AcctTypeTrial"
-    value="Teste" />
-   <string name="AcctTypeCharterMember"
-    value="Estatuto do membro" />
-   <string name="AcctTypeEmployee"
-    value="Contratado da Linden Lab" />
-   <string name="PaymentInfoUsed"
-    value="Infor. de pagamento utilizadas" />
-   <string name="PaymentInfoOnFile"
-    value="Infor. de pagamento no arquivo" />
-   <string name="NoPaymentInfoOnFile"
-    value="Sem infor. de pagamento no arquivo" />
-   <string name="AgeVerified"
-    value="Idade Verificada" />
-   <string name="NotAgeVerified"
-    value="Idade não Verificada" />
-   <string name="partner_edit_link_url">
-       http://www.secondlife.com/account/partners.php?lang=pt
-   </string>
-    <panel name="scroll_content_panel">
-    <panel name="data_panel" >
-     <panel name="lifes_images_panel">
-          <panel name="second_life_image_panel">
-              <text name="second_life_photo_title_text">
-			[SECOND_LIFE]:
-              </text>
-          </panel>
-      </panel>
-        <text name="title_partner_text" value="Parceiro:"/>
-        <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
-         </panel>
-      <text name="text_box3">
-	Resposta no Modo Ocupado:
-      </text>
-    </panel>
-    </panel>
-</panel>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="edit_profile_panel">
+   <string name="CaptionTextAcctInfo">
+       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
+   </string>
+   <string name="AcctTypeResident"
+    value="Residente" />
+   <string name="AcctTypeTrial"
+    value="Teste" />
+   <string name="AcctTypeCharterMember"
+    value="Estatuto do membro" />
+   <string name="AcctTypeEmployee"
+    value="Contratado da Linden Lab" />
+   <string name="PaymentInfoUsed"
+    value="Infor. de pagamento utilizadas" />
+   <string name="PaymentInfoOnFile"
+    value="Infor. de pagamento no arquivo" />
+   <string name="NoPaymentInfoOnFile"
+    value="Sem infor. de pagamento no arquivo" />
+   <string name="AgeVerified"
+    value="Idade Verificada" />
+   <string name="NotAgeVerified"
+    value="Idade não Verificada" />
+   <string name="partner_edit_link_url">
+       http://www.secondlife.com/account/partners.php?lang=pt
+   </string>
+    <panel name="scroll_content_panel">
+    <panel name="data_panel" >
+     <panel name="lifes_images_panel">
+          <panel name="second_life_image_panel">
+              <text name="second_life_photo_title_text">
+			[SECOND_LIFE]:
+              </text>
+          </panel>
+      </panel>
+        <text name="title_partner_text" value="Parceiro:"/>
+        <panel name="partner_data_panel">
+            <text name="partner_text" value="[FIRST] [LAST]"/>
+         </panel>
+      <text name="text_box3">
+	Resposta no Modo Ocupado:
+      </text>
+    </panel>
+    </panel>
+</panel>
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 009be35f641390be0b032aaee9355d0c85694733..d31a81e1280ae0f5be8087fee28d218cf56db24a 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -1,423 +1,423 @@
-/**
- * @file   lllogininstance_test.cpp
- * @brief  Test for lllogininstance.cpp.
- * 
- * $LicenseInfo:firstyear=2008&license=internal$
- * Copyright (c) 2008, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-// Precompiled header
-#include "../llviewerprecompiledheaders.h"
-// Own header
-#include "../lllogininstance.h"
-// STL headers
-// std headers
-// external library headers
-// other Linden headers
-#include "../test/lltut.h"
-#include "llevents.h"
-
-#if defined(LL_WINDOWS)
-#pragma warning(disable: 4355)      // using 'this' in base-class ctor initializer expr
-#endif
-
-// Constants
-const std::string VIEWERLOGIN_URI("viewerlogin_uri");
-const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
-
-const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
-
-// Link seams.
-
-//-----------------------------------------------------------------------------
-static LLEventStream gTestPump("test_pump");
-
-#include "lllogin.h"
-static std::string gLoginURI;
-static LLSD gLoginCreds;
-static bool gDisconnectCalled = false;
-class LLLogin::Impl
-{
-};
-LLLogin::LLLogin() {}
-LLLogin::~LLLogin() {}
-LLEventPump& LLLogin::getEventPump() { return gTestPump; }
-void LLLogin::connect(const std::string& uri, const LLSD& credentials) 
-{
-	gLoginURI = uri;
-	gLoginCreds = credentials;
-}
-
-void LLLogin::disconnect() 
-{
-	gDisconnectCalled = true;
-}
-
-//-----------------------------------------------------------------------------
-#include "../llviewernetwork.h"
-unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'};		/* Flawfinder: ignore */
-
-LLViewerLogin::LLViewerLogin() {}
-LLViewerLogin::~LLViewerLogin() {}
-void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const 
-{
-	uris.push_back(VIEWERLOGIN_URI);
-}
-std::string LLViewerLogin::getGridLabel() const { return VIEWERLOGIN_GRIDLABEL; }
-
-//-----------------------------------------------------------------------------
-#include "../llviewercontrol.h"
-LLControlGroup gSavedSettings("Global");
-std::string gCurrentVersion = "invalid_version";
-
-LLControlGroup::LLControlGroup(const std::string& name) :
-	LLInstanceTracker<LLControlGroup, std::string>(name){}
-LLControlGroup::~LLControlGroup() {}
-void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}
-BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
-U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; }
-void LLControlGroup::setString(const std::string& name, const std::string& val) {}
-std::string LLControlGroup::getString(const std::string& name) { return "test_string"; }
-BOOL LLControlGroup::declareBOOL(const std::string& name, BOOL initial_val, const std::string& comment, BOOL persist) { return TRUE; }
-BOOL LLControlGroup::declareString(const std::string& name, const std::string &initial_val, const std::string& comment, BOOL persist) { return TRUE; }
-
-#include "lluicolortable.h"
-void LLUIColorTable::saveUserSettings(void)const {}
-
-//-----------------------------------------------------------------------------
-#include "../llurlsimstring.h"
-LLURLSimString LLURLSimString::sInstance;
-bool LLURLSimString::parse() { return true; }
-
-//-----------------------------------------------------------------------------
-#include "llnotifications.h"
-#include "llfloaterreg.h"
-static std::string gTOSType;
-static LLEventPump * gTOSReplyPump = NULL;
-
-//static
-LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus)
-{
-	gTOSType = name;
-	gTOSReplyPump = &LLEventPumps::instance().obtain(key["reply_pump"]);
-	return NULL;
-}
-
-//-----------------------------------------------------------------------------
-// LLNotifications
-class MockNotifications : public LLNotificationsInterface
-{
-	boost::function<void (const LLSD&, const LLSD&)> mResponder;
-	int mAddedCount;
-
-public: 
-	MockNotifications() :
-		mResponder(0),
-		mAddedCount(0)
-	{
-	}
-
-	virtual ~MockNotifications() {}
-
-	/* virtual */ LLNotificationPtr add(
-					const std::string& name,
-					const LLSD& substitutions,
-					const LLSD& payload, 
-					LLNotificationFunctorRegistry::ResponseFunctor functor)
-	{
-		mResponder = functor;
-		mAddedCount++;
-		return LLNotificationPtr((LLNotification*)NULL);
-	}
-
-	void sendYesResponse()
-	{
-		LLSD notification;
-		LLSD response;
-		response = 1;
-		mResponder(notification, response);
-	}
-
-	void sendNoResponse()
-	{
-		LLSD notification;
-		LLSD response;
-		response = 2;
-		mResponder(notification, response);
-	}
-
-	void sendBogusResponse()
-	{
-		LLSD notification;
-		LLSD response;
-		response = 666;
-		mResponder(notification, response);
-	}
-
-	int addedCount() { return mAddedCount; }
-};
-
-S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& response)
-{
-	return response.asInteger();
-}
-
-// misc
-std::string xml_escape_string(const std::string& in)
-{
-	return in;
-}
-
-/*****************************************************************************
-*   TUT
-*****************************************************************************/
-namespace tut
-{
-    struct lllogininstance_data
-    {
-		lllogininstance_data() : logininstance(LLLoginInstance::getInstance())
-		{
-			// Global initialization
-			gLoginURI.clear();
-			gLoginCreds.clear();
-			gDisconnectCalled = false;
-
-			gTOSType = ""; // Set to invalid value.
-			gTOSReplyPump = 0; // clear the callback.
-
-
-			gSavedSettings.declareBOOL("NoInventoryLibrary", FALSE, "", FALSE);
-			gSavedSettings.declareBOOL("ConnectAsGod", FALSE, "", FALSE);
-			gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE);
-			gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE);
-			gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE);
-			gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE);
-			gSavedSettings.declareString("NextLoginLocation", "", "", FALSE);
-			gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE);
-
-			credentials["first"] = "testfirst";
-			credentials["last"] = "testlast";
-			credentials["passwd"] = "testpass";
-
-			logininstance->setNotificationsInterface(&notifications);
-		}
-
-		LLLoginInstance* logininstance;
-		LLSD credentials;
-		MockNotifications notifications;
-    };
-
-    typedef test_group<lllogininstance_data> lllogininstance_group;
-    typedef lllogininstance_group::object lllogininstance_object;
-    lllogininstance_group llsdmgr("lllogininstance");
-
-    template<> template<>
-    void lllogininstance_object::test<1>()
-    {
-		set_test_name("Test Simple Success And Disconnect");
-
-		// Test default connect.
-		logininstance->connect(credentials);
-
-		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
-
-		// Dummy success response.
-		LLSD response;
-		response["state"] = "online";
-		response["change"] = "connect";
-		response["progress"] = 1.0;
-		response["transfer_rate"] = 7;
-		response["data"] = "test_data";
-
-		gTestPump.post(response);
-
-		ensure("Success response", logininstance->authSuccess());
-		ensure_equals("Test Response Data", logininstance->getResponse().asString(), "test_data");
-
-		logininstance->disconnect();
-
-		ensure_equals("Called Login Module Disconnect", gDisconnectCalled, true);
-
-		response.clear();
-		response["state"] = "offline";
-		response["change"] = "disconnect";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 0;
-		response["data"] = "test_data";
-
-		gTestPump.post(response);
-
-		ensure("Disconnected", !(logininstance->authSuccess()));
-    }
-
-    template<> template<>
-    void lllogininstance_object::test<2>()
-    {
-		set_test_name("Test User TOS/Critical message Interaction");
-
-		const std::string test_uri = "testing-uri";
-
-		// Test default connect.
-		logininstance->connect(test_uri, credentials);
-
-		// connect should call LLLogin::connect to init gLoginURI and gLoginCreds.
-		ensure_equals("Default connect uri", gLoginURI, "testing-uri"); 
-		ensure_equals("Default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
-		ensure_equals("Default for read critical", gLoginCreds["params"]["read_critical"].asBoolean(), false);
-
-		// TOS failure response.
-		LLSD response;
-		response["state"] = "offline";
-		response["change"] = "fail.login";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 7;
-		response["data"]["reason"] = "tos";
-		gTestPump.post(response);
-
-		ensure_equals("TOS Dialog type", gTOSType, "message_tos");
-		ensure("TOS callback given", gTOSReplyPump != 0);
-		gTOSReplyPump->post(false); // Call callback denying TOS.
-		ensure("No TOS, failed auth", logininstance->authFailure());
-
-		// Start again.
-		logininstance->connect(test_uri, credentials);
-		gTestPump.post(response); // Fail for tos again.
-		gTOSReplyPump->post(true); // Accept tos, should reconnect w/ agree_to_tos.
-		ensure_equals("Accepted agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), true);
-		ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
-	
-		// Fail connection, attempt connect again.
-		// The new request should have reset agree to tos to default.
-		response["data"]["reason"] = "key"; // bad creds.
-		gTestPump.post(response);
-		ensure("TOS auth failure", logininstance->authFailure());
-
-		logininstance->connect(test_uri, credentials);
-		ensure_equals("Reset to default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
-
-		// Critical Message failure response.
-		logininstance->connect(test_uri, credentials);
-		response["data"]["reason"] = "critical"; // Change response to "critical message"
-		gTestPump.post(response);
-
-		ensure_equals("TOS Dialog type", gTOSType, "message_critical");
-		ensure("TOS callback given", gTOSReplyPump != 0);
-		gTOSReplyPump->post(true); 
-		ensure_equals("Accepted read critical message", gLoginCreds["params"]["read_critical"].asBoolean(), true);
-		ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
-
-		// Fail then attempt new connection
-		response["data"]["reason"] = "key"; // bad creds.
-		gTestPump.post(response);
-		ensure("TOS auth failure", logininstance->authFailure());
-		logininstance->connect(test_uri, credentials);
-		ensure_equals("Default for agree to tos", gLoginCreds["params"]["read_critical"].asBoolean(), false);
-	}
-
-    template<> template<>
-    void lllogininstance_object::test<3>()
-    {
-		set_test_name("Test Mandatory Update User Accepts");
-
-		// Part 1 - Mandatory Update, with User accepts response.
-		// Test connect with update needed.
-		logininstance->connect(credentials);
-
-		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
-
-		// Update needed failure response.
-		LLSD response;
-		response["state"] = "offline";
-		response["change"] = "fail.login";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 7;
-		response["data"]["reason"] = "update";
-		gTestPump.post(response);
-
-		ensure_equals("Notification added", notifications.addedCount(), 1);
-
-		notifications.sendYesResponse();
-
-		ensure("Disconnected", !(logininstance->authSuccess()));
-	}
-
-	template<> template<>
-    void lllogininstance_object::test<4>()
-    {
-		set_test_name("Test Mandatory Update User Decline");
-
-		// Test connect with update needed.
-		logininstance->connect(credentials);
-
-		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
-
-		// Update needed failure response.
-		LLSD response;
-		response["state"] = "offline";
-		response["change"] = "fail.login";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 7;
-		response["data"]["reason"] = "update";
-		gTestPump.post(response);
-
-		ensure_equals("Notification added", notifications.addedCount(), 1);
-		notifications.sendNoResponse();
-
-		ensure("Disconnected", !(logininstance->authSuccess()));
-	}
-
-	template<> template<>
-    void lllogininstance_object::test<6>()
-    {
-		set_test_name("Test Optional Update User Accept");
-
-		// Part 3 - Mandatory Update, with bogus response.
-		// Test connect with update needed.
-		logininstance->connect(credentials);
-
-		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
-
-		// Update needed failure response.
-		LLSD response;
-		response["state"] = "offline";
-		response["change"] = "fail.login";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 7;
-		response["data"]["reason"] = "optional";
-		gTestPump.post(response);
-
-		ensure_equals("Notification added", notifications.addedCount(), 1);
-		notifications.sendYesResponse();
-
-		ensure("Disconnected", !(logininstance->authSuccess()));
-	}
-
-	template<> template<>
-    void lllogininstance_object::test<7>()
-    {
-		set_test_name("Test Optional Update User Denies");
-
-		// Part 3 - Mandatory Update, with bogus response.
-		// Test connect with update needed.
-		logininstance->connect(credentials);
-
-		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
-
-		// Update needed failure response.
-		LLSD response;
-		response["state"] = "offline";
-		response["change"] = "fail.login";
-		response["progress"] = 0.0;
-		response["transfer_rate"] = 7;
-		response["data"]["reason"] = "optional";
-		gTestPump.post(response);
-
-		ensure_equals("Notification added", notifications.addedCount(), 1);
-		notifications.sendNoResponse();
-
-		// User skips, should be reconnecting.
-		ensure_equals("reconnect uri", gLoginURI, VIEWERLOGIN_URI); 
-		ensure_equals("skipping optional update", gLoginCreds["params"]["skipoptional"].asBoolean(), true); 
-	}
-}
+/**
+ * @file   lllogininstance_test.cpp
+ * @brief  Test for lllogininstance.cpp.
+ * 
+ * $LicenseInfo:firstyear=2008&license=internal$
+ * Copyright (c) 2008, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "../llviewerprecompiledheaders.h"
+// Own header
+#include "../lllogininstance.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "../test/lltut.h"
+#include "llevents.h"
+
+#if defined(LL_WINDOWS)
+#pragma warning(disable: 4355)      // using 'this' in base-class ctor initializer expr
+#endif
+
+// Constants
+const std::string VIEWERLOGIN_URI("viewerlogin_uri");
+const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
+
+const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
+
+// Link seams.
+
+//-----------------------------------------------------------------------------
+static LLEventStream gTestPump("test_pump");
+
+#include "lllogin.h"
+static std::string gLoginURI;
+static LLSD gLoginCreds;
+static bool gDisconnectCalled = false;
+class LLLogin::Impl
+{
+};
+LLLogin::LLLogin() {}
+LLLogin::~LLLogin() {}
+LLEventPump& LLLogin::getEventPump() { return gTestPump; }
+void LLLogin::connect(const std::string& uri, const LLSD& credentials) 
+{
+	gLoginURI = uri;
+	gLoginCreds = credentials;
+}
+
+void LLLogin::disconnect() 
+{
+	gDisconnectCalled = true;
+}
+
+//-----------------------------------------------------------------------------
+#include "../llviewernetwork.h"
+unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'};		/* Flawfinder: ignore */
+
+LLViewerLogin::LLViewerLogin() {}
+LLViewerLogin::~LLViewerLogin() {}
+void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const 
+{
+	uris.push_back(VIEWERLOGIN_URI);
+}
+std::string LLViewerLogin::getGridLabel() const { return VIEWERLOGIN_GRIDLABEL; }
+
+//-----------------------------------------------------------------------------
+#include "../llviewercontrol.h"
+LLControlGroup gSavedSettings("Global");
+std::string gCurrentVersion = "invalid_version";
+
+LLControlGroup::LLControlGroup(const std::string& name) :
+	LLInstanceTracker<LLControlGroup, std::string>(name){}
+LLControlGroup::~LLControlGroup() {}
+void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}
+BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
+U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; }
+void LLControlGroup::setString(const std::string& name, const std::string& val) {}
+std::string LLControlGroup::getString(const std::string& name) { return "test_string"; }
+BOOL LLControlGroup::declareBOOL(const std::string& name, BOOL initial_val, const std::string& comment, BOOL persist) { return TRUE; }
+BOOL LLControlGroup::declareString(const std::string& name, const std::string &initial_val, const std::string& comment, BOOL persist) { return TRUE; }
+
+#include "lluicolortable.h"
+void LLUIColorTable::saveUserSettings(void)const {}
+
+//-----------------------------------------------------------------------------
+#include "../llurlsimstring.h"
+LLURLSimString LLURLSimString::sInstance;
+bool LLURLSimString::parse() { return true; }
+
+//-----------------------------------------------------------------------------
+#include "llnotifications.h"
+#include "llfloaterreg.h"
+static std::string gTOSType;
+static LLEventPump * gTOSReplyPump = NULL;
+
+//static
+LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus)
+{
+	gTOSType = name;
+	gTOSReplyPump = &LLEventPumps::instance().obtain(key["reply_pump"]);
+	return NULL;
+}
+
+//-----------------------------------------------------------------------------
+// LLNotifications
+class MockNotifications : public LLNotificationsInterface
+{
+	boost::function<void (const LLSD&, const LLSD&)> mResponder;
+	int mAddedCount;
+
+public: 
+	MockNotifications() :
+		mResponder(0),
+		mAddedCount(0)
+	{
+	}
+
+	virtual ~MockNotifications() {}
+
+	/* virtual */ LLNotificationPtr add(
+					const std::string& name,
+					const LLSD& substitutions,
+					const LLSD& payload, 
+					LLNotificationFunctorRegistry::ResponseFunctor functor)
+	{
+		mResponder = functor;
+		mAddedCount++;
+		return LLNotificationPtr((LLNotification*)NULL);
+	}
+
+	void sendYesResponse()
+	{
+		LLSD notification;
+		LLSD response;
+		response = 1;
+		mResponder(notification, response);
+	}
+
+	void sendNoResponse()
+	{
+		LLSD notification;
+		LLSD response;
+		response = 2;
+		mResponder(notification, response);
+	}
+
+	void sendBogusResponse()
+	{
+		LLSD notification;
+		LLSD response;
+		response = 666;
+		mResponder(notification, response);
+	}
+
+	int addedCount() { return mAddedCount; }
+};
+
+S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& response)
+{
+	return response.asInteger();
+}
+
+// misc
+std::string xml_escape_string(const std::string& in)
+{
+	return in;
+}
+
+/*****************************************************************************
+*   TUT
+*****************************************************************************/
+namespace tut
+{
+    struct lllogininstance_data
+    {
+		lllogininstance_data() : logininstance(LLLoginInstance::getInstance())
+		{
+			// Global initialization
+			gLoginURI.clear();
+			gLoginCreds.clear();
+			gDisconnectCalled = false;
+
+			gTOSType = ""; // Set to invalid value.
+			gTOSReplyPump = 0; // clear the callback.
+
+
+			gSavedSettings.declareBOOL("NoInventoryLibrary", FALSE, "", FALSE);
+			gSavedSettings.declareBOOL("ConnectAsGod", FALSE, "", FALSE);
+			gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE);
+			gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE);
+			gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE);
+			gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE);
+			gSavedSettings.declareString("NextLoginLocation", "", "", FALSE);
+			gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE);
+
+			credentials["first"] = "testfirst";
+			credentials["last"] = "testlast";
+			credentials["passwd"] = "testpass";
+
+			logininstance->setNotificationsInterface(&notifications);
+		}
+
+		LLLoginInstance* logininstance;
+		LLSD credentials;
+		MockNotifications notifications;
+    };
+
+    typedef test_group<lllogininstance_data> lllogininstance_group;
+    typedef lllogininstance_group::object lllogininstance_object;
+    lllogininstance_group llsdmgr("lllogininstance");
+
+    template<> template<>
+    void lllogininstance_object::test<1>()
+    {
+		set_test_name("Test Simple Success And Disconnect");
+
+		// Test default connect.
+		logininstance->connect(credentials);
+
+		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
+
+		// Dummy success response.
+		LLSD response;
+		response["state"] = "online";
+		response["change"] = "connect";
+		response["progress"] = 1.0;
+		response["transfer_rate"] = 7;
+		response["data"] = "test_data";
+
+		gTestPump.post(response);
+
+		ensure("Success response", logininstance->authSuccess());
+		ensure_equals("Test Response Data", logininstance->getResponse().asString(), "test_data");
+
+		logininstance->disconnect();
+
+		ensure_equals("Called Login Module Disconnect", gDisconnectCalled, true);
+
+		response.clear();
+		response["state"] = "offline";
+		response["change"] = "disconnect";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 0;
+		response["data"] = "test_data";
+
+		gTestPump.post(response);
+
+		ensure("Disconnected", !(logininstance->authSuccess()));
+    }
+
+    template<> template<>
+    void lllogininstance_object::test<2>()
+    {
+		set_test_name("Test User TOS/Critical message Interaction");
+
+		const std::string test_uri = "testing-uri";
+
+		// Test default connect.
+		logininstance->connect(test_uri, credentials);
+
+		// connect should call LLLogin::connect to init gLoginURI and gLoginCreds.
+		ensure_equals("Default connect uri", gLoginURI, "testing-uri"); 
+		ensure_equals("Default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
+		ensure_equals("Default for read critical", gLoginCreds["params"]["read_critical"].asBoolean(), false);
+
+		// TOS failure response.
+		LLSD response;
+		response["state"] = "offline";
+		response["change"] = "fail.login";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 7;
+		response["data"]["reason"] = "tos";
+		gTestPump.post(response);
+
+		ensure_equals("TOS Dialog type", gTOSType, "message_tos");
+		ensure("TOS callback given", gTOSReplyPump != 0);
+		gTOSReplyPump->post(false); // Call callback denying TOS.
+		ensure("No TOS, failed auth", logininstance->authFailure());
+
+		// Start again.
+		logininstance->connect(test_uri, credentials);
+		gTestPump.post(response); // Fail for tos again.
+		gTOSReplyPump->post(true); // Accept tos, should reconnect w/ agree_to_tos.
+		ensure_equals("Accepted agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), true);
+		ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
+	
+		// Fail connection, attempt connect again.
+		// The new request should have reset agree to tos to default.
+		response["data"]["reason"] = "key"; // bad creds.
+		gTestPump.post(response);
+		ensure("TOS auth failure", logininstance->authFailure());
+
+		logininstance->connect(test_uri, credentials);
+		ensure_equals("Reset to default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
+
+		// Critical Message failure response.
+		logininstance->connect(test_uri, credentials);
+		response["data"]["reason"] = "critical"; // Change response to "critical message"
+		gTestPump.post(response);
+
+		ensure_equals("TOS Dialog type", gTOSType, "message_critical");
+		ensure("TOS callback given", gTOSReplyPump != 0);
+		gTOSReplyPump->post(true); 
+		ensure_equals("Accepted read critical message", gLoginCreds["params"]["read_critical"].asBoolean(), true);
+		ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
+
+		// Fail then attempt new connection
+		response["data"]["reason"] = "key"; // bad creds.
+		gTestPump.post(response);
+		ensure("TOS auth failure", logininstance->authFailure());
+		logininstance->connect(test_uri, credentials);
+		ensure_equals("Default for agree to tos", gLoginCreds["params"]["read_critical"].asBoolean(), false);
+	}
+
+    template<> template<>
+    void lllogininstance_object::test<3>()
+    {
+		set_test_name("Test Mandatory Update User Accepts");
+
+		// Part 1 - Mandatory Update, with User accepts response.
+		// Test connect with update needed.
+		logininstance->connect(credentials);
+
+		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
+
+		// Update needed failure response.
+		LLSD response;
+		response["state"] = "offline";
+		response["change"] = "fail.login";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 7;
+		response["data"]["reason"] = "update";
+		gTestPump.post(response);
+
+		ensure_equals("Notification added", notifications.addedCount(), 1);
+
+		notifications.sendYesResponse();
+
+		ensure("Disconnected", !(logininstance->authSuccess()));
+	}
+
+	template<> template<>
+    void lllogininstance_object::test<4>()
+    {
+		set_test_name("Test Mandatory Update User Decline");
+
+		// Test connect with update needed.
+		logininstance->connect(credentials);
+
+		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
+
+		// Update needed failure response.
+		LLSD response;
+		response["state"] = "offline";
+		response["change"] = "fail.login";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 7;
+		response["data"]["reason"] = "update";
+		gTestPump.post(response);
+
+		ensure_equals("Notification added", notifications.addedCount(), 1);
+		notifications.sendNoResponse();
+
+		ensure("Disconnected", !(logininstance->authSuccess()));
+	}
+
+	template<> template<>
+    void lllogininstance_object::test<6>()
+    {
+		set_test_name("Test Optional Update User Accept");
+
+		// Part 3 - Mandatory Update, with bogus response.
+		// Test connect with update needed.
+		logininstance->connect(credentials);
+
+		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
+
+		// Update needed failure response.
+		LLSD response;
+		response["state"] = "offline";
+		response["change"] = "fail.login";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 7;
+		response["data"]["reason"] = "optional";
+		gTestPump.post(response);
+
+		ensure_equals("Notification added", notifications.addedCount(), 1);
+		notifications.sendYesResponse();
+
+		ensure("Disconnected", !(logininstance->authSuccess()));
+	}
+
+	template<> template<>
+    void lllogininstance_object::test<7>()
+    {
+		set_test_name("Test Optional Update User Denies");
+
+		// Part 3 - Mandatory Update, with bogus response.
+		// Test connect with update needed.
+		logininstance->connect(credentials);
+
+		ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI); 
+
+		// Update needed failure response.
+		LLSD response;
+		response["state"] = "offline";
+		response["change"] = "fail.login";
+		response["progress"] = 0.0;
+		response["transfer_rate"] = 7;
+		response["data"]["reason"] = "optional";
+		gTestPump.post(response);
+
+		ensure_equals("Notification added", notifications.addedCount(), 1);
+		notifications.sendNoResponse();
+
+		// User skips, should be reconnecting.
+		ensure_equals("reconnect uri", gLoginURI, VIEWERLOGIN_URI); 
+		ensure_equals("skipping optional update", gLoginCreds["params"]["skipoptional"].asBoolean(), true); 
+	}
+}
diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8dfba46262aa280caf78379364ba6978e21b0a15
--- /dev/null
+++ b/indra/newview/tests/lltextureinfo_test.cpp
@@ -0,0 +1,284 @@
+/** 
+ * @file llwtextureinfo_test.cpp
+ * @author Si & Gabriel
+ * @date 2009-03-30
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltextureinfo.h"
+// Dependencies
+#include "../lltextureinfodetails.cpp"
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct textureinfo_test
+	{
+		// Constructor and destructor of the test wrapper
+		textureinfo_test()
+		{
+		}
+		~textureinfo_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<textureinfo_test> textureinfo_t;
+	typedef textureinfo_t::object textureinfo_object_t;
+	tut::textureinfo_t tut_textureinfo("textureinfo");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void textureinfo_object_t::test<1>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+		ensure("have we crashed?", true);
+	}
+
+	// Check lltextureinfo does not contain UUIDs we haven't added
+	template<> template<>
+	void textureinfo_object_t::test<2>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure(!tex_info.has(nonExistant));
+	}
+
+	// Check we can add a request time for a texture
+	template<> template<>
+	void textureinfo_object_t::test<3>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id, 200);
+
+		ensure_equals(tex_info.getRequestStartTime(id), 200);
+	}
+
+	// Check time for non-existant texture
+	template<> template<>
+	void textureinfo_object_t::test<4>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure_equals(tex_info.getRequestStartTime(nonExistant), 0);
+	}
+
+	// Check download complete time for non existant texture
+	template<> template<>
+	void textureinfo_object_t::test<5>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID nonExistant("3a0efa3b-84dc-4e17-9b8c-79ea028850c1");
+		ensure_equals(tex_info.getRequestCompleteTime(nonExistant), 0);
+	}
+
+	// requested size is passed in correctly
+	template<> template<>
+	void textureinfo_object_t::test<6>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestSize(id, 600);
+
+		ensure_equals(tex_info.getRequestSize(id), 600);
+	}
+
+	// transport type is recorded correctly (http)
+	template<> template<>
+	void textureinfo_object_t::test<7>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+
+		ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+	}
+
+	// transport type is recorded correctly (udp)
+	template<> template<>
+	void textureinfo_object_t::test<8>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestType(id, LLTextureInfoDetails::REQUEST_TYPE_UDP);
+
+		ensure_equals(tex_info.getRequestType(id), LLTextureInfoDetails::REQUEST_TYPE_UDP);
+	}
+
+	// request offset is recorded correctly
+	template<> template<>
+	void textureinfo_object_t::test<9>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		LLUUID id("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestOffset(id, 1234);
+
+		ensure_equals(tex_info.getRequestOffset(id), 1234);
+	}
+
+	// ask for averages gives us correct figure
+	template<> template<>
+	void textureinfo_object_t::test<10>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		S32 requestSizeOneBits = requestSizeOne * 8;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		U32 requestStartTimeTwo = 100;
+		U32 requestEndTimeTwo = 500;
+		U32 requestSizeTwo = 2048;
+		S32 requestSizeTwoBits = requestSizeTwo * 8;
+		LLUUID id2("10e65d70-46fd-429f-841a-bf698e9424d4");
+		tex_info.setRequestStartTime(id2, requestStartTimeTwo);
+		tex_info.setRequestSize(id2, requestSizeTwo);
+		tex_info.setRequestType(id2, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id2, requestEndTimeTwo);
+
+		S32 averageBitRate = ((requestSizeOneBits/(requestEndTimeOne - requestStartTimeOne)) +
+							(requestSizeTwoBits/(requestEndTimeTwo - requestStartTimeTwo))) / 2;
+
+		S32 totalBytes = requestSizeOne + requestSizeTwo;
+
+		LLSD results = tex_info.getAverages();
+		ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), averageBitRate);
+		ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), totalBytes);
+		ensure_equals("is transport correct", results["transport"].asString(), std::string("HTTP"));
+	}
+
+	// make sure averages cleared when reset is called
+	template<> template<>
+	void textureinfo_object_t::test<11>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		tex_info.getAverages();
+		tex_info.reset();
+		LLSD results = tex_info.getAverages();
+		ensure_equals("is average bits per second correct", results["bits_per_second"].asInteger(), 0);
+		ensure_equals("is total bytes is correct", results["bytes_downloaded"].asInteger(), 0);
+		ensure_equals("is transport correct", results["transport"].asString(), std::string("NONE"));
+	}
+
+	// make sure map item removed when expired
+	template<> template<>
+	void textureinfo_object_t::test<12>()
+	{
+		LLTextureInfo tex_info;
+		tex_info.setUpLogging(true, true);
+
+		S32 requestStartTimeOne = 200;
+		S32 requestEndTimeOne = 400;
+		S32 requestSizeOne = 1024;
+		LLUUID id1("10e65d70-46fd-429f-841a-bf698e9424d3");
+		tex_info.setRequestStartTime(id1, requestStartTimeOne);
+		tex_info.setRequestSize(id1, requestSizeOne);
+		tex_info.setRequestType(id1, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
+
+		ensure_equals("map item created", tex_info.getTextureInfoMapSize(), 1);
+
+		tex_info.setRequestCompleteTimeAndLog(id1, requestEndTimeOne);
+
+		ensure_equals("map item removed when consumed", tex_info.getTextureInfoMapSize(), 0);
+	}
+}
+
diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..aa2697fb8eb4b0aec7116103c630e4ebd96db4c7
--- /dev/null
+++ b/indra/newview/tests/lltextureinfodetails_test.cpp
@@ -0,0 +1,98 @@
+/** 
+ * @file llwtextureinfodetails_test.cpp
+ * @author Si & Gabriel
+ * @date 2009-03-30
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltextureinfodetails.h"
+// Dependencies
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct textureinfodetails_test
+	{
+		// Constructor and destructor of the test wrapper
+		textureinfodetails_test()
+		{
+		}
+		~textureinfodetails_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<textureinfodetails_test> textureinfodetails_t;
+	typedef textureinfodetails_t::object textureinfodetails_object_t;
+	tut::textureinfodetails_t tut_textureinfodetails("textureinfodetails");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void textureinfodetails_object_t::test<1>()
+	{
+		ensure("have we crashed?", true);
+	}
+}
diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..77a3e2c3d889c252a102b62f8e7debef160590ea
--- /dev/null
+++ b/indra/newview/tests/lltexturestatsuploader_test.cpp
@@ -0,0 +1,156 @@
+/** 
+ * @file lltexturestatsuploader_test.cpp
+ * @author Si
+ * @date 2009-05-27
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../lltexturestatsuploader.h"
+// Dependencies
+
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+#include "boost/intrusive_ptr.hpp"
+void boost::intrusive_ptr_add_ref(LLCurl::Responder*){}
+void boost::intrusive_ptr_release(LLCurl::Responder* p){}
+const F32 HTTP_REQUEST_EXPIRY_SECS = 0.0f;
+
+static std::string most_recent_url;
+static LLSD most_recent_body;
+
+void LLHTTPClient::post(
+		const std::string& url,
+		const LLSD& body,
+		ResponderPtr,
+		const LLSD& headers,
+		const F32 timeout)
+{
+	// set some sensor code
+	most_recent_url = url;
+	most_recent_body = body;
+	return;
+}
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct texturestatsuploader_test
+	{
+		// Constructor and destructor of the test wrapper
+		texturestatsuploader_test()
+		{
+			most_recent_url = "some sort of default text that should never match anything the tests are expecting!";
+			LLSD blank_llsd;
+			most_recent_body = blank_llsd;
+		}
+		~texturestatsuploader_test()
+		{
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<texturestatsuploader_test> texturestatsuploader_t;
+	typedef texturestatsuploader_t::object texturestatsuploader_object_t;
+	tut::texturestatsuploader_t tut_texturestatsuploader("texturestatsuploader");
+
+	
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLTextureInfo
+	// ---------------------------------------------------------------------------------------
+
+
+	// Test instantiation
+	template<> template<>
+	void texturestatsuploader_object_t::test<1>()
+	{
+		LLTextureStatsUploader tsu;
+		llinfos << &tsu << llendl;
+		ensure("have we crashed?", true);
+	}
+
+	// does it call out to the provided url if we ask it to?
+	template<> template<>
+	void texturestatsuploader_object_t::test<2>()
+	{	
+		LLTextureStatsUploader tsu;
+		std::string url = "http://blahblahblah";
+		LLSD texture_stats;
+		tsu.uploadStatsToSimulator(url, texture_stats);
+		ensure_equals("did the right url get called?", most_recent_url, url);
+		ensure_equals("did the right body get sent?", most_recent_body, texture_stats);
+	}
+
+	// does it not call out to the provided url if we send it an ungranted cap?
+	template<> template<>
+	void texturestatsuploader_object_t::test<3>()
+	{	
+		LLTextureStatsUploader tsu;
+
+		// this url left intentionally blank to mirror
+		// not getting a cap in the caller.
+		std::string url_for_ungranted_cap = ""; 
+							  
+		LLSD texture_stats;
+		std::string most_recent_url_before_test = most_recent_url;
+		tsu.uploadStatsToSimulator(url_for_ungranted_cap, texture_stats);
+
+		ensure_equals("hopefully no url got called!", most_recent_url, most_recent_url_before_test);
+	}
+
+	// does it call out if the data is empty?
+	// should it even do that?
+}
+
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..56cf86f6df9e8178a4ad6f0afa57204ee1902d76
--- /dev/null
+++ b/indra/newview/tests/llworldmap_test.cpp
@@ -0,0 +1,523 @@
+/** 
+ * @file llworldmap_test.cpp
+ * @author Merov Linden
+ * @date 2009-03-09
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../llworldmap.h"
+// Dependencies
+#include "../llviewerimagelist.h"
+#include "../llworldmapmessage.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+// Stub image calls
+LLViewerImageList::LLViewerImageList() { }
+LLViewerImageList::~LLViewerImageList() { }
+LLViewerImageList gImageList;
+LLViewerImage* LLViewerImageList::getImage(const LLUUID &image_id,
+												   BOOL usemipmaps,
+												   BOOL level_immediate,
+												   LLGLint internal_format,
+												   LLGLenum primary_format,
+												   LLHost request_from_host)
+{ return NULL; }
+void LLViewerImage::setBoostLevel(S32 level) { }
+void LLImageGL::setAddressMode(LLTexUnit::eTextureAddressMode mode) { }
+
+// Stub related map calls
+LLWorldMapMessage::LLWorldMapMessage() { }
+LLWorldMapMessage::~LLWorldMapMessage() { }
+void LLWorldMapMessage::sendItemRequest(U32 type, U64 handle) { }
+void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { }
+LLWorldMipmap::LLWorldMipmap() { }
+LLWorldMipmap::~LLWorldMipmap() { }
+void LLWorldMipmap::reset() { }
+void LLWorldMipmap::dropBoostLevels() { }
+void LLWorldMipmap::equalizeBoostLevels() { }
+LLPointer<LLViewerImage> LLWorldMipmap::getObjectsTile(U32 grid_x, U32 grid_y, S32 level, bool load)
+{ return NULL; }
+
+// Stub other stuff
+BOOL gPacificDaylightTime;
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+
+const F32 X_WORLD_TEST = 1000.0f * REGION_WIDTH_METERS;
+const F32 Y_WORLD_TEST = 2000.0f * REGION_WIDTH_METERS;
+const F32 Z_WORLD_TEST = 240.0f;
+const std::string ITEM_NAME_TEST = "Item Foo";
+const std::string TOOLTIP_TEST = "Tooltip Foo";
+
+const std::string SIM_NAME_TEST = "Sim Foo";
+
+namespace tut
+{
+	// Test wrapper declarations
+	struct iteminfo_test
+	{
+		// Instance to be tested
+		LLItemInfo* mItem;
+
+		// Constructor and destructor of the test wrapper
+		iteminfo_test()
+		{
+			LLUUID id;
+			mItem = new LLItemInfo(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+		}
+		~iteminfo_test()
+		{
+			delete mItem;
+		}
+	};
+
+	struct siminfo_test
+	{
+		// Instance to be tested
+		LLSimInfo* mSim;
+
+		// Constructor and destructor of the test wrapper
+		siminfo_test()
+		{
+			U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+			mSim = new LLSimInfo(handle);
+		}
+		~siminfo_test()
+		{
+			delete mSim;
+		}
+	};
+
+	struct worldmap_test
+	{
+		// Instance to be tested
+		LLWorldMap* mWorld;
+
+		// Constructor and destructor of the test wrapper
+		worldmap_test()
+		{
+			mWorld = LLWorldMap::getInstance();
+		}
+		~worldmap_test()
+		{
+			mWorld = NULL;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<iteminfo_test> iteminfo_t;
+	typedef iteminfo_t::object iteminfo_object_t;
+	tut::iteminfo_t tut_iteminfo("iteminfo");
+
+	typedef test_group<siminfo_test> siminfo_t;
+	typedef siminfo_t::object siminfo_object_t;
+	tut::siminfo_t tut_siminfo("siminfo");
+
+	typedef test_group<worldmap_test> worldmap_t;
+	typedef worldmap_t::object worldmap_object_t;
+	tut::worldmap_t tut_worldmap("worldmap");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLItemInfo interface
+	// ---------------------------------------------------------------------------------------
+	template<> template<>
+	void iteminfo_object_t::test<1>()
+	{
+		// Test 1 : setCount() / getCount()
+		mItem->setCount(10);
+		ensure("LLItemInfo::setCount() test failed", mItem->getCount() == 10);
+		// Test 2 : setTooltip() / getToolTip()
+		std::string tooltip = TOOLTIP_TEST;
+		mItem->setTooltip(tooltip);
+		ensure("LLItemInfo::setTooltip() test failed", mItem->getToolTip() == TOOLTIP_TEST);
+		// Test 3 : setElevation() / getGlobalPosition()
+		mItem->setElevation(Z_WORLD_TEST);
+		LLVector3d pos = mItem->getGlobalPosition();
+		LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, Z_WORLD_TEST);
+		ensure("LLItemInfo::getGlobalPosition() test failed", pos == ref);
+		// Test 4 : getName()
+		std::string name = mItem->getName();
+		ensure("LLItemInfo::getName() test failed", name == ITEM_NAME_TEST);
+		// Test 5 : isName()
+		ensure("LLItemInfo::isName() test failed", mItem->isName(name));
+		// Test 6 : getUUID()
+		LLUUID id;
+		ensure("LLItemInfo::getUUID() test failed", mItem->getUUID() == id);
+		// Test 7 : getRegionHandle()
+		U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+		ensure("LLItemInfo::getRegionHandle() test failed", mItem->getRegionHandle() == handle);
+	}
+	// ---------------------------------------------------------------------------------------
+	// Test the LLSimInfo interface
+	// ---------------------------------------------------------------------------------------
+	// Test Setters and Accessors methods
+	template<> template<>
+	void siminfo_object_t::test<1>()
+	{
+		// Test 1 : setName() / getName()
+		std::string name = SIM_NAME_TEST;
+		mSim->setName(name);
+		ensure("LLSimInfo::setName() test failed", mSim->getName() == SIM_NAME_TEST);
+		// Test 2 : isName()
+		ensure("LLSimInfo::isName() test failed", mSim->isName(name));
+		// Test 3 : getGlobalPos()
+		LLVector3 local;
+		LLVector3d ref(X_WORLD_TEST, Y_WORLD_TEST, 0.0f);
+		LLVector3d pos = mSim->getGlobalPos(local);
+		ensure("LLSimInfo::getGlobalPos() test failed", pos == ref);
+		// Test 4 : getGlobalOrigin()
+		pos = mSim->getGlobalOrigin();
+		ensure("LLSimInfo::getGlobalOrigin() test failed", pos == ref);
+		// Test 5 : clearImage()
+		try {
+			mSim->clearImage();
+		} catch (...) {
+			fail("LLSimInfo::clearImage() test failed");
+		}
+		// Test 6 : dropImagePriority()
+		try {
+			mSim->dropImagePriority();
+		} catch (...) {
+			fail("LLSimInfo::dropImagePriority() test failed");
+		}
+		// Test 7 : updateAgentCount()
+		try {
+			mSim->updateAgentCount(0.0f);
+		} catch (...) {
+			fail("LLSimInfo::updateAgentCount() test failed");
+		}
+		// Test 8 : getAgentCount()
+		S32 agents = mSim->getAgentCount();
+		ensure("LLSimInfo::getAgentCount() test failed", agents == 0);
+		// Test 9 : setLandForSaleImage() / getLandForSaleImage()
+		LLUUID id;
+		mSim->setLandForSaleImage(id);
+		LLPointer<LLViewerImage> image = mSim->getLandForSaleImage();
+		ensure("LLSimInfo::getLandForSaleImage() test failed", image.isNull());
+		// Test 10 : isPG()
+		mSim->setAccess(SIM_ACCESS_PG);
+		ensure("LLSimInfo::isPG() test failed", mSim->isPG());
+		// Test 11 : isDown()
+		mSim->setAccess(SIM_ACCESS_DOWN);
+		ensure("LLSimInfo::isDown() test failed", mSim->isDown());
+		// Test 12 : Access strings can't be accessed from unit test...
+		//ensure("LLSimInfo::getAccessString() test failed", mSim->getAccessString() == "Offline");
+		// Test 13 : Region strings can't be accessed from unit test...
+		//mSim->setRegionFlags(REGION_FLAGS_SANDBOX);
+		//ensure("LLSimInfo::setRegionFlags() test failed", mSim->getFlagsString() == "Sandbox");
+	}
+	// Test management of LLInfoItem lists
+	template<> template<>
+	void siminfo_object_t::test<2>()
+	{
+		// Test 14 : clearItems()
+		try {
+			mSim->clearItems();
+		} catch (...) {
+			fail("LLSimInfo::clearItems() at init test failed");
+		}
+
+		// Test 15 : Verify that all the lists are empty
+		LLSimInfo::item_info_list_t list;
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::getTeleHub() empty at init test failed", list.empty());
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::getInfoHub() empty at init test failed", list.empty());
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::getPGEvent() empty at init test failed", list.empty());
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::getMatureEvent() empty at init test failed", list.empty());
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::getLandForSale() empty at init test failed", list.empty());
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::getAgentLocation() empty at init test failed", list.empty());
+
+		// Create an item to be inserted
+		LLUUID id;
+		LLItemInfo item(X_WORLD_TEST, Y_WORLD_TEST, ITEM_NAME_TEST, id);
+
+		// Insert the item in each list
+		mSim->insertTeleHub(item);
+		mSim->insertInfoHub(item);
+		mSim->insertPGEvent(item);
+		mSim->insertMatureEvent(item);
+		mSim->insertLandForSale(item);
+		mSim->insertAgentLocation(item);
+
+		// Test 16 : Verify that the lists contain 1 item each
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::insertTeleHub() test failed", list.size() == 1);
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::insertInfoHub() test failed", list.size() == 1);
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::insertPGEvent() test failed", list.size() == 1);
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::insertMatureEvent() test failed", list.size() == 1);
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::insertLandForSale() test failed", list.size() == 1);
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::insertAgentLocation() test failed", list.size() == 1);
+
+		// Test 17 : clearItems()
+		try {
+			mSim->clearItems();
+		} catch (...) {
+			fail("LLSimInfo::clearItems() at end test failed");
+		}
+
+		// Test 18 : Verify that all the lists are empty again... *except* agent which is persisted!! (on purpose)
+		list = mSim->getTeleHub();
+		ensure("LLSimInfo::getTeleHub() empty after clear test failed", list.empty());
+		list = mSim->getInfoHub();
+		ensure("LLSimInfo::getInfoHub() empty after clear test failed", list.empty());
+		list = mSim->getPGEvent();
+		ensure("LLSimInfo::getPGEvent() empty after clear test failed", list.empty());
+		list = mSim->getMatureEvent();
+		ensure("LLSimInfo::getMatureEvent() empty after clear test failed", list.empty());
+		list = mSim->getLandForSale();
+		ensure("LLSimInfo::getLandForSale() empty after clear test failed", list.empty());
+		list = mSim->getAgentLocation();
+		ensure("LLSimInfo::getAgentLocation() empty after clear test failed", list.size() == 1);
+	}
+
+	// ---------------------------------------------------------------------------------------
+	// Test the LLWorldMap interface
+	// ---------------------------------------------------------------------------------------
+	// Test Setters and Accessors methods
+	template<> template<>
+	void worldmap_object_t::test<1>()
+	{
+		// Test 1 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at init test failed");
+		}
+		// Test 2 : clearImageRefs()
+		try {
+			mWorld->clearImageRefs();
+		} catch (...) {
+			fail("LLWorldMap::clearImageRefs() test failed");
+		}
+		// Test 3 : dropImagePriorities()
+		try {
+			mWorld->dropImagePriorities();
+		} catch (...) {
+			fail("LLWorldMap::dropImagePriorities() test failed");
+		}
+		// Test 4 : reloadItems()
+		try {
+			mWorld->reloadItems(true);
+		} catch (...) {
+			fail("LLWorldMap::reloadItems() test failed");
+		}
+		// Test 5 : updateRegions()
+		try {
+			mWorld->updateRegions(1000, 1000, 1004, 1004);
+		} catch (...) {
+			fail("LLWorldMap::updateRegions() test failed");
+		}
+		// Test 6 : equalizeBoostLevels()
+ 		try {
+ 			mWorld->equalizeBoostLevels();
+ 		} catch (...) {
+ 			fail("LLWorldMap::equalizeBoostLevels() test failed");
+ 		}
+		// Test 7 : getObjectsTile()
+		try {
+			LLPointer<LLViewerImage> image = mWorld->getObjectsTile((U32)(X_WORLD_TEST/REGION_WIDTH_METERS), (U32)(Y_WORLD_TEST/REGION_WIDTH_METERS), 1);
+			ensure("LLWorldMap::getObjectsTile() failed", image.isNull());
+		} catch (...) {
+			fail("LLWorldMap::getObjectsTile() test failed with exception");
+		}
+	}
+	// Test management of LLSimInfo lists
+	template<> template<>
+	void worldmap_object_t::test<2>()
+	{
+		// Test 8 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at init test failed");
+		}
+
+		// Test 9 : Verify that all the region list is empty
+		LLWorldMap::sim_info_map_t list;
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::getRegionMap() empty at init test failed", list.empty());
+
+		// Test 10 : Insert a region
+		bool success;
+		LLUUID id;
+		std::string name_sim = SIM_NAME_TEST;
+		success = mWorld->insertRegion(	U32(X_WORLD_TEST), 
+						U32(Y_WORLD_TEST), 
+										name_sim,
+										id,
+										SIM_ACCESS_PG,
+										REGION_FLAGS_SANDBOX);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertRegion() failed", success && (list.size() == 1));
+
+		// Test 11 : Insert an item in the same region -> number of regions doesn't increase
+		std::string name_item = ITEM_NAME_TEST;
+		success = mWorld->insertItem(	U32(X_WORLD_TEST + REGION_WIDTH_METERS/2),
+						U32(Y_WORLD_TEST + REGION_WIDTH_METERS/2), 
+										name_item,
+										id,
+										MAP_ITEM_LAND_FOR_SALE,
+										0, 0);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertItem() in existing region failed", success && (list.size() == 1));
+
+		// Test 12 : Insert an item in another region -> number of regions increases
+		success = mWorld->insertItem(	U32(X_WORLD_TEST + REGION_WIDTH_METERS*2), 
+						U32(Y_WORLD_TEST + REGION_WIDTH_METERS*2), 
+										name_item,
+										id,
+										MAP_ITEM_LAND_FOR_SALE,
+										0, 0);
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::insertItem() in unexisting region failed", success && (list.size() == 2));
+
+		// Test 13 : simInfoFromPosGlobal() in region
+		LLVector3d pos1(	X_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS*2 + REGION_WIDTH_METERS/2, 
+							0.0f);
+		LLSimInfo* sim;
+		sim = mWorld->simInfoFromPosGlobal(pos1);
+		ensure("LLWorldMap::simInfoFromPosGlobal() test on existing region failed", sim != NULL);
+
+		// Test 14 : simInfoFromPosGlobal() outside region
+		LLVector3d pos2(	X_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS*4 + REGION_WIDTH_METERS/2, 
+							0.0f);
+		sim = mWorld->simInfoFromPosGlobal(pos2);
+		ensure("LLWorldMap::simInfoFromPosGlobal() test outside region failed", sim == NULL);
+
+		// Test 15 : simInfoFromName()
+		sim = mWorld->simInfoFromName(name_sim);
+		ensure("LLWorldMap::simInfoFromName() test on existing region failed", sim != NULL);
+
+		// Test 16 : simInfoFromHandle()
+		U64 handle = to_region_handle_global(X_WORLD_TEST, Y_WORLD_TEST);
+		sim = mWorld->simInfoFromHandle(handle);
+		ensure("LLWorldMap::simInfoFromHandle() test on existing region failed", sim != NULL);
+
+		// Test 17 : simNameFromPosGlobal()
+		LLVector3d pos3(	X_WORLD_TEST + REGION_WIDTH_METERS/2, 
+							Y_WORLD_TEST + REGION_WIDTH_METERS/2, 
+							0.0f);
+		success = mWorld->simNameFromPosGlobal(pos3, name_sim);
+		ensure("LLWorldMap::simNameFromPosGlobal() test on existing region failed", success && (name_sim == SIM_NAME_TEST));
+		
+		// Test 18 : reset()
+		try {
+			mWorld->reset();
+		} catch (...) {
+			fail("LLWorldMap::reset() at end test failed");
+		}
+
+		// Test 19 : Verify that all the region list is empty
+		list = mWorld->getRegionMap();
+		ensure("LLWorldMap::getRegionMap() empty at end test failed", list.empty());
+	}
+	// Test tracking
+	template<> template<>
+	void worldmap_object_t::test<3>()
+	{
+		// Point to track
+		LLVector3d pos( X_WORLD_TEST + REGION_WIDTH_METERS/2, Y_WORLD_TEST + REGION_WIDTH_METERS/2, Z_WORLD_TEST);
+
+		// Test 20 : no tracking
+		mWorld->cancelTracking();
+		ensure("LLWorldMap::cancelTracking() at begin test failed", mWorld->isTracking() == false);
+
+		// Test 21 : set tracking
+		mWorld->setTracking(pos);
+		ensure("LLWorldMap::setTracking() failed", mWorld->isTracking() && !mWorld->isTrackingValidLocation());
+
+		// Test 22 : set click and commit flags
+		mWorld->setTrackingDoubleClick();
+		ensure("LLWorldMap::setTrackingDoubleClick() failed", mWorld->isTrackingDoubleClick());
+		mWorld->setTrackingCommit();
+		ensure("LLWorldMap::setTrackingCommit() failed", mWorld->isTrackingCommit());
+
+		// Test 23 : in rectangle test
+		bool inRect = mWorld->isTrackingInRectangle(	X_WORLD_TEST, Y_WORLD_TEST,  
+														X_WORLD_TEST + REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + REGION_WIDTH_METERS);
+		ensure("LLWorldMap::isTrackingInRectangle() in rectangle failed", inRect);
+		inRect = mWorld->isTrackingInRectangle(			X_WORLD_TEST + REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + REGION_WIDTH_METERS,  
+														X_WORLD_TEST + 2 * REGION_WIDTH_METERS, 
+														Y_WORLD_TEST + 2 * REGION_WIDTH_METERS);
+		ensure("LLWorldMap::isTrackingInRectangle() outside rectangle failed", !inRect);
+
+		// Test 24 : set tracking to valid and invalid
+		mWorld->setTrackingValid();
+		ensure("LLWorldMap::setTrackingValid() failed", mWorld->isTrackingValidLocation() && !mWorld->isTrackingInvalidLocation());
+		mWorld->setTrackingInvalid();
+		ensure("LLWorldMap::setTrackingInvalid() failed", !mWorld->isTrackingValidLocation() && mWorld->isTrackingInvalidLocation());
+
+		// Test 25 : getTrackedPositionGlobal()
+		LLVector3d res = mWorld->getTrackedPositionGlobal();
+		ensure("LLWorldMap::getTrackedPositionGlobal() failed", res == pos);
+
+		// Test 26 : reset tracking
+		mWorld->cancelTracking();
+		ensure("LLWorldMap::cancelTracking() at end test failed", mWorld->isTracking() == false);
+	}
+}
diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9938175c558fa7027f156070f298aa99071cb268
--- /dev/null
+++ b/indra/newview/tests/llworldmipmap_test.cpp
@@ -0,0 +1,176 @@
+/** 
+ * @file llworldmipmap_test.cpp
+ * @author Merov Linden
+ * @date 2009-02-03
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ * 
+ * Copyright (c) 2006-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header: almost always required for newview cpp files
+#include "../llviewerprecompiledheaders.h"
+// Class to test
+#include "../llworldmipmap.h"
+// Dependencies
+#include "../llviewerimagelist.h"
+// Tut header
+#include "../test/lltut.h"
+
+// -------------------------------------------------------------------------------------------
+// Stubbing: Declarations required to link and run the class being tested
+// Notes: 
+// * Add here stubbed implementation of the few classes and methods used in the class to be tested
+// * Add as little as possible (let the link errors guide you)
+// * Do not make any assumption as to how those classes or methods work (i.e. don't copy/paste code)
+// * A simulator for a class can be implemented here. Please comment and document thoroughly.
+
+LLViewerImageList::LLViewerImageList() { }
+LLViewerImageList::~LLViewerImageList() { }
+
+LLViewerImageList gImageList;
+
+LLViewerImage* LLViewerImageList::getImageFromUrl(const std::string& url,
+												   BOOL usemipmaps,
+												   BOOL level_immediate,
+												   LLGLint internal_format,
+												   LLGLenum primary_format, 
+												   const LLUUID& force_id)
+{ return NULL; }
+void LLViewerImage::setBoostLevel(S32 level) { }
+
+// End Stubbing
+// -------------------------------------------------------------------------------------------
+
+// -------------------------------------------------------------------------------------------
+// TUT
+// -------------------------------------------------------------------------------------------
+namespace tut
+{
+	// Test wrapper declaration
+	struct worldmipmap_test
+	{
+		// Derived test class
+		class LLTestWorldMipmap : public LLWorldMipmap
+		{
+			// Put here stubbs of virtual methods we shouldn't call all the way down
+		};
+		// Instance to be tested
+		LLTestWorldMipmap* mMap;
+
+		// Constructor and destructor of the test wrapper
+		worldmipmap_test()
+		{
+			mMap = new LLTestWorldMipmap;
+		}
+		~worldmipmap_test()
+		{
+			delete mMap;
+		}
+	};
+
+	// Tut templating thingamagic: test group, object and test instance
+	typedef test_group<worldmipmap_test> worldmipmap_t;
+	typedef worldmipmap_t::object worldmipmap_object_t;
+	tut::worldmipmap_t tut_worldmipmap("worldmipmap");
+
+	// ---------------------------------------------------------------------------------------
+	// Test functions
+	// Notes:
+	// * Test as many as you possibly can without requiring a full blown simulation of everything
+	// * The tests are executed in sequence so the test instance state may change between calls
+	// * Remember that you cannot test private methods with tut
+	// ---------------------------------------------------------------------------------------
+	// Test static methods
+	// Test 1 : scaleToLevel()
+	template<> template<>
+	void worldmipmap_object_t::test<1>()
+	{
+		S32 level = mMap->scaleToLevel(0.0);
+		ensure("scaleToLevel() test 1 failed", level == LLWorldMipmap::MAP_LEVELS);
+		level = mMap->scaleToLevel(LLWorldMipmap::MAP_TILE_SIZE);
+		ensure("scaleToLevel() test 2 failed", level == 1);
+		level = mMap->scaleToLevel(10 * LLWorldMipmap::MAP_TILE_SIZE);
+		ensure("scaleToLevel() test 3 failed", level == 1);
+	}
+	// Test 2 : globalToMipmap()
+	template<> template<>
+	void worldmipmap_object_t::test<2>()
+	{
+		U32 grid_x, grid_y;
+		mMap->globalToMipmap(1000.f*REGION_WIDTH_METERS, 1000.f*REGION_WIDTH_METERS, 1, &grid_x, &grid_y);
+		ensure("globalToMipmap() test 1 failed", (grid_x == 1000) && (grid_y == 1000));
+		mMap->globalToMipmap(0.0, 0.0, LLWorldMipmap::MAP_LEVELS, &grid_x, &grid_y);
+		ensure("globalToMipmap() test 2 failed", (grid_x == 0) && (grid_y == 0));
+	}
+	// Test 3 : getObjectsTile()
+	template<> template<>
+	void worldmipmap_object_t::test<3>()
+	{
+		// Depends on some inline methods in LLViewerImage... Thinking about how to make this work
+		// LLPointer<LLViewerImage> img = mMap->getObjectsTile(0, 0, 1);
+		// ensure("getObjectsTile() test failed", img.isNull());
+	}
+	// Test 4 : equalizeBoostLevels()
+	template<> template<>
+	void worldmipmap_object_t::test<4>()
+	{
+		try
+		{
+			mMap->equalizeBoostLevels();
+		} 
+		catch (...)
+		{
+			fail("equalizeBoostLevels() test failed");
+		}
+	}
+	// Test 5 : dropBoostLevels()
+	template<> template<>
+	void worldmipmap_object_t::test<5>()
+	{
+		try
+		{
+			mMap->dropBoostLevels();
+		} 
+		catch (...)
+		{
+			fail("dropBoostLevels() test failed");
+		}
+	}
+	// Test 6 : reset()
+	template<> template<>
+	void worldmipmap_object_t::test<6>()
+	{
+		try
+		{
+			mMap->reset();
+		} 
+		catch (...)
+		{
+			fail("reset() test failed");
+		}
+	}
+}
diff --git a/indra/tools/vstool/README.txt b/indra/tools/vstool/README.txt
index e4191800312f49e8906997534d3ed4ac603d2341..6f64aa41df08c227e0ef421d53fc260b83bf8293 100644
--- a/indra/tools/vstool/README.txt
+++ b/indra/tools/vstool/README.txt
@@ -1,9 +1,9 @@
-VSTool is a command line utility to manipulate VisualStudio settings. 
-
-The windows cmake project configuration uses VSTool.exe
-
-A handy upgrade:
- figure out how to make cmake build this csharp app
- - or write the app using script (jscript?!?) so it doesn't need to be built.
-
-
+VSTool is a command line utility to manipulate VisualStudio settings. 
+
+The windows cmake project configuration uses VSTool.exe
+
+A handy upgrade:
+ figure out how to make cmake build this csharp app
+ - or write the app using script (jscript?!?) so it doesn't need to be built.
+
+
diff --git a/indra/tools/vstool/VSTool.csproj b/indra/tools/vstool/VSTool.csproj
index 24f1031f81b6151db8ea20628ee974ff35d18626..5d8764b6bffde9415aa5d0fb326ea949bc4d884c 100644
--- a/indra/tools/vstool/VSTool.csproj
+++ b/indra/tools/vstool/VSTool.csproj
@@ -1,95 +1,95 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{96943E2D-1373-4617-A117-D0F997A94919}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>VSTool</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Exe</OutputType>
-    <RootNamespace>VSTool</RootNamespace>
-    <RunPostBuildEvent>Always</RunPostBuildEvent>
-    <StartupObject>VSTool.VSToolMain</StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>.\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>.\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>true</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="main.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectType>Local</ProjectType>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{96943E2D-1373-4617-A117-D0F997A94919}</ProjectGuid>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ApplicationIcon>
+    </ApplicationIcon>
+    <AssemblyKeyContainerName>
+    </AssemblyKeyContainerName>
+    <AssemblyName>VSTool</AssemblyName>
+    <AssemblyOriginatorKeyFile>
+    </AssemblyOriginatorKeyFile>
+    <DefaultClientScript>JScript</DefaultClientScript>
+    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+    <DefaultTargetSchema>IE50</DefaultTargetSchema>
+    <DelaySign>false</DelaySign>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>VSTool</RootNamespace>
+    <RunPostBuildEvent>Always</RunPostBuildEvent>
+    <StartupObject>VSTool.VSToolMain</StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <OutputPath>.\</OutputPath>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <BaseAddress>285212672</BaseAddress>
+    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+    <ConfigurationOverrideFile>
+    </ConfigurationOverrideFile>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <DebugSymbols>true</DebugSymbols>
+    <FileAlignment>4096</FileAlignment>
+    <NoStdLib>false</NoStdLib>
+    <NoWarn>
+    </NoWarn>
+    <Optimize>false</Optimize>
+    <RegisterForComInterop>false</RegisterForComInterop>
+    <RemoveIntegerChecks>false</RemoveIntegerChecks>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <WarningLevel>4</WarningLevel>
+    <DebugType>full</DebugType>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <OutputPath>.\</OutputPath>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <BaseAddress>285212672</BaseAddress>
+    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+    <ConfigurationOverrideFile>
+    </ConfigurationOverrideFile>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <DebugSymbols>false</DebugSymbols>
+    <FileAlignment>4096</FileAlignment>
+    <NoStdLib>false</NoStdLib>
+    <NoWarn>
+    </NoWarn>
+    <Optimize>true</Optimize>
+    <RegisterForComInterop>false</RegisterForComInterop>
+    <RemoveIntegerChecks>false</RemoveIntegerChecks>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <WarningLevel>4</WarningLevel>
+    <DebugType>none</DebugType>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System">
+      <Name>System</Name>
+    </Reference>
+    <Reference Include="System.Data">
+      <Name>System.Data</Name>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="main.cs">
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>
+    </PreBuildEvent>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/indra/tools/vstool/VSTool.sln b/indra/tools/vstool/VSTool.sln
index 88596718028cca0ba134e2b2cf11ba6c5a81cbdf..543a0a2efcfaea9bc9fc14f8bc93ce0f07f8b56d 100644
--- a/indra/tools/vstool/VSTool.sln
+++ b/indra/tools/vstool/VSTool.sln
@@ -1,19 +1,19 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs
index cc268d59d98f5b8a9b5be55d6dfa39bc3e0b0d73..5c41c916e2e34bcab3859a37b25f5204cad71789 100644
--- a/indra/tools/vstool/main.cs
+++ b/indra/tools/vstool/main.cs
@@ -1,711 +1,711 @@
-// Code about getting running instances visual studio
-// was borrowed from 
-// http://www.codeproject.com/KB/cs/automatingvisualstudio.aspx
-
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Runtime.InteropServices.ComTypes;
-using Microsoft.CSharp;
-
-namespace VSTool
-{
-    // The MessageFilter class comes from:
-    // http://msdn.microsoft.com/en-us/library/ms228772(VS.80).aspx
-    // It allows vstool to get timing error messages from 
-    // visualstudio and handle them.
-    public class MessageFilter : IOleMessageFilter
-    {
-        //
-        // Class containing the IOleMessageFilter
-        // thread error-handling functions.
-
-        // Start the filter.
-        public static void Register()
-        {
-            IOleMessageFilter newFilter = new MessageFilter(); 
-            IOleMessageFilter oldFilter = null; 
-            CoRegisterMessageFilter(newFilter, out oldFilter);
-        }
-
-        // Done with the filter, close it.
-        public static void Revoke()
-        {
-            IOleMessageFilter oldFilter = null; 
-            CoRegisterMessageFilter(null, out oldFilter);
-        }
-
-        //
-        // IOleMessageFilter functions.
-        // Handle incoming thread requests.
-        int IOleMessageFilter.HandleInComingCall(int dwCallType, 
-          System.IntPtr hTaskCaller, int dwTickCount, System.IntPtr 
-          lpInterfaceInfo) 
-        {
-            //Return the flag SERVERCALL_ISHANDLED.
-            return 0;
-        }
-
-        // Thread call was rejected, so try again.
-        int IOleMessageFilter.RetryRejectedCall(System.IntPtr 
-          hTaskCallee, int dwTickCount, int dwRejectType)
-        {
-            if (dwRejectType == 2)
-            // flag = SERVERCALL_RETRYLATER.
-            {
-                // Retry the thread call immediately if return >=0 & 
-                // <100.
-                return 99;
-            }
-            // Too busy; cancel call.
-            return -1;
-        }
-
-        int IOleMessageFilter.MessagePending(System.IntPtr hTaskCallee, 
-          int dwTickCount, int dwPendingType)
-        {
-            //Return the flag PENDINGMSG_WAITDEFPROCESS.
-            return 2; 
-        }
-
-        // Implement the IOleMessageFilter interface.
-        [DllImport("Ole32.dll")]
-        private static extern int 
-          CoRegisterMessageFilter(IOleMessageFilter newFilter, out 
-          IOleMessageFilter oldFilter);
-    }
-
-    [ComImport(), Guid("00000016-0000-0000-C000-000000000046"), 
-    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
-    interface IOleMessageFilter 
-    {
-        [PreserveSig]
-        int HandleInComingCall( 
-            int dwCallType, 
-            IntPtr hTaskCaller, 
-            int dwTickCount, 
-            IntPtr lpInterfaceInfo);
-
-        [PreserveSig]
-        int RetryRejectedCall( 
-            IntPtr hTaskCallee, 
-            int dwTickCount,
-            int dwRejectType);
-
-        [PreserveSig]
-        int MessagePending( 
-            IntPtr hTaskCallee, 
-            int dwTickCount,
-            int dwPendingType);
-    }
-
-    class ViaCOM
-    {
-        public static object GetProperty(object from_obj, string prop_name)
-        {
-            try
-            {
-                Type objType = from_obj.GetType();
-                return objType.InvokeMember(
-                    prop_name,
-                    BindingFlags.GetProperty, null,
-                    from_obj,
-                    null);
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine("Error getting property: \"{0}\"", prop_name);
-                Console.WriteLine(e.Message);
-                throw e;
-            }
-        }
-
-        public static object SetProperty(object from_obj, string prop_name, object new_value)
-        {
-            try
-            {
-                object[] args = { new_value };
-                Type objType = from_obj.GetType();
-                return objType.InvokeMember(
-                    prop_name,
-                    BindingFlags.DeclaredOnly |
-                    BindingFlags.Public |
-                    BindingFlags.NonPublic |
-                    BindingFlags.Instance |
-                    BindingFlags.SetProperty,
-                    null,
-                    from_obj,
-                    args);
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine("Error setting property: \"{0}\"", prop_name);
-                Console.WriteLine(e.Message);
-                throw e;
-            }
-        }
-
-        public static object CallMethod(object from_obj, string method_name, params object[] args)
-        {
-            try
-            {
-                Type objType = from_obj.GetType();
-                return objType.InvokeMember(
-                    method_name,
-                    BindingFlags.DeclaredOnly |
-                    BindingFlags.Public |
-                    BindingFlags.NonPublic |
-                    BindingFlags.Instance |
-                    BindingFlags.InvokeMethod,
-                    null,
-                    from_obj,
-                    args);
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine("Error calling method \"{0}\"", method_name);
-                Console.WriteLine(e.Message);
-                throw e;
-            }
-        }
-    };
-
-    /// <summary>
-	/// The main entry point class for VSTool.
-	/// </summary>
-    class VSToolMain
-    {
-        #region Interop imports
-        [DllImport("ole32.dll")]  
-        public static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot); 
- 
-        [DllImport("ole32.dll")]  
-        public static extern int  CreateBindCtx(int reserved, out IBindCtx ppbc);
-        #endregion 
-
-        static System.Boolean ignore_case = true;
-
-        static string solution_name = null;
-        static bool use_new_vs = false;
-        static Hashtable projectDict = new Hashtable();
-        static string startup_project = null;
-        static string config = null;
-
-        static object dte = null;
-        static object solution = null;
-
-        /// <summary>
-		/// The main entry point for the application.
-		/// </summary>
-		[STAThread]
-		static int Main(string[] args)
-		{
-            int retVal = 0;
-            bool need_save = false;
-
-            try
-            {
-                parse_command_line(args);
-
-                Console.WriteLine("Editing solution: {0}", solution_name);
-
-                bool found_open_solution = GetDTEAndSolution();
-
-                if (dte == null || solution == null)
-                {
-                    retVal = 1;
-                }
-                else
-                {
-                    MessageFilter.Register();
-
-                    // Walk through all of the projects in the solution
-                    // and list the type of each project.
-                    foreach (DictionaryEntry p in projectDict)
-                    {
-                        string project_name = (string)p.Key;
-                        string working_dir = (string)p.Value;
-                        if (SetProjectWorkingDir(solution, project_name, working_dir))
-                        {
-                            need_save = true;
-                        }
-                    }
-
-                    if (config != null)
-                    {
-                        need_save = SetActiveConfig(config);
-                    }
-
-                    if (startup_project != null)
-                    {
-                        need_save = SetStartupProject(startup_project);
-                    }
-
-                    if (need_save)
-                    {
-                        if (found_open_solution == false)
-                        {
-                            ViaCOM.CallMethod(solution, "Close", null);
-                        }
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-                retVal = 1;
-            }
-            finally
-            {
-                if (solution != null)
-                {
-                    Marshal.ReleaseComObject(solution);
-                    solution = null;
-                }
-
-                if (dte != null)
-                {
-                    Marshal.ReleaseComObject(dte);
-                    dte = null;
-                }
-
-                MessageFilter.Revoke();
-            }
-            return retVal;
-        }
-
-        public static bool parse_command_line(string[] args)
-        {
-            string options_desc = 
-                "--solution <solution_name>   : MSVC solution name. (required)\n" +
-                "--use_new_vs                 : Ignore running versions of visual studio.\n" +
-                "--workingdir <project> <dir> : Set working dir of a VC project.\n" +
-                "--config <config>            : Set the active config for the solution.\n" +
-                "--startup <project>          : Set the startup project for the solution.\n";
-
-            try
-            {
-                // Command line param parsing loop.
-                int i = 0;
-                for (; i < args.Length; ++i)
-                {
-                    if ("--solution" == args[i])
-                    {
-                        if (solution_name != null)
-                        {
-                            throw new ApplicationException("Found second --solution option");
-                        }
-                        solution_name = args[++i];
-                    }
-                    else if ("--use_new_vs" == args[i])
-                    {
-                        use_new_vs = true;
-                    }
-
-                    else if ("--workingdir" == args[i])
-                    {
-                        string project_name = args[++i];
-                        string working_dir = args[++i];
-                        projectDict.Add(project_name, working_dir);
-                    }
-                    else if ("--config" == args[i])
-                    {
-                        if (config != null)
-                        {
-                            throw new ApplicationException("Found second --config option");
-                        }
-                        config = args[++i];
-                    }
-                    else if ("--startup" == args[i])
-                    {
-                        if (startup_project != null)
-                        {
-                            throw new ApplicationException("Found second --startup option");
-                        }
-                        startup_project = args[++i];
-                    }
-                    else
-                    {
-                        throw new ApplicationException("Found unrecognized token on command line: " + args[i]);
-                    }
-                }
-
-                if (solution_name == null)
-                {
-                    throw new ApplicationException("The --solution option is required.");
-                }
-            }
-            catch(ApplicationException e)
-            {
-
-                Console.WriteLine("Oops! " + e.Message);
-                Console.Write("Command line:");
-                foreach (string arg in args)
-                {
-                    Console.Write(" " + arg);
-                }
-                Console.Write("\n\n");
-                Console.WriteLine("VSTool command line usage");
-                Console.Write(options_desc);
-                throw e;
-            }
-            return true;
-        }
-
-        public static bool GetDTEAndSolution()
-        {
-            bool found_open_solution = true;
-
-            Console.WriteLine("Looking for existing VisualStudio instance...");
-
-            // Get an instance of the currently running Visual Studio .NET IDE.
-            // dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1");
-            string full_solution_name = System.IO.Path.GetFullPath(solution_name);
-            if (false == use_new_vs)
-            {
-                dte = GetIDEInstance(full_solution_name);
-            }
-
-            if (dte == null)
-            {
-                try
-                {
-                    Console.WriteLine("  Didn't find open solution, starting new background VisualStudio instance...");
-                    Console.WriteLine("  Reading .sln file version...");
-                    string version = GetSolutionVersion(full_solution_name);
-
-                    Console.WriteLine("  Using version: {0}...", version);
-                    string progid = GetVSProgID(version);
-
-                    Type objType = Type.GetTypeFromProgID(progid);
-                    dte = System.Activator.CreateInstance(objType);
-                    Console.WriteLine("  Reading solution: \"{0}\"", full_solution_name);
-
-                    solution = ViaCOM.GetProperty(dte, "Solution");
-                    object[] openArgs = { full_solution_name };
-                    ViaCOM.CallMethod(solution, "Open", openArgs);
-                }
-                catch (Exception e)
-                {
-                    Console.WriteLine(e.Message);
-                    Console.WriteLine("Quitting do to error opening: {0}", full_solution_name);
-                    solution = null;
-                    dte = null;
-                    return found_open_solution;
-                }
-                found_open_solution = false;
-            }
-
-            if (solution == null)
-            {
-                solution = ViaCOM.GetProperty(dte, "Solution");
-            }
-
-            return found_open_solution;
-        }
-
-        /// <summary>
-        /// Get the DTE object for the instance of Visual Studio IDE that has 
-        /// the specified solution open.
-        /// </summary>
-        /// <param name="solutionFile">The absolute filename of the solution</param>
-        /// <returns>Corresponding DTE object or null if no such IDE is running</returns>
-        public static object GetIDEInstance( string solutionFile )
-        {
-            Hashtable runningInstances = GetIDEInstances( true );
-            IDictionaryEnumerator enumerator = runningInstances.GetEnumerator();
-
-            while ( enumerator.MoveNext() )
-            {
-                try
-                {
-                    object ide = enumerator.Value;
-                    if (ide != null)
-                    {
-                        object sol = ViaCOM.GetProperty(ide, "Solution");
-                        if (0 == string.Compare((string)ViaCOM.GetProperty(sol, "FullName"), solutionFile, ignore_case))
-                        {
-                            return ide;
-                        }
-                    }
-                } 
-                catch{}
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Get a table of the currently running instances of the Visual Studio .NET IDE.
-        /// </summary>
-        /// <param name="openSolutionsOnly">Only return instances that have opened a solution</param>
-        /// <returns>A hashtable mapping the name of the IDE in the running object table to the corresponding DTE object</returns>
-        public static Hashtable GetIDEInstances( bool openSolutionsOnly )
-        {
-            Hashtable runningIDEInstances = new Hashtable();
-            Hashtable runningObjects = GetRunningObjectTable();
-
-            IDictionaryEnumerator rotEnumerator = runningObjects.GetEnumerator();
-            while ( rotEnumerator.MoveNext() )
-            {
-                string candidateName = (string) rotEnumerator.Key;
-                if (!candidateName.StartsWith("!VisualStudio.DTE"))
-                    continue;
-
-                object ide = rotEnumerator.Value;
-                if (ide == null)
-                    continue;
-
-                if (openSolutionsOnly)
-                {
-                    try
-                    {
-                        object sol = ViaCOM.GetProperty(ide, "Solution");
-                        string solutionFile = (string)ViaCOM.GetProperty(sol, "FullName");
-                        if (solutionFile != String.Empty)
-                        {
-                            runningIDEInstances[ candidateName ] = ide;
-                        }
-                    } 
-                    catch {}
-                }
-                else
-                {
-                    runningIDEInstances[ candidateName ] = ide;
-                }                       
-            }
-            return runningIDEInstances;
-        }
-
-        /// <summary>
-        /// Get a snapshot of the running object table (ROT).
-        /// </summary>
-        /// <returns>A hashtable mapping the name of the object in the ROT to the corresponding object</returns>
-        [STAThread]
-        public static Hashtable GetRunningObjectTable()
-        {
-            Hashtable result = new Hashtable();
-
-            int numFetched = 0;
-            IRunningObjectTable runningObjectTable;   
-            IEnumMoniker monikerEnumerator;
-            IMoniker[] monikers = new IMoniker[1];
-
-            GetRunningObjectTable(0, out runningObjectTable);    
-            runningObjectTable.EnumRunning(out monikerEnumerator);
-            monikerEnumerator.Reset();          
-            
-            while (monikerEnumerator.Next(1, monikers, new IntPtr(numFetched)) == 0)
-            {     
-                IBindCtx ctx;
-                CreateBindCtx(0, out ctx);     
-                    
-                string runningObjectName;
-                monikers[0].GetDisplayName(ctx, null, out runningObjectName);
-
-                object runningObjectVal;  
-                runningObjectTable.GetObject( monikers[0], out runningObjectVal); 
-
-                result[ runningObjectName ] = runningObjectVal;
-            } 
-
-            return result;
-        }
-
-        public static string GetSolutionVersion(string solutionFullFileName) 
-        {
-            string version;
-            System.IO.StreamReader solutionStreamReader = null;
-            string firstLine;
-            string format;
-            
-            try
-            {
-                solutionStreamReader = new System.IO.StreamReader(solutionFullFileName);
-                do
-                {
-                    firstLine = solutionStreamReader.ReadLine();
-                }
-                while (firstLine == "");
-                
-                format = firstLine.Substring(firstLine.LastIndexOf(" ")).Trim();
-        
-                switch(format)
-                {
-                    case "7.00":
-                        version = "VC70";
-                        break;
-
-                    case "8.00":
-                        version = "VC71";
-                        break;
-
-                    case "9.00":
-                        version = "VC80";
-                        break;
-                
-                    case "10.00":
-                        version = "VC90";
-                        break;
-                    default:
-                        throw new ApplicationException("Unknown .sln version: " + format);
-                }
-            }
-            finally
-            {
-                if(solutionStreamReader != null) 
-                {
-                    solutionStreamReader.Close();
-                }
-            }
-            
-            return version;
-        }
-
-        public static string GetVSProgID(string version)
-        {
-            string progid = null;
-            switch(version)
-            {
-                case "VC70":
-                    progid = "VisualStudio.DTE.7";
-                    break;
-
-                case "VC71":
-                    progid = "VisualStudio.DTE.7.1";
-                    break;
-
-                case "VC80":
-                    progid = "VisualStudio.DTE.8.0";
-                    break;
-                
-                case "VC90":
-                    progid = "VisualStudio.DTE.9.0";
-                    break;
-                default:
-                    throw new ApplicationException("Can't handle VS version: " + version);
-            }
-
-            return progid;
-        }
-
-        public static bool SetProjectWorkingDir(object sol, string project_name, string working_dir)
-        {
-            bool made_change = false;
-            Console.WriteLine("Looking for project {0}...", project_name);
-            try
-            {
-                object prjs = ViaCOM.GetProperty(sol, "Projects");
-                object count = ViaCOM.GetProperty(prjs, "Count");
-                for(int i = 1; i <= (int)count; ++i)
-                {
-                    object[] prjItemArgs = { (object)i };
-                    object prj = ViaCOM.CallMethod(prjs, "Item", prjItemArgs);
-                    string name = (string)ViaCOM.GetProperty(prj, "Name");
-                    if (0 == string.Compare(name, project_name, ignore_case))
-                    {
-                        Console.WriteLine("Found project: {0}", project_name);
-                        Console.WriteLine("Setting working directory");
-
-                        string full_project_name = (string)ViaCOM.GetProperty(prj, "FullName");
-                        Console.WriteLine(full_project_name);
-
-                        // *NOTE:Mani Thanks to incompatibilities between different versions of the 
-                        // VCProjectEngine.dll assembly, we can't cast the objects recevied from the DTE to
-                        // the VCProjectEngine types from a different version than the one built 
-                        // with. ie, VisualStudio.DTE.7.1 objects can't be converted in a project built 
-                        // in VS 8.0. To avoid this problem, we can use the com object interfaces directly, 
-                        // without the type casting. Its tedious code, but it seems to work.
-
-                        // oCfgs should be assigned to a 'Project.Configurations' collection.
-                        object oCfgs = ViaCOM.GetProperty(ViaCOM.GetProperty(prj, "Object"), "Configurations");
-
-                        // oCount will be assigned to the number of configs present in oCfgs.
-                        object oCount = ViaCOM.GetProperty(oCfgs, "Count");
-
-                        for (int cfgIndex = 1; cfgIndex <= (int)oCount; ++cfgIndex)
-                        {
-                            object[] itemArgs = {(object)cfgIndex};
-                            object oCfg = ViaCOM.CallMethod(oCfgs, "Item", itemArgs);
-                            object oDebugSettings = ViaCOM.GetProperty(oCfg, "DebugSettings");
-                            ViaCOM.SetProperty(oDebugSettings, "WorkingDirectory", (object)working_dir);
-                        }
-
-                        break;
-                    }
-                }
-                made_change = true;
-            }
-            catch( Exception e )
-            {
-                Console.WriteLine(e.Message);
-                Console.WriteLine("Failed to set working dir for project, {0}.", project_name);
-            }
-
-            return made_change;
-        }
-
-        public static bool SetStartupProject(string startup_project)
-        {
-            bool result = false;
-            try
-            {
-                // You need the 'unique name of the project to set StartupProjects.
-                // find the project by generic name.
-                Console.WriteLine("Trying to set \"{0}\" to the startup project", startup_project);
-                object prjs = ViaCOM.GetProperty(solution, "Projects");
-                object count = ViaCOM.GetProperty(prjs, "Count");
-                for (int i = 1; i <= (int)count; ++i)
-                {
-                    object[] itemArgs = { (object)i };
-                    object prj = ViaCOM.CallMethod(prjs, "Item", itemArgs);
-                    object prjName = ViaCOM.GetProperty(prj, "Name");
-                    if (0 == string.Compare((string)prjName, startup_project, ignore_case))
-                    {
-                        object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
-                        ViaCOM.SetProperty(solBuild, "StartupProjects", ViaCOM.GetProperty(prj, "UniqueName"));
-                        Console.WriteLine("  Success!");
-                        result = true;
-                        break;
-                    }
-                }
-
-                if (result == false)
-                {
-                    Console.WriteLine("  Could not find project \"{0}\" in the solution.", startup_project);
-                }
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine("  Failed to set the startup project!");
-                Console.WriteLine(e.Message);
-            }
-            return result;
-        }
-
-        public static bool SetActiveConfig(string config)
-        {
-            bool result = false;
-            try
-            {
-                Console.WriteLine("Trying to set active config to \"{0}\"", config);
-                object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
-                object solCfgs = ViaCOM.GetProperty(solBuild, "SolutionConfigurations");
-                object[] itemArgs = { (object)config };
-                object solCfg = ViaCOM.CallMethod(solCfgs, "Item", itemArgs);
-                ViaCOM.CallMethod(solCfg, "Activate", null);
-                Console.WriteLine("  Success!");
-                result = true;
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine("  Failed to set \"{0}\" as the active config.", config);
-                Console.WriteLine(e.Message);
-            }
-            return result;
-        }
-    }
-}
+// Code about getting running instances visual studio
+// was borrowed from 
+// http://www.codeproject.com/KB/cs/automatingvisualstudio.aspx
+
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Runtime.InteropServices.ComTypes;
+using Microsoft.CSharp;
+
+namespace VSTool
+{
+    // The MessageFilter class comes from:
+    // http://msdn.microsoft.com/en-us/library/ms228772(VS.80).aspx
+    // It allows vstool to get timing error messages from 
+    // visualstudio and handle them.
+    public class MessageFilter : IOleMessageFilter
+    {
+        //
+        // Class containing the IOleMessageFilter
+        // thread error-handling functions.
+
+        // Start the filter.
+        public static void Register()
+        {
+            IOleMessageFilter newFilter = new MessageFilter(); 
+            IOleMessageFilter oldFilter = null; 
+            CoRegisterMessageFilter(newFilter, out oldFilter);
+        }
+
+        // Done with the filter, close it.
+        public static void Revoke()
+        {
+            IOleMessageFilter oldFilter = null; 
+            CoRegisterMessageFilter(null, out oldFilter);
+        }
+
+        //
+        // IOleMessageFilter functions.
+        // Handle incoming thread requests.
+        int IOleMessageFilter.HandleInComingCall(int dwCallType, 
+          System.IntPtr hTaskCaller, int dwTickCount, System.IntPtr 
+          lpInterfaceInfo) 
+        {
+            //Return the flag SERVERCALL_ISHANDLED.
+            return 0;
+        }
+
+        // Thread call was rejected, so try again.
+        int IOleMessageFilter.RetryRejectedCall(System.IntPtr 
+          hTaskCallee, int dwTickCount, int dwRejectType)
+        {
+            if (dwRejectType == 2)
+            // flag = SERVERCALL_RETRYLATER.
+            {
+                // Retry the thread call immediately if return >=0 & 
+                // <100.
+                return 99;
+            }
+            // Too busy; cancel call.
+            return -1;
+        }
+
+        int IOleMessageFilter.MessagePending(System.IntPtr hTaskCallee, 
+          int dwTickCount, int dwPendingType)
+        {
+            //Return the flag PENDINGMSG_WAITDEFPROCESS.
+            return 2; 
+        }
+
+        // Implement the IOleMessageFilter interface.
+        [DllImport("Ole32.dll")]
+        private static extern int 
+          CoRegisterMessageFilter(IOleMessageFilter newFilter, out 
+          IOleMessageFilter oldFilter);
+    }
+
+    [ComImport(), Guid("00000016-0000-0000-C000-000000000046"), 
+    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
+    interface IOleMessageFilter 
+    {
+        [PreserveSig]
+        int HandleInComingCall( 
+            int dwCallType, 
+            IntPtr hTaskCaller, 
+            int dwTickCount, 
+            IntPtr lpInterfaceInfo);
+
+        [PreserveSig]
+        int RetryRejectedCall( 
+            IntPtr hTaskCallee, 
+            int dwTickCount,
+            int dwRejectType);
+
+        [PreserveSig]
+        int MessagePending( 
+            IntPtr hTaskCallee, 
+            int dwTickCount,
+            int dwPendingType);
+    }
+
+    class ViaCOM
+    {
+        public static object GetProperty(object from_obj, string prop_name)
+        {
+            try
+            {
+                Type objType = from_obj.GetType();
+                return objType.InvokeMember(
+                    prop_name,
+                    BindingFlags.GetProperty, null,
+                    from_obj,
+                    null);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("Error getting property: \"{0}\"", prop_name);
+                Console.WriteLine(e.Message);
+                throw e;
+            }
+        }
+
+        public static object SetProperty(object from_obj, string prop_name, object new_value)
+        {
+            try
+            {
+                object[] args = { new_value };
+                Type objType = from_obj.GetType();
+                return objType.InvokeMember(
+                    prop_name,
+                    BindingFlags.DeclaredOnly |
+                    BindingFlags.Public |
+                    BindingFlags.NonPublic |
+                    BindingFlags.Instance |
+                    BindingFlags.SetProperty,
+                    null,
+                    from_obj,
+                    args);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("Error setting property: \"{0}\"", prop_name);
+                Console.WriteLine(e.Message);
+                throw e;
+            }
+        }
+
+        public static object CallMethod(object from_obj, string method_name, params object[] args)
+        {
+            try
+            {
+                Type objType = from_obj.GetType();
+                return objType.InvokeMember(
+                    method_name,
+                    BindingFlags.DeclaredOnly |
+                    BindingFlags.Public |
+                    BindingFlags.NonPublic |
+                    BindingFlags.Instance |
+                    BindingFlags.InvokeMethod,
+                    null,
+                    from_obj,
+                    args);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("Error calling method \"{0}\"", method_name);
+                Console.WriteLine(e.Message);
+                throw e;
+            }
+        }
+    };
+
+    /// <summary>
+	/// The main entry point class for VSTool.
+	/// </summary>
+    class VSToolMain
+    {
+        #region Interop imports
+        [DllImport("ole32.dll")]  
+        public static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot); 
+ 
+        [DllImport("ole32.dll")]  
+        public static extern int  CreateBindCtx(int reserved, out IBindCtx ppbc);
+        #endregion 
+
+        static System.Boolean ignore_case = true;
+
+        static string solution_name = null;
+        static bool use_new_vs = false;
+        static Hashtable projectDict = new Hashtable();
+        static string startup_project = null;
+        static string config = null;
+
+        static object dte = null;
+        static object solution = null;
+
+        /// <summary>
+		/// The main entry point for the application.
+		/// </summary>
+		[STAThread]
+		static int Main(string[] args)
+		{
+            int retVal = 0;
+            bool need_save = false;
+
+            try
+            {
+                parse_command_line(args);
+
+                Console.WriteLine("Editing solution: {0}", solution_name);
+
+                bool found_open_solution = GetDTEAndSolution();
+
+                if (dte == null || solution == null)
+                {
+                    retVal = 1;
+                }
+                else
+                {
+                    MessageFilter.Register();
+
+                    // Walk through all of the projects in the solution
+                    // and list the type of each project.
+                    foreach (DictionaryEntry p in projectDict)
+                    {
+                        string project_name = (string)p.Key;
+                        string working_dir = (string)p.Value;
+                        if (SetProjectWorkingDir(solution, project_name, working_dir))
+                        {
+                            need_save = true;
+                        }
+                    }
+
+                    if (config != null)
+                    {
+                        need_save = SetActiveConfig(config);
+                    }
+
+                    if (startup_project != null)
+                    {
+                        need_save = SetStartupProject(startup_project);
+                    }
+
+                    if (need_save)
+                    {
+                        if (found_open_solution == false)
+                        {
+                            ViaCOM.CallMethod(solution, "Close", null);
+                        }
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+                retVal = 1;
+            }
+            finally
+            {
+                if (solution != null)
+                {
+                    Marshal.ReleaseComObject(solution);
+                    solution = null;
+                }
+
+                if (dte != null)
+                {
+                    Marshal.ReleaseComObject(dte);
+                    dte = null;
+                }
+
+                MessageFilter.Revoke();
+            }
+            return retVal;
+        }
+
+        public static bool parse_command_line(string[] args)
+        {
+            string options_desc = 
+                "--solution <solution_name>   : MSVC solution name. (required)\n" +
+                "--use_new_vs                 : Ignore running versions of visual studio.\n" +
+                "--workingdir <project> <dir> : Set working dir of a VC project.\n" +
+                "--config <config>            : Set the active config for the solution.\n" +
+                "--startup <project>          : Set the startup project for the solution.\n";
+
+            try
+            {
+                // Command line param parsing loop.
+                int i = 0;
+                for (; i < args.Length; ++i)
+                {
+                    if ("--solution" == args[i])
+                    {
+                        if (solution_name != null)
+                        {
+                            throw new ApplicationException("Found second --solution option");
+                        }
+                        solution_name = args[++i];
+                    }
+                    else if ("--use_new_vs" == args[i])
+                    {
+                        use_new_vs = true;
+                    }
+
+                    else if ("--workingdir" == args[i])
+                    {
+                        string project_name = args[++i];
+                        string working_dir = args[++i];
+                        projectDict.Add(project_name, working_dir);
+                    }
+                    else if ("--config" == args[i])
+                    {
+                        if (config != null)
+                        {
+                            throw new ApplicationException("Found second --config option");
+                        }
+                        config = args[++i];
+                    }
+                    else if ("--startup" == args[i])
+                    {
+                        if (startup_project != null)
+                        {
+                            throw new ApplicationException("Found second --startup option");
+                        }
+                        startup_project = args[++i];
+                    }
+                    else
+                    {
+                        throw new ApplicationException("Found unrecognized token on command line: " + args[i]);
+                    }
+                }
+
+                if (solution_name == null)
+                {
+                    throw new ApplicationException("The --solution option is required.");
+                }
+            }
+            catch(ApplicationException e)
+            {
+
+                Console.WriteLine("Oops! " + e.Message);
+                Console.Write("Command line:");
+                foreach (string arg in args)
+                {
+                    Console.Write(" " + arg);
+                }
+                Console.Write("\n\n");
+                Console.WriteLine("VSTool command line usage");
+                Console.Write(options_desc);
+                throw e;
+            }
+            return true;
+        }
+
+        public static bool GetDTEAndSolution()
+        {
+            bool found_open_solution = true;
+
+            Console.WriteLine("Looking for existing VisualStudio instance...");
+
+            // Get an instance of the currently running Visual Studio .NET IDE.
+            // dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1");
+            string full_solution_name = System.IO.Path.GetFullPath(solution_name);
+            if (false == use_new_vs)
+            {
+                dte = GetIDEInstance(full_solution_name);
+            }
+
+            if (dte == null)
+            {
+                try
+                {
+                    Console.WriteLine("  Didn't find open solution, starting new background VisualStudio instance...");
+                    Console.WriteLine("  Reading .sln file version...");
+                    string version = GetSolutionVersion(full_solution_name);
+
+                    Console.WriteLine("  Using version: {0}...", version);
+                    string progid = GetVSProgID(version);
+
+                    Type objType = Type.GetTypeFromProgID(progid);
+                    dte = System.Activator.CreateInstance(objType);
+                    Console.WriteLine("  Reading solution: \"{0}\"", full_solution_name);
+
+                    solution = ViaCOM.GetProperty(dte, "Solution");
+                    object[] openArgs = { full_solution_name };
+                    ViaCOM.CallMethod(solution, "Open", openArgs);
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine(e.Message);
+                    Console.WriteLine("Quitting do to error opening: {0}", full_solution_name);
+                    solution = null;
+                    dte = null;
+                    return found_open_solution;
+                }
+                found_open_solution = false;
+            }
+
+            if (solution == null)
+            {
+                solution = ViaCOM.GetProperty(dte, "Solution");
+            }
+
+            return found_open_solution;
+        }
+
+        /// <summary>
+        /// Get the DTE object for the instance of Visual Studio IDE that has 
+        /// the specified solution open.
+        /// </summary>
+        /// <param name="solutionFile">The absolute filename of the solution</param>
+        /// <returns>Corresponding DTE object or null if no such IDE is running</returns>
+        public static object GetIDEInstance( string solutionFile )
+        {
+            Hashtable runningInstances = GetIDEInstances( true );
+            IDictionaryEnumerator enumerator = runningInstances.GetEnumerator();
+
+            while ( enumerator.MoveNext() )
+            {
+                try
+                {
+                    object ide = enumerator.Value;
+                    if (ide != null)
+                    {
+                        object sol = ViaCOM.GetProperty(ide, "Solution");
+                        if (0 == string.Compare((string)ViaCOM.GetProperty(sol, "FullName"), solutionFile, ignore_case))
+                        {
+                            return ide;
+                        }
+                    }
+                } 
+                catch{}
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// Get a table of the currently running instances of the Visual Studio .NET IDE.
+        /// </summary>
+        /// <param name="openSolutionsOnly">Only return instances that have opened a solution</param>
+        /// <returns>A hashtable mapping the name of the IDE in the running object table to the corresponding DTE object</returns>
+        public static Hashtable GetIDEInstances( bool openSolutionsOnly )
+        {
+            Hashtable runningIDEInstances = new Hashtable();
+            Hashtable runningObjects = GetRunningObjectTable();
+
+            IDictionaryEnumerator rotEnumerator = runningObjects.GetEnumerator();
+            while ( rotEnumerator.MoveNext() )
+            {
+                string candidateName = (string) rotEnumerator.Key;
+                if (!candidateName.StartsWith("!VisualStudio.DTE"))
+                    continue;
+
+                object ide = rotEnumerator.Value;
+                if (ide == null)
+                    continue;
+
+                if (openSolutionsOnly)
+                {
+                    try
+                    {
+                        object sol = ViaCOM.GetProperty(ide, "Solution");
+                        string solutionFile = (string)ViaCOM.GetProperty(sol, "FullName");
+                        if (solutionFile != String.Empty)
+                        {
+                            runningIDEInstances[ candidateName ] = ide;
+                        }
+                    } 
+                    catch {}
+                }
+                else
+                {
+                    runningIDEInstances[ candidateName ] = ide;
+                }                       
+            }
+            return runningIDEInstances;
+        }
+
+        /// <summary>
+        /// Get a snapshot of the running object table (ROT).
+        /// </summary>
+        /// <returns>A hashtable mapping the name of the object in the ROT to the corresponding object</returns>
+        [STAThread]
+        public static Hashtable GetRunningObjectTable()
+        {
+            Hashtable result = new Hashtable();
+
+            int numFetched = 0;
+            IRunningObjectTable runningObjectTable;   
+            IEnumMoniker monikerEnumerator;
+            IMoniker[] monikers = new IMoniker[1];
+
+            GetRunningObjectTable(0, out runningObjectTable);    
+            runningObjectTable.EnumRunning(out monikerEnumerator);
+            monikerEnumerator.Reset();          
+            
+            while (monikerEnumerator.Next(1, monikers, new IntPtr(numFetched)) == 0)
+            {     
+                IBindCtx ctx;
+                CreateBindCtx(0, out ctx);     
+                    
+                string runningObjectName;
+                monikers[0].GetDisplayName(ctx, null, out runningObjectName);
+
+                object runningObjectVal;  
+                runningObjectTable.GetObject( monikers[0], out runningObjectVal); 
+
+                result[ runningObjectName ] = runningObjectVal;
+            } 
+
+            return result;
+        }
+
+        public static string GetSolutionVersion(string solutionFullFileName) 
+        {
+            string version;
+            System.IO.StreamReader solutionStreamReader = null;
+            string firstLine;
+            string format;
+            
+            try
+            {
+                solutionStreamReader = new System.IO.StreamReader(solutionFullFileName);
+                do
+                {
+                    firstLine = solutionStreamReader.ReadLine();
+                }
+                while (firstLine == "");
+                
+                format = firstLine.Substring(firstLine.LastIndexOf(" ")).Trim();
+        
+                switch(format)
+                {
+                    case "7.00":
+                        version = "VC70";
+                        break;
+
+                    case "8.00":
+                        version = "VC71";
+                        break;
+
+                    case "9.00":
+                        version = "VC80";
+                        break;
+                
+                    case "10.00":
+                        version = "VC90";
+                        break;
+                    default:
+                        throw new ApplicationException("Unknown .sln version: " + format);
+                }
+            }
+            finally
+            {
+                if(solutionStreamReader != null) 
+                {
+                    solutionStreamReader.Close();
+                }
+            }
+            
+            return version;
+        }
+
+        public static string GetVSProgID(string version)
+        {
+            string progid = null;
+            switch(version)
+            {
+                case "VC70":
+                    progid = "VisualStudio.DTE.7";
+                    break;
+
+                case "VC71":
+                    progid = "VisualStudio.DTE.7.1";
+                    break;
+
+                case "VC80":
+                    progid = "VisualStudio.DTE.8.0";
+                    break;
+                
+                case "VC90":
+                    progid = "VisualStudio.DTE.9.0";
+                    break;
+                default:
+                    throw new ApplicationException("Can't handle VS version: " + version);
+            }
+
+            return progid;
+        }
+
+        public static bool SetProjectWorkingDir(object sol, string project_name, string working_dir)
+        {
+            bool made_change = false;
+            Console.WriteLine("Looking for project {0}...", project_name);
+            try
+            {
+                object prjs = ViaCOM.GetProperty(sol, "Projects");
+                object count = ViaCOM.GetProperty(prjs, "Count");
+                for(int i = 1; i <= (int)count; ++i)
+                {
+                    object[] prjItemArgs = { (object)i };
+                    object prj = ViaCOM.CallMethod(prjs, "Item", prjItemArgs);
+                    string name = (string)ViaCOM.GetProperty(prj, "Name");
+                    if (0 == string.Compare(name, project_name, ignore_case))
+                    {
+                        Console.WriteLine("Found project: {0}", project_name);
+                        Console.WriteLine("Setting working directory");
+
+                        string full_project_name = (string)ViaCOM.GetProperty(prj, "FullName");
+                        Console.WriteLine(full_project_name);
+
+                        // *NOTE:Mani Thanks to incompatibilities between different versions of the 
+                        // VCProjectEngine.dll assembly, we can't cast the objects recevied from the DTE to
+                        // the VCProjectEngine types from a different version than the one built 
+                        // with. ie, VisualStudio.DTE.7.1 objects can't be converted in a project built 
+                        // in VS 8.0. To avoid this problem, we can use the com object interfaces directly, 
+                        // without the type casting. Its tedious code, but it seems to work.
+
+                        // oCfgs should be assigned to a 'Project.Configurations' collection.
+                        object oCfgs = ViaCOM.GetProperty(ViaCOM.GetProperty(prj, "Object"), "Configurations");
+
+                        // oCount will be assigned to the number of configs present in oCfgs.
+                        object oCount = ViaCOM.GetProperty(oCfgs, "Count");
+
+                        for (int cfgIndex = 1; cfgIndex <= (int)oCount; ++cfgIndex)
+                        {
+                            object[] itemArgs = {(object)cfgIndex};
+                            object oCfg = ViaCOM.CallMethod(oCfgs, "Item", itemArgs);
+                            object oDebugSettings = ViaCOM.GetProperty(oCfg, "DebugSettings");
+                            ViaCOM.SetProperty(oDebugSettings, "WorkingDirectory", (object)working_dir);
+                        }
+
+                        break;
+                    }
+                }
+                made_change = true;
+            }
+            catch( Exception e )
+            {
+                Console.WriteLine(e.Message);
+                Console.WriteLine("Failed to set working dir for project, {0}.", project_name);
+            }
+
+            return made_change;
+        }
+
+        public static bool SetStartupProject(string startup_project)
+        {
+            bool result = false;
+            try
+            {
+                // You need the 'unique name of the project to set StartupProjects.
+                // find the project by generic name.
+                Console.WriteLine("Trying to set \"{0}\" to the startup project", startup_project);
+                object prjs = ViaCOM.GetProperty(solution, "Projects");
+                object count = ViaCOM.GetProperty(prjs, "Count");
+                for (int i = 1; i <= (int)count; ++i)
+                {
+                    object[] itemArgs = { (object)i };
+                    object prj = ViaCOM.CallMethod(prjs, "Item", itemArgs);
+                    object prjName = ViaCOM.GetProperty(prj, "Name");
+                    if (0 == string.Compare((string)prjName, startup_project, ignore_case))
+                    {
+                        object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
+                        ViaCOM.SetProperty(solBuild, "StartupProjects", ViaCOM.GetProperty(prj, "UniqueName"));
+                        Console.WriteLine("  Success!");
+                        result = true;
+                        break;
+                    }
+                }
+
+                if (result == false)
+                {
+                    Console.WriteLine("  Could not find project \"{0}\" in the solution.", startup_project);
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("  Failed to set the startup project!");
+                Console.WriteLine(e.Message);
+            }
+            return result;
+        }
+
+        public static bool SetActiveConfig(string config)
+        {
+            bool result = false;
+            try
+            {
+                Console.WriteLine("Trying to set active config to \"{0}\"", config);
+                object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
+                object solCfgs = ViaCOM.GetProperty(solBuild, "SolutionConfigurations");
+                object[] itemArgs = { (object)config };
+                object solCfg = ViaCOM.CallMethod(solCfgs, "Item", itemArgs);
+                ViaCOM.CallMethod(solCfg, "Activate", null);
+                Console.WriteLine("  Success!");
+                result = true;
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("  Failed to set \"{0}\" as the active config.", config);
+                Console.WriteLine(e.Message);
+            }
+            return result;
+        }
+    }
+}
diff --git a/install.xml b/install.xml
index 2f22ba5c0d456b88fc759a82306dd57dbd15df8b..ff5fadb4c740780b8a0eb13a74d7136b12600514 100644
--- a/install.xml
+++ b/install.xml
@@ -165,9 +165,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>4e2d4de03dce8a991a5727c15a284e8d</string>
+            <string>70b51d0cc93c305026e4e2778cde6d19</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-windows-20090917.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.6.0-windows-20090722.tar.bz2</uri>
           </map>
         </map>
       </map>
diff --git a/scripts/update_version_files.py b/scripts/update_version_files.py
index ee1ce69a15bb5d865f3f6c6a4e0a647e15b23b43..da60fd105a93e35059e62a63107481f20bdcfec1 100755
--- a/scripts/update_version_files.py
+++ b/scripts/update_version_files.py
@@ -47,6 +47,9 @@ def usage():
 Options:
   --version
    Specify the version string to replace current version.
+  --revision
+   Specify the revision to replace the last digit of the version.
+   By default, revision is computed from the version control system.
   --skip-on-branch
    Specify a regular expression against which the current branch
    is matched. If it matches, then leave version strings alone.
@@ -161,6 +164,7 @@ def main():
     opts, args = getopt.getopt(sys.argv[1:],
                                "",
                                ['version=',
+                                'revision=',
                                 'channel=',
                                 'server_channel=',
                                 'skip-on-branch=',
@@ -171,12 +175,15 @@ def main():
     update_server = False
     update_viewer = False
     new_version = None
+    new_revision = None
     new_viewer_channel = None
     new_server_channel = None
     skip_on_branch_re = None
     for o,a in opts:
         if o in ('--version'):
             new_version = a
+        if o in ('--revision'):
+            new_revision = a
         if o in ('--skip-on-branch'):
             skip_on_branch_re = re.compile(a)
         if o in ('--channel'):
@@ -243,11 +250,20 @@ def main():
     else:
 
         if llversion.using_svn():
-            revision = llversion.get_svn_revision()
+            if new_revision:
+                revision = new_revision
+            else:
+                revision = llversion.get_svn_revision()
             branch = llversion.get_svn_branch()
         elif llversion.using_hg():
-            revision = llversion.get_hg_changeset()
+            if new_revision:
+                revision = new_revision
+            else:
+                revision = llversion.get_hg_changeset()
             branch = llversion.get_hg_repo()
+        elif new_revision:
+            revision = new_revision
+            branch = "unknown"
         else:
             print >>sys.stderr, "ERROR: could not determine revision and branch"
             return -1